【问题标题】:PHP exec() functioning strangelyPHP exec() 功能异常
【发布时间】:2013-06-14 02:44:54
【问题描述】:

我正在尝试在 PHP 中执行 /path/to/script.pl;除其他外,该脚本在执行完毕后会发送一封电子邮件。当我尝试时

exec( "/path/to/script.pl" );

什么都没有发生。其他一些相关数据点:

print exec( "whoami" );
/path/to/script.pl
sudo -u apache /path/to/script.pl

第一个,在 PHP 中运行,打印 apache;第二个,在 shell 中运行,按预期运行(发送电子邮件);第三个,在shell中运行,也按预期运行(发送邮件)。

由此看来,exec 对于某些命令运行良好,并且该脚本运行良好,并且适用于 httpd 用户 (apache)。该脚本本身没有文件 I/O,但它确实访问 MySQL 数据库并使用Net::SMTP::TLSLWP::Simple。有什么想法可能会出错吗?

【问题讨论】:

  • 你的脚本设置为由 apache 用户执行吗?
  • 是的,它是chmod 755;我还认为sudo -u apache /path/to/script.pl 会仔细检查 --- 错了吗?
  • Weird... 尝试将此文件 chown 给 apache 用户... 我使用 popen 和 pclose 命令,它工作正常。您是否尝试过检查您的 php 日志是否有错误?记得激活php错误日志。
  • 我在脚本的开头设置了error_reporting( E_ALL ) 并且... Apache 日志显示“sh: /path/to/script.pl: Permission denied”。即使交换了用户。
  • 尝试使用 chown apache:apache 和 chmod +x 来归档。让我知道它是否有效。在您的 apache 配置中,您可以设置 httpd 将代表哪个用户/组执行。

标签: php apache unix shell-exec


【解决方案1】:

感谢 cmets 的 Walter 告诉我实际检查错误日志。

脚本是可执行的 (chmod 755) 但层次结构中的目录是 rwxr-x---;将此目录更新为rwxr-xr-x 解决了这个问题。 exec()'d 脚本路径上的每个目录都必须由httpd 读取。

问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多