【问题标题】:Executing node script from php web application (Windows)从 php Web 应用程序(Windows)执行节点脚本
【发布时间】: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

标签: php node.js laravel exec


【解决方案1】:

感谢 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2014-07-20
    • 2019-06-25
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多