从 PHP 运行 node.js 脚本时无法访问文件

问题描述

我将我的 PHP 脚本设置为使用 exec 运行我的节点脚本

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

但是,我的节点脚本无法创建日志文件输出错误

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

我认为这是因为 PHP 脚本没有足够的权限以 root 身份运行节点脚本。

我尝试将脚本和文件夹权限更改为 777,但问题仍然存在。

如何让我的 PHP 脚本以完全访问权限运行我的节点脚本?

这是我的脚本的输出

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' }

解决方法

除非您安装了只读路径或使用了 acls,否则 chmod 应该足以使其工作。

那么,你确定路径扩展吗? 您可以这样做以查看命令正在使用的当前工作目录

echo shell_exec("pwd");

因此扩展

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

另外,您确定正在运行的用户吗?

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

因为提供访问权限的一种方法是执行 chmod 777。另一种方法是将文件夹 chown 到运行 php 的文件夹中。 chown www-data 也应该工作