Dans mon application, je veux exécuter un Node.JS
fichier de PHP
qui à son tour fait un http request
vers un autre fichier PHP
.
En bref, c'est le processus que je fais.
fichier PHP ---> appelle -> fichier Nodejs ---> traite les données -> et fait une requête http à -> fichier PHP
Lorsque j'exécute le fichier nodejs
via un terminal, il envoie avec succès la demande http à un autre fichier PHP
et j'obtiens ce que je veux.
Mais, lorsque j'essaie d'exécuter le fichier nodejs
via PHP
, les fichiers nodejs ne parviennent pas à trouver certains modules.
Mon code dans PHP
:
$nodeJsPath = '/var/www/html/projectfolder/js/nodefunc.js';
$ret = exec("node ".$nodeJsPath.' 2>&1', $out, $err);
Voici l'erreur que j'obtiens:
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)
)
Je l'ai enfin compris. Il ignore simplement la variable NODE_PATH
Pour des raisons inconnues :(
Dans le fichier Nodejs
, je dois donner le chemin absolu du module comme ceci:
var request = require("/usr/lib/node_modules/request");
Votre objectif est d'exécuter une commande de nœud après avoir changé de répertoire. Ainsi, vous devrez exécuter plusieurs commandes séquentielles via la fonction PHP exec ().
Commandes:
cd /var/www/html/projectfolder/js
node nodefunc.js 2>&1
Ceci est possible en ajoutant && ou ; entre les commandes.
$ret = exec("cd /var/www/html/projectfolder/js; node nodefunc.js 2>&1", $out, $err);
npm install
)exec
dans le répertoire de travail actuel de l'application de noeud:exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err);