从php Web应用程序执行节点脚本(Windows)

时间:2018-12-19 21:21:52

标签: php node.js laravel exec

我有一个php Web应用程序,在其中一种尝试执行节点脚本的方法上。

节点脚本位置:C:\Users\meusr\Workspace\www\myproject\directImport.js

我已经配置了package.json,以便npm start执行以上脚本。

php(laravel)应用程序的可执行index.php,位于:C:\Users\meusr\Workspace\www\myPHPproject\public\

在我的路线之一上:importer / run

我有:

$commandToRun = "npm start --prefix ". env('IMPORTER_PATH'). " /dev/null 2>&1";

在我的环境中IMPORTER_PATH配置为IMPORTER_PATH = C:\Users\meusr\Workspace\www\myproject\

当我尝试使用exec

执行命令时
exec($commandToRun, $output);

页面不断加载,没有输出,没有错误,没有结束。

该脚本没有问题,并且在Windows系统上的命令行上运行相同的命令有效

npm start --prefix C:\Users\meusr\Workspace\www\myproject\

预期的输出。

我认为这首先是权限问题(应该抛出错误,但是我仍然尝试并运行了另一个命令)

exec('npm -v', $output);

输出我的npm版本。

类似地,我尝试简单地使用node directImport.js也不起作用。

然后尝试将目录更改为节点文件所在的位置,然后再次运行命令。 exec(cd C:\Users\meusr\Workspace\www\myproject\ && dir /dev/null 2>&1) // this works, but:

exec(cd C:\Users\meusr\Workspace\www\myproject\ && node directImport.js /dev/null 2>&1) // this didn't work

1 个答案:

答案 0 :(得分:0)

感谢miken32,对我有用的是:

<?php 
$commandString = 'start /b c:\\programToRun.exe -attachment "c:\\temp\file1.txt"'; 
pclose(popen($commandString, 'r')); 
?>

http://php.net/manual/en/function.popen.php#92413