PHP exec()功能异常
我试图在PHP中执行PHP exec()功能异常,php,apache,unix,shell-exec,Php,Apache,Unix,Shell Exec,我试图在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中运行,也按预期运行(发送电
/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::TLS
以及LWP::Simple
。你知道哪里出了问题吗?感谢评论告诉我实际检查错误日志
脚本是可执行的(chmod755
),但层次结构中的目录是rwxr-x---
;将此目录更新为rwxr-xr-x
修复了该问题。exec()
'd脚本路径上的每个目录都必须能够被httpd
读取
问题已解决。您的脚本是否设置为由apache用户执行?是的,它是
chmod 755
;我还认为,sudo-u apache/path/to/script.pl
会再次检查这一点——有错吗?奇怪。。。尝试将此文件传送给apache用户。。。我使用popen和pclose命令,效果很好。您是否尝试检查php日志中的错误?记得激活php错误日志。我在脚本的开头设置了错误报告(E\u ALL)
,然后。。。Apache日志显示“sh:/path/to/script.pl:Permission denied.”即使用户已交换。请尝试使用chown Apache:Apache和chmod+x来创建文件。让我知道它是否有效。在apache配置中,您可以设置httpd将代表哪个用户/组执行。