Node.js应用程序的PHP子进程不输出任何内容

时间:2019-06-27 19:41:16

标签: php node.js typescript

我尝试从用Typescript编写的nodejs应用程序启动一个PHP Web服务器。必须将PHP进程的stdout / stderr重定向到一个文件,以便使用另一个程序监视它。

我遵循文档here,并编写了以下代码:

import * as child_process from "child_process";
import * as process from "process";
import * as fs from "fs";

let out = fs.openSync("./test.log", "a");
let err = fs.openSync("./test.log", "a");

let proc  = child_process.spawn("php -S 0.0.0.0:8080", {cwd: ".", env: process.env, shell: true, stdio: ["ignore", out, err]});

但是文件test.log保持为空。

当我执行一个完成的过程(例如 $ php -i )时,此代码有效,但在其他长时间运行的过程(例如 $ ping )中也可以使用。

我还尝试了其他解决方案...

let proc  = child_process.spawn("php", ["-S", "0.0.0.0:8080"], {cwd: ".", env: process.env, shell: false, stdio: ["ignore", out, err]});
let proc  = child_process.spawn("php", ["-S 0.0.0.0:8080"], {cwd: ".", env: process.env, shell: true, stdio: ["ignore", out, err]});

...但是他们都不起作用。

我做错了什么? php或我的nodejs代码有问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试一下:

import * as child_process from "child_process";
import * as process from "process";
import * as fs from "fs";

// let out = fs.openSync("./test.log", "a");
// let err = fs.openSync("./test.log", "a");

let proc  = child_process.spawn('php', ['-S', '0.0.0.0:8080']);

proc.on('error', (err) => {
    console.log('Failed to start child_process.', err);
});

proc.stdout.on('data', (data) => {
  fs.writeFile('./test.log', data, function (err) {
     if (err) throw err;
  });
});

proc.stderr.on('data', (data) => {
  fs.writeFile('./test.err', data, function (err) {
     if (err) throw err;
});

如果仍然没有输出或出现错误,请尝试将行更改为:

let proc  = child_process.spawn('php' , ['-S', '127.0.0.1:8080']);