私のアプリケーションでは、Node.JS
PHP
からのファイルはhttp request
を別のPHP
ファイルに。
要するに、これは私がしているプロセスです。
PHPファイル---> calls-> Nodejsファイル--->データを処理->そしてhttpリクエストを行う-> PHPファイル
ターミナルを介してnodejs
ファイルを実行すると、別のPHP
ファイルへのhttp要求が正常に行われ、必要なものが取得されます。
しかし、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)
)
やっと手に入れた。不明な理由により、NODE_PATH
変数を無視しているだけです:(
Nodejs
ファイルで、次のようにモジュールの絶対パスを指定する必要がありました。
var request = require("/usr/lib/node_modules/request");
あなたの目標は、ディレクトリを変更した後にノードコマンドを実行することです。したがって、PHP exec()関数を使用して複数の順次コマンドを実行する必要があります。
コマンド:
cd /var/www/html/projectfolder/js
node nodefunc.js 2>&1
これは、コマンドの間に&&または;を追加することで可能です。
$ret = exec("cd /var/www/html/projectfolder/js; node nodefunc.js 2>&1", $out, $err);
npm install
)exec
を実行します。exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err);