如何使用节点生成php脚本以告诉节点生成另一个php脚本

时间:2018-07-27 20:28:49

标签: php node.js

我正在研究一种运行PHP脚本并对其进行跟踪的工具。该工具是用nodejs编写的。

这样生成php脚本。

function spawnProcess(cmd, params, out, err) {
    const process = spawn(cmd, params, {
        detached: true,
        stdio: ['ignore', out, err]
    });
    process.on('error', function (error) {
        console.error(`${error}`);
    });
    return process;
}

out = fs.openSync("file path", 'a');
err = fs.openSync("file path", 'a');
self.process = spawnProcess(cmd, params, out, err);
function handleExit(code) {
    self.process = undefined;
    fs.closeSync(out);
    fs.closeSync(err);
    handleErrors("file path", "file path", self.taskName).then(function () {
         return handleOutput(trueLogOut, self.taskName);
    }).then(function () {
          console.log("Done: " + self.taskName);
          return true;
    }).catch(function (err) {
          console.error(err);
    });
}
self.process.on('exit', handleExit);
self.process.on('error', handleExit);

对不起,上面的代码含糊不清,只想展示spawnProcess的使用以及如何处理stdout和stderr。

某些PHP脚本大量使用pclose(popen("cmd"))技巧来多线程自身。发生这种情况时,nodejs脚本会忽略它们。

我想为PHP脚本创建一种将消息发送回nodejs的方法,要求它使用popen / pclose将要运行的cmd启动另一个进程(我可以编辑PHP脚本,然后用我自己的函数替换pclose(popen("cmd"))

我的问题是,如何通过PHP将消息发送回nodejs?

我的理论是:

  1. 在PHP使用命令发布到的节点脚本上创建类似于Web休息的调用。但这似乎是一种非常绕行的方式,而且不安全。

  2. 在stdout中使用特殊消息。因此,PHP脚本将具有echo "~runscript script2.php~。但这不会真正起作用,因为stdout实际上已记录到文件流中,因此,在PHP进程退出之前,nodejs无法读取文件。

  3. 监视nodejs中的文件夹,并让PHP创建包含要运行的命令的文本文件。这可能有用,但不是很优雅。

这个想法可以做到吗?

0 个答案:

没有答案