如何在Heroku部署含Node-PHP-Runner的Node.js应用并解决PHP未找到错误
解决Heroku上Node.js应用使用Node-PHP-Runner时找不到PHP的问题
问题根源
错误提示/bin/sh: 1: php: not found明确说明Heroku的Node.js构建环境中未安装PHP运行时。你提到添加官方PHP构建包后Node.js无法正常工作,大概率是构建包顺序错误或缺少PHP构建包所需的触发文件导致的冲突。
可行解决方案
方案1:正确配置多构建包(推荐)
Heroku支持同时使用多个构建包,调整顺序并补充必要文件即可避免冲突:
- 清空现有构建包:
heroku buildpacks:clear
- 先添加Node.js构建包(确保Node环境优先配置):
heroku buildpacks:add heroku/nodejs
- 再添加PHP构建包:
heroku buildpacks:add heroku/php
- 在项目根目录创建空的
composer.json文件(PHP构建包需要该文件触发构建流程):
{}
- 提交更改并重新部署:
git add composer.json git commit -m "Add composer.json to enable PHP buildpack" git push heroku main
部署完成后,Heroku会先配置Node.js环境,再安装PHP运行时,两者可以共存。
方案2:手动在Node构建流程中安装PHP
如果多构建包方案仍有冲突,可以通过postinstall脚本手动安装PHP二进制文件:
- 在
package.json的scripts中添加postinstall命令:
"scripts": { "start": "node node_server.js", "postinstall": "curl -sSL https://github.com/mlocati/php-buildpack/releases/latest/download/php.tar.gz | tar -xzf - -C /tmp && ln -s /tmp/php/bin/php /app/bin/php" }
- 在Node代码中指定PHP的路径:
const php = require('php'); // 指定手动安装的PHP路径 php.bin = '/app/bin/php';
- 提交更改并重新部署。
方案3:指定PHP构建包的绝对路径
如果已经安装了PHP构建包但Node-PHP-Runner找不到PHP,可以在代码中直接指定Heroku PHP构建包的默认路径:
const php = require('php'); // Heroku PHP构建包的默认PHP路径 php.bin = '/app/.heroku/php/bin/php';
可以通过Heroku控制台执行which php命令确认实际路径。
内容的提问来源于stack exchange,提问作者TheLoneWolf
相关产品推荐
相关产品推荐

