web-dev-qa-db-ja.com

exec()を使用してPHPでnodejsスクリプトファイルを実行する

私のアプリケーションでは、Node.JSPHPからのファイルは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)
)
12
Abhinav

やっと手に入れた。不明な理由により、NODE_PATH変数を無視しているだけです:(

Nodejsファイルで、次のようにモジュールの絶対パスを指定する必要がありました。

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

あなたの目標は、ディレクトリを変更した後にノードコマンドを実行することです。したがって、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);
3
Haresh Vidja
  1. モジュールがインストールされているかどうかを確認します(npm install
  2. ノードアプリケーションの現在の作業ディレクトリでexecを実行します。
exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err);
2
krampstudio