Heroku平台无法安装PHP的ext-sqlsrv与ext-pdo_sqlsrv扩展求助
问题背景
已按照指定buildpack完成以下配置,但推送代码至Heroku时,Composer报错找不到ext-sqlsrv和ext-pdo_sqlsrv扩展:
- 在
.user.ini中指定加载sqlsrv.so和pdo_sqlsrv.so - 在
Aptfile中添加相关依赖包 - 设置环境变量
HEROKU_PHP_PLATFORM_REPOSITORIES指向指定packages.json
报错信息:
remote: Problem 1
remote: - Root composer.json requires PHP extension ext-sqlsrv ^5.9 but it is missing from your system. Install or enable PHP's sqlsrv extension.
remote: Problem 2
remote: - Root composer.json requires PHP extension ext-pdo_sqlsrv ^5.9 but it is missing from your system. Install or enable PHP's pdo_sqlsrv extension.
解决步骤
调整Buildpack加载顺序
Heroku需要先加载官方PHP buildpack,再加载sqlsrv专用buildpack。执行以下命令检查并调整:# 查看当前buildpack顺序 heroku buildpacks # 若顺序错误,先添加官方PHP buildpack到第一位 heroku buildpacks:add --index 1 heroku/php # 再添加sqlsrv buildpack到第二位 heroku buildpacks:add --index 2 https://github.com/heroku-softtrends/heroku-php-sqlsrv-buildpack修改Composer配置跳过本地扩展检查
在项目根目录的composer.json中添加platform配置,告知Composer扩展已由外部环境提供:"config": { "platform": { "ext-sqlsrv": "5.9", "ext-pdo_sqlsrv": "5.9" } }执行
composer update更新依赖后再推送。如果临时需要跳过检查,也可设置环境变量:heroku config:set COMPOSER_IGNORE_PLATFORM_REQS=1验证Aptfile依赖正确性
确保Aptfile中只填写依赖包名,而非本地路径,正确内容示例:msodbcsql17 unixodbc-dev检查.user.ini配置
确认.user.ini在项目根目录,内容无语法错误:extension=sqlsrv.so extension=pdo_sqlsrv.so查看构建日志定位问题
推送后通过日志排查细节:heroku logs --tail若日志中出现依赖缺失或编译失败信息,根据提示补充
Aptfile中的依赖包。
内容的提问来源于stack exchange,提问作者Kennon Young

