【发布时间】:2014-11-17 17:19:18
【问题描述】:
我有一个在 heroku 上运行的 nodejs 应用程序。 我必须在其中运行控制台 PHP 脚本。 我想通过子进程执行脚本 - http://nodejs.org/api/child_process.html.
我的问题是 - 如何在 heroku 主机中同时启用 nodejs 和 php 解释器?
这是我的应用程序的 index.js 文件(简化)
var http = require('http'),
exec = require('child_process').exec;
http.createServer(function (req, res) {
exec('php script.php',
function (error, stdout, stderr) {
if(error){
throw error;
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(stdout);
}
});
}).listen(process.env.PORT || 3000);
这是 script.php 文件
<?php
echo "Hello, world!";
当我尝试启动我的应用程序时,我在日志中有此响应
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: Error: Command failed: /bin/sh: php: not found
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at ChildProcess.exithandler (child_process.js:648:15)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at ChildProcess.emit (events.js:98:17)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at maybeClose (child_process.js:756:16)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Socket.<anonymous> (child_process.js:969:11)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Socket.emit (events.js:95:17)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Pipe.close (net.js:465:12)
所以看起来它没有安装 PHP 二进制文件
UPD:他们有 php 的 buildpack https://github.com/heroku/heroku-buildpack-php 我会尝试使用它并在这里分享结果
UPD1:buildpack 不允许为其启动 nodejs 我决定像这里描述的那样构建 php 二进制文件并将其与我的项目一起发布 - 可能我可以构建 PHP 二进制文件并将其与我的项目一起发布 - Compile PHP into Static Binary
【问题讨论】:
-
为什么要在 node.js 上使用 php 控制台?
-
因为我有一些非常大的遗留 PHP 脚本(2000 行代码),它执行一些奇怪的计算,而且我没有在 nodejs 中重写它的冲动,我只需要运行它控制台,并捕获标准输出
-
为什么需要从 node.js 内部启动 php 控制台呢?从你的 php 中创建一个 REST API,让它以 JSON 格式回答,并使用 node.js 调用 php 服务器,解析 JSON 并使用它
-
对于您的方法,我需要在单独的服务器上托管 PHP 脚本,然后从中制作 REST api...无论如何,感谢您的回答,但这不是我想要遵循的路径跨度>
-
你可以在同一个服务器上做,只是监听不同的端口。另外,如果你开始你的代码会发生什么?你收到Hello World了吗?超时?没有?有错误吗?