如何解决在连接到 Microsoft SQL Server 数据库的 Elastic Beanstalk PHP 平台上部署应用程序时收到的 PHP 致命错误?
在连接到 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 配置文件,如以下 .ebextensions/pdo_sqlsrv.config 文件:
重要事项:以下解决方法中使用的 .ebextensions 文件仅适用于 Amazon Linux 1 和 Amazon Linux 2 亚马逊云机器镜像 (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 文件。
相关内容
- AWS 官方已更新 10 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前