我正在尝试从 PHP 页面执行 node.js 命令,该命令在通过 SSH 从 linux 终端运行时成功执行,但我无法让它在没有错误的情况下从 PHP 页面运行。
该环境是一个 Apache CentOS VPS 托管帐户。
我对 PHP 比 node.js 更熟悉。node.js 应用程序将一些带有时间表的压缩文本文件从 URL 下载并包含时间表信息,并将它们转换为 HTML,然后将这些 HTML 文件复制到服务器上根目录下的指定目录中。下载时间表的 URL 的位置位于同步加载的 config.json 文件中。尝试从 PHP 页面运行它时,我使用此函数在测试时显示输出:
function liveExecuteCommand($cmd) {
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen("$cmd 2>&1 ; echo Exit status : $?", 'r');
$live_output = ""; $complete_output = "";
while (!feof($proc)) {
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "$live_output<br />";
@ flush();
}
pclose($proc);
// get exit status
preg_match('/[0-9]+$/', $complete_output, $matches);
// return exit status and intended output
return array (
'exit_status' => intval($matches[0]),
'output' => str_replace("Exit status : " . $matches[0], '', $complete_output)
);
}
然后,要在 PHP 页面上查看结果,我使用以下命令:
$result = liveExecuteCommand($command);
if($result['exit_status'] === 0){
echo "the command succeeded";
} else {
echo "the command did not succeed";
}
此函数有效并允许我查看输出,该输出始终包含从页面运行时的 javascript 语法错误通知,但不包含从命令行运行的通知。我似乎无法让 node.js 应用程序在没有来自 PHP 页面的语法错误的情况下运行。我尝试了几件事:
1.仅从 PHP 页面运行 node 命令,此 node.js 应用程序将接受该命令以及“config”文件参数,该参数指定一个配置文件,该文件下载要转换为 HTML 的数据(异步)
$command = 'export PATH=$PATH:~/bin; the-node-command --configPath ~/public_html/website.com/gtfs-to-html-configs/config.json';
3.我也尝试过这些先前问题Here和Here 中的建议,它们不会产生任何语法错误但会静默失败(node.js 程序未运行且未创建 HTML 表)。
我还确认运行 PHP 脚本的用户和 node.js 命令是相同的(或者至少尝试使用 PHP 的
get_current_user();
理想情况下,我只想从 PHP 页面运行 node.js 应用程序,而不必等待输出并将 HTML 时间表插入到目录中以备将来使用。PHP 页面甚至不使用时间表。直接从命令行运行 node.js 应用程序时,这一切都是可能的,但不能从 PHP 页面运行。
慕姐8265434
人到中年有点甜
噜噜哒