我正在研究一种运行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?
我的理论是:
在PHP使用命令发布到的节点脚本上创建类似于Web休息的调用。但这似乎是一种非常绕行的方式,而且不安全。
在stdout中使用特殊消息。因此,PHP脚本将具有echo "~runscript script2.php~
。但这不会真正起作用,因为stdout实际上已记录到文件流中,因此,在PHP进程退出之前,nodejs无法读取文件。
监视nodejs中的文件夹,并让PHP创建包含要运行的命令的文本文件。这可能有用,但不是很优雅。
这个想法可以做到吗?