【发布时间】:2018-12-19 21:21:51
【问题描述】:
我有一个 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\
在我的一条路线上:进口商/运行
我有:
$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
【问题讨论】:
-
使用
npm的完整路径 -
@miken32 已经尝试过了,但是由于 npm 或 node 工作,这不意味着它不是由于路径?
-
是的,你是对的。不过,
npm脚本中的某些内容仍然可能是缺失的路径; I had this problem 并最终能够通过我的网络服务器设置 PATH 来修复它。 -
如果你不能改变你的服务器环境,你可以使用
proc_open来运行一个外部进程并传递环境变量。有关示例,请参阅 this answer。