【问题标题】:Run console php script by nodejs on heroku hosting在 heroku 主机上通过 nodejs 运行控制台 php 脚本
【发布时间】: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了吗?超时?没有?有错误吗?

标签: php node.js heroku


【解决方案1】:

我自己解决了这个问题。 https://github.com/vodolaz095/nodejs-php-heroku-example

我已经构建了 PHP 二进制文件,然后将其包含到 nodejs 项目中并推送到服务器。 它正在运行。

我并不暗示这是唯一也是最好的解决方案,但它完全符合我的要求

所以,我已经发布了一个示例,我该怎么做

【讨论】:

  • 这看起来很糟糕......但很高兴知道你找到了答案。
【解决方案2】:

在您无法控制的服务器上没有 php 二进制文件,您无法安装它,因此您的代码无法运行,您可以选择:

  • 离开heroku,在你的服务器上安装node.js和php,然后使用这段代码(如果你有服务器的话)
  • 让您的 php 保持稳定,在另一台服务器上启动,并以另一种形式获取结果(如果您有服务器和时间)
  • 用heroku支持的格式重写你的php脚本(如果你有时间的话)

没有其他选择,每个都有缺点,但除非你有很多钱,否则我怀疑heroku会愿意为你在他们的服务器上安装php。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多