4

I have the following PHP code that is run when a user clicks a button on a local intranet page to run some Node JS commands. e.g.

exec('npm install', $output);
$output = implode(PHP_EOL, $output);
echo $output;

But the command doesn't seem to get run... It does if I type the command into the command prompt and run it...

I don't see any errors and NodeJS is set as a system variable in the Path so it should know what grunt is... Any ideas? Other commands, e.g. whoami run fine.

Any ideas?

I'm on Windows 7.


Update: Based on the comments below I can now get an error with:

exec('npm install 2>&1', $output, $returnCode);
$output = implode(PHP_EOL, $output);
echo $output . ' ' . $returnCode;

And this is the error:

TypeError: Cannot call method 'get' of undefined at C:\Program Files (x86)\nodejs\node_modules\npm\lib\npm.js:310:23 at C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\npmconf\npmconf.js:80:7 at Array.forEach (native) at C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\npmconf\npmconf.js:79:13 at f (C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\once\once.js:16:25) at C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\npmconf\npmconf.js:108:14 at Conf. (C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\npmconf\npmconf.js:179:14) at Conf.next (C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\npmconf\lib\load-prefix.js:48:20) at C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\mkdirp\index.js:37:53 at Object.oncomplete (fs.js:107:15) C:\Program Files (x86)\nodejs\node_modules\npm\lib\npm.js:33 throw new Error('npm.load() required') ^ Error: npm.load() required at Object.npm.config.get (C:\Program Files (x86)\nodejs\node_modules\npm\lib\npm.js:33:11) at exit (C:\Program Files (x86)\nodejs\node_modules\npm\lib\utils\error-handler.js:49:27) at process.errorHandler (C:\Program Files (x86)\nodejs\node_modules\npm\lib\utils\error-handler.js:316:3) at process.emit (events.js:95:17) at process._fatalException (node.js:272:26) 7

So it looks like the PHP knows where NodeJS and NPM is... but can't run it?


If I do whoami in the PHP I get: nt authority\iusr

But if I do it from the command prompt then I get: dom\cameron

I wonder if it's because PHP runs it as a different user to when I run it directly in the command prompt...


10
  • Does NodeJS run as the same user as PHP? e.g. www-data? Commented Apr 24, 2015 at 9:47
  • How do I find out? I'm sure they are though. Commented Apr 24, 2015 at 9:49
  • Isn't grunt watch a background task? Commented Apr 24, 2015 at 9:59
  • Doesn't matter. NPM install doesn't work either when ran from PHP. Commented Apr 24, 2015 at 10:03
  • What do you get in the $output variable? Commented Apr 24, 2015 at 10:34

3 Answers 3

1

Okay I've managed to fix this!

Basically you need to run the website (where the PHP file lives) as the same user as where NodeJS is run from!

To achieve this I did the following in IIS:

1.) Find the website
2.) Choose basic settings
3.) Click the connect as... button
4.) Choose 'specific user'
5.) Enter `dom/cameron` and my password
6.) Restart IIS

If anyone has any ideas for how to get NodeJS running for the default nt authority\iusr then feel free to post an answer :)

Sign up to request clarification or add additional context in comments.

Comments

0

You defined npm in WINDOWS path, but did PHP recognize it?

I suggest you should test it with writing the full NPM path in the exec. If it works, than you should call putenv() with correct parameters before executing npm install..

So first try:

exec('C:\npm-test\npm install', $output);
$output = implode(PHP_EOL, $output);
echo $output;

And if it works, use the putenv() command before calling exec(). Example:

putenv("npm='C:\npm-test\npm'");

//and then exec(...)

Comments

0

The error you're getting indicating that an object is not defined. It's quite possible that a module is simply not loading because you're not running the script from the correct location, and relative links to some include are not working. Running as the correct user might fix it. Or try changing to the correct directory before running the node script. Or change the location of the links inside the node script.

Comments

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.