John
John

Reputation: 6278

Unable to access file when running node.js script from PHP

I set my PHP script to run my node script using exec

exec("node ../server/server-manager/server-manager.js &");

However, my node script is not able to create a log file and outputs this error.

{ Error: EACCES: permission denied, open '../../logs/server-manager/server-manager.06-20-2021 11-01-59 PM.log'

I assume its because the PHP script doesn't have sufficient permission to run the node script as root.

I tried changing the script and folder permissions to 777, but the issue remains.

How can I make my PHP script run my node script with full access?

Here is the output of my script:

Current directory:  /var/www/image-game/top/server/server-manager

{ Error: EACCES: permission denied, open '../../logs/server-manager/server-manager.06-21-2021 00-53-22 AM.log'
    at Object.openSync (fs.js:443:3)
    at Object.writeFileSync (fs.js:1194:35)
    at Object.appendFileSync (fs.js:1240:6)
    at Console.console.log (/var/www/image-game/top/server/console.to.file.js:21:6)
    at Object. (/var/www/image-game/top/server/server-manager/server-manager.js:71:9)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
 path:'../../logs/server-manager/server-manager.06-21-2021 00-53-22 AM.log' }

Upvotes: 1

Views: 626

Answers (1)

Raphael PICCOLO
Raphael PICCOLO

Reputation: 2175

unless you have mounted a readonly path or using acls, or other esoteric settings chmod should be enough to make it work.

Then, are you sure about the path expansion ? you can do this to see the current working directory the command is using

echo shell_exec("pwd");

hence the expension

echo shell_exec("realpath ../../logs");

Also, are you sure about the running user ?

echo shell_exec("id"); // may show www-data

because one way to give acces is to do chmod 777. another way is to chown the folder to the one php is run with. chown www-data should work too

Upvotes: 1

Related Questions