首页 > 解决方案 > 从 php Web 应用程序(Windows)执行节点脚本

问题描述

我有一个 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

标签: phpnode.jslaravelexec

解决方案


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


推荐阅读