【问题标题】:php command line exec() multiple execution and directories?php 命令行 exec() 多个执行和目录?
【发布时间】: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


【解决方案1】:

(对不起我的英语不好) 在 Linux 上,您可以在 Shell 脚本中添加命令。

你可以把它放在任何文件中:

#!/bin/bash
cd /../Desktop/FolderName
export PATH=$PATH:`pwd`
EXECUTE COMPILER

并将其另存为 fille.sh

然后,添加执行权限: chmod +x path/to/file.sh

在 PHP 中,您可以调用此脚本执行: shell_exec('sh path/to/file.sh');

希望这会有所帮助!

【讨论】:

  • 它仍然无法正常工作,我应该从某个地方启用 shell_exec() 功能吗??
  • 您是否尝试过在 PHP 脚本之外执行 Shell 脚本 rfom?
  • 是的,它工作正常。我正在研究,我发现有些人在谈论启用和禁用 exec() 函数。如果安全模式已打开但我的 php.ini 中的安全模式已关闭。它仍然无法正常工作
  • 告诉我 PHP 是否显示警告或错误。如果没有,请查看 PHP 错误日志。
  • 您的方式工作得很好,但问题不同。无论如何谢谢你的帮助
猜你喜欢
  • 2023-01-13
  • 2013-09-07
  • 2012-08-18
  • 2017-05-06
  • 2013-07-28
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多