Azure Debian环境下PHP8.1安装pdo_sqlsrv时make失败求助
解决Azure App Service Linux环境下PHP安装sqlsrv/pdo_sqlsrv扩展的编译错误
问题分析
编译时出现fatal error: config.h: No such file or directory,本质是pecl编译过程中路径映射异常,加上Azure App Service Linux环境的编译工具链限制,导致自动编译流程失败。以下是两种可靠的解决方法:
方法一:使用预编译扩展(推荐,避免编译)
Azure App Service Linux无需手动编译,直接使用官方预编译的扩展文件即可:
- 确认你的App Service使用的PHP版本(可通过
php -v查看) - 获取对应PHP版本、系统架构的
sqlsrv.so和pdo_sqlsrv.so预编译文件 - 在应用根目录(
/home/site/wwwroot)创建ext文件夹,将两个扩展文件上传到该目录 - 在应用根目录创建
.user.ini文件,添加以下配置:extension=/home/site/wwwroot/ext/sqlsrv.so extension=/home/site/wwwroot/ext/pdo_sqlsrv.so - 重启App Service,通过
php -m命令验证扩展是否加载成功
方法二:修复编译流程,解决config.h缺失问题
如果必须手动编译,按以下步骤操作:
- 清理残留的编译文件:
pecl uninstall -r pdo_sqlsrv sqlsrv rm -rf /tmp/pear/temp/* - 安装完整的编译依赖:
apt-get update && apt-get install -y build-essential php-dev libssl-dev unixodbc-dev - 手动下载源码并编译安装(以pdo_sqlsrv为例,sqlsrv步骤相同):
pecl download pdo_sqlsrv tar xzf pdo_sqlsrv-*.tgz cd pdo_sqlsrv-* phpize ./configure --with-php-config=/usr/local/bin/php-config make && make install - 编译完成后,在php.ini中添加扩展配置:
extension=pdo_sqlsrv.so extension=sqlsrv.so - 重启App Service验证扩展加载状态
额外注意事项
- 确保扩展版本与PHP版本兼容:比如PHP 7.4对应sqlsrv 5.9.x系列,PHP 8.0对应5.10.x系列,PHP 8.1+对应更高版本
- Azure App Service Linux的临时目录会定期清理,不要将扩展文件放在临时目录中
内容的提问来源于stack exchange,提问作者Mike Wright
相关产品推荐
相关产品推荐

