Executing nodejs script file in PHP using exec()

In my Application, I want to execute a Node.JS file from PHP which in turn makes an HTTP request to another PHP file.

In short this is the Process that I am doing.

PHP file—>calls–> Nodejs file—>processes data –>and makes http request to–>PHP File

When I run the nodejs file via terminal, it successfully makes the http request to another PHP file and I get what I want.

But, when I try to run the nodejs file through PHP, the nodejs files is not able to find some modules.

My code in PHP:


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

This is the error that I am getting:

    [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)

I got it finally. It’s just ignoring the NODE_PATH variable for reasons unknown 🙁

In the Nodejs File I had to give the absolute path of the module like this:

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

Your goal is to execute a node command after changing directory. Thus, you will need to run multiple sequential commands via the PHP exec() function.


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

This is possible by adding && or ; in between the commands.

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

  1. check whether the modules are installed (npm install)
  2. run the execin the node application current working directory:
exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err);

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .
Read More:   Can I do dispatch from getters in Vuex

Similar Posts