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

时间:2016-09-15 07:48:49

标签: javascript php node.js node-modules

在我的应用程序中,我想从Node.JS执行PHP文件,该文件又会http request到另一个PHP文件。

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

PHP文件--->调用 - > Nodejs文件--->处理数据 - >并将http请求发送到 - > PHP文件

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

但是,当我尝试通过nodejs运行PHP文件时,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)
)

3 个答案:

答案 0 :(得分:4)

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

Nodejs文件中,我要提供模块的绝对路径:

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

答案 1 :(得分:2)

  1. 检查模块是否已安装(npm install
  2. 在节点应用程序当前工作目录中运行exec
  3. exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err);
    

答案 2 :(得分:1)

你必须在更改目录后执行node命令,你必须在一个命令中执行两件事

1.change目录cd /var/www/html/projectfolder/js

2.然后执行node nodefunc.js 2>&1

使用&amp;&amp;要么 ;用于在一行中执行多个命令,如下所述

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