【发布时间】:2012-05-27 12:54:13
【问题描述】:
我正在尝试使用 exec() 和 shell_exec 在 php 中执行多个命令,但我得到一个空值,这是我不应该的,并且没有任何事情发生(如果我在命令行中复制并粘贴下面的字符串它可以正常工作并完成所需的工作)这是我正在使用的命令:
$command = "cd /../Desktop/FolderName;";
$command .= 'export PATH=$PATH:`pwd`;';
$command .= 'Here i execute a compiler;';
然后我使用 escapeshellcmd()
$escaped_command = escapeshellcmd($command);
然后
shell_exec($escaped_command);
任何想法我做错了什么,我也尝试了 escapeshellarg() 而不是 escapeshellcmd()?
解决方案:问题是执行编译器对其他所有者的权限是非的,这就是问题所在。
因为当您在 php 中使用 exec() 函数时,文件的所有者将是 www-data,因此您需要从 ubuntu 的 ACL 或任何基于 linux 的操作系统授予 www-data 的权限(您可以知道所有者通过这样做exec('whoami')),或通过您需要执行的文件。
【问题讨论】:
-
你真的是指
/../Desktop/FolderName吗?因为那和/Desktop/FolderName一样,可能不是你想要的。 -
它与 /Desktop/FolderName 相同,这是我想要的,但这不会影响任何事情,因为它仍在将目录更改为我需要的文件夹
-
我总是使用完整的路径,而不是相对路径。
-
为什么要转义命令?不是执行命令的重点吗?转义会阻止执行。
-
我试过没有转义,但仍然出现同样的问题
标签: php shell cmd exec shell-exec