使用 exec() 在 PHP 中执行 nodejs 脚本文件

新手上路,请多包涵

在我的应用程序中,我想从 PHP 执行一个 Node.JS 文件,该文件又向另一个 PHP 文件发出 HTTP 请求。

简而言之,这就是我正在做的过程。

PHP文件—>调用–>Nodejs文件—>处理数据–>并发出http请求–>PHP文件

当我通过终端运行 nodejs 文件时,它成功地向另一个 PHP 文件发出了 http 请求,我得到了我想要的。

但是,当我尝试通过 PHP 运行 nodejs 文件时,nodejs 文件无法找到某些模块。

我的 PHP 代码:

 $nodeJsPath = '/var/www/html/projectfolder/js/nodefunc.js';

$ret = exec("node ".$nodeJsPath.' 2>&1', $out, $err);

这是我得到的错误:

 Array
(
    [0] => module.js:457
    [1] =>     throw err;
    [2] =>     ^
    [3] =>
    [4] => Error: Cannot find module 'some_module'
    [5] =>     at Function.Module._resolveFilename (module.js:455:15)
    [6] =>     at Function.Module._load (module.js:403:25)
    [7] =>     at Module.require (module.js:483:17)
    [8] =>     at require (internal/module.js:20:19)
    [9] =>     at Object.<anonymous> (/var/www/html/projectfolder/js/nodefunc.js:5:9)
    [10] =>     at Module._compile (module.js:556:32)
    [11] =>     at Object.Module._extensions..js (module.js:565:10)
    [12] =>     at Module.load (module.js:473:32)
    [13] =>     at tryModuleLoad (module.js:432:12)
    [14] =>     at Function.Module._load (module.js:424:3)
)

原文由 Abhinav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

我终于明白了。它只是忽略了 NODE_PATH 未知原因的变量:(

在 Nodejs 文件中,我必须像这样给出模块的绝对路径:

 var request = require("/usr/lib/node_modules/request");

原文由 Abhinav 发布,翻译遵循 CC BY-SA 4.0 许可协议

您的目标是在更改目录后执行节点命令。因此,您将需要通过 PHP exec() 函数运行多个顺序命令。

命令:

  1. cd /var/www/html/projectfolder/js
  2. node nodefunc.js 2>&1

这可以通过添加 &&; 来实现。在命令之间。

 $ret = exec("cd /var/www/html/projectfolder/js; node nodefunc.js 2>&1", $out, $err);

原文由 Haresh Vidja 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题