问题描述
我将我的 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 也应该工作