24

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:

$nodeJsPath = '/var/www/html/projectfolder/js/nodefunc.js';

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

This is the error that I am getting:

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
  • 2
    May I know why the downvote and whats wrong with this question? Commented Sep 15, 2016 at 9:00
  • Does it work when running the command from CLI ? Commented Sep 15, 2016 at 9:48
  • 1
    Yeah it does run properly when executed from the terminal Commented Sep 15, 2016 at 9:49

3 Answers 3

11

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");
Sign up to request clarification or add additional context in comments.

1 Comment

guess it's worth mentioning the solution was proposed by @krampstudio :)
9

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.

Commands:

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

Comments

6
  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);

7 Comments

hi..it may sound a bit naive but i am not well versed with nodejs, where should I exactly execute npm install because I can see those installed modules folder in this path /usr/lib/node_modules
I am still getting the same error even after changing the directory in the exec command
you need to run npm install into the folder that contains your node project (the project with your package.json file)
Mine actually is not a node project, its a codeigniter project comepletely in PHP, with with just one js file which has nodejs code since I can achieve one particular functionality only by using nodejs
I think the issue is because your dependencies are installed globally instead of locally, because I don't think php's exec knows the environment variable NODE_PATH
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.