Microsoft SQL Server 데이터베이스에 연결하는 AWS Elastic Beanstalk PHP 플랫폼에 애플리케이션을 배포할 때 PHP 치명적 오류가 발생합니다.
간략한 설명
Microsoft SQL Server 데이터베이스에 연결되는 Elastic Beanstalk PHP 플랫폼에 애플리케이션을 배포할 때 다음 오류가 발생할 수 있습니다.
"**PHP 치명적 오류: 포착되지 않은 오류: /var/app/current/DB/**에서 정의되지 않은 함수 sqlsrv_connect() 호출"
PHP를 Microsoft SQL Server 데이터베이스에 연결하려면 먼저 SQLSRV 라이브러리와 해당 PDO 확장을 설치하고 구성해야 합니다. 이 라이브러리와 확장은 기본적으로 설치 및 구성되지 않습니다.
SQLSRV 라이브러리와 PDO 확장을 설치하려면 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스크립트를 실행하는 .ebextensions 구성 파일을 사용할 수 있습니다. 스크립트는 다음을 수행합니다.
- Microsoft SQL Server를 위한 올바른 드라이버 및 툴을 설치합니다
- 필요한 PHP 라이브러리와 확장을 활성화합니다
해결 방법
참고: 다음 단계는 모든 PHP 플랫폼 버전을 사용하는 Elastic Beanstalk 환경에 적용됩니다.
1. 애플리케이션 번들의 루트에 .ebextensions라는 디렉터리를 생성합니다.
2. 다음 .ebextensions/pdo_sqlsrv.config. 파일과 같은 .ebextensions 구성 파일을 생성합니다.
중요: 다음 해결 방법에 사용된 .ebextensions 파일은 Amazon Linux 1 및 Amazon Linux 2 Amazon Machine Image(AMI) 인스턴스에만 적용됩니다. .ebextensions 파일은 Elastic Beanstalk의 Windows 또는 사용자 지정 Ubuntu AMI 인스턴스에는 적용되지 않습니다.
###################################################################################################
#### Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
####
#### Permission is hereby granted, free of charge, to any person obtaining a copy of this
#### software and associated documentation files (the "Software"), to deal in the Software
#### without restriction, including without limitation the rights to use, copy, modify,
#### merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
#### permit persons to whom the Software is furnished to do so.
###################################################################################################
###################################################################################################
#### THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
#### INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
#### PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
#### HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
#### OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
#### SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###################################################################################################
commands:
install_mssql:
command: |
#!/bin/bash
set -x
# 0. EXIT if pdo_sqlsrv is already installed
if php -m | grep -q 'pdo_sqlsrv'
then
echo 'pdo_sqlsrv is already installed'
else
# 1. Install libtool-ltdl-devel
yum -y install libtool-ltdl-devel
# 2. Register the Microsoft Linux repository
wget https://packages.microsoft.com/config/rhel/8/prod.repo -O /etc/yum.repos.d/msprod.repo
# 3. Install MSSQL and tools
ACCEPT_EULA=N yum install mssql-tools msodbcsql17 unixODBC-devel -y --disablerepo=amzn*
# The license terms for this product can be downloaded from http://go.microsoft.com/fwlink/?LinkId=746949 and found in /usr/share/doc/mssql-tools/LICENSE.txt . By changing "ACCEPT_EULA=N" to "ACCEPT_EULA=Y", you indicate that you accept the license terms.
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# 4. Install SQLSRV and its PDO extension, and stop pecl/pecl7 from overwriting php.ini
cp -f "/etc/php.ini" "/tmp/php.ini.bk"
pecl7 install sqlsrv pdo_sqlsrv || pecl install sqlsrv pdo_sqlsrv
cp -f "/tmp/php.ini.bk" "/etc/php.ini"
# 5. Manually add the extensions to the proper php.ini.d file and fix parameters
sqlvar=$(php -r "echo ini_get('extension_dir');") && chmod 0755 $sqlvar/sqlsrv.so && chmod 0755 $sqlvar/pdo_sqlsrv.so
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
fi
3. 2단계의 .ebextensions 파일을 포함하는 애플리케이션 소스 번들을 생성합니다.
4. 업데이트된 Elastic Beanstalk 애플리케이션을 배포합니다.