exec()通过命令行运行,但不通过网络运行

exec()通过命令行运行,但不通过网络运行

问题描述:

我有一个涉及exec()的PHP脚本,它可以在命令行中正常运行,但不能在web上下文中运行。该脚本很简单:exec()通过命令行运行,但不通过网络运行

<?php exec('echo "wee" > /home/jason/wee.txt'); 

如果我把这个脚本wee.php和运行php wee.php,它工作正常,并wee.txt被写入。

如果我去http://mysite.com/wee.php,脚本假装运行正常,但wee.txt实际上没有写入。

任何想法为什么会发生这种情况?

Web服务器以不同的用户身份运行,并且该用户没有写入主目录的权限。

+0

有什么办法可以使这项工作?像临时授权 – Thejas 2016-07-25 11:12:34

您的Web服务器可能(正确)没有适当的权限写入主目录。

注意到您正在写给/ home/jason。请注意,apache将是运行此命令的人(如果使用Ubunut或Debian,则为www-data用户)。该过程是否具有写入该文件夹的权限?

其他海报是正确的,建议网络服务器用户无权写入您的主目录。要查看它们是否正确,请尝试修改代码以写入/tmp/wee.txt。这应该是世界可写的。

另一种可能性是,PHP可以配置为禁用调用exec()。请参阅http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

+0

如果禁用,那么应该通过php抛出一个错误呢? – ajreal 2010-12-10 17:20:05