我正在尝试使用以下命令从PHP运行Python脚本:
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
但是,PHP根本不会产生任何输出。错误报告设置为E_ALL,并且display_errors打开。
E_ALL
display_errors
这是我尝试过的:
python2,/usr/bin/python2
python2.7
/usr/bin/python2.7
exec,shell_exec,system
但是,如果我跑步
if (exec('echo TEST') == 'TEST') { echo 'exec works!'; }
它shutdown now什么都没做,但工作得很好。
PHP有权访问和执行文件。
编辑:感谢亚历杭德罗,我能够解决此问题。如果你遇到相同的问题,请不要忘记你的网络服务器可能/希望不是以root用户身份运行。尝试以你的Web服务器用户或具有类似权限的用户身份登录,然后尝试自己运行命令。
在Ubuntu Server 10.04上测试。希望它对Arch Linux也有帮助。
在PHP中使用shell_exec函数:
shell_exec
通过shell执行命令并以字符串形式返回完整的输出。
它从执行的命令返回输出,如果发生错误或命令不产生任何输出,则返回NULL。
<?php $command = escapeshellcmd('/usr/custom/test.py'); $output = shell_exec($command); echo $output; ?>
在Python文件中test.py,在第一行中验证以下文本:(请参见shebang解释):
test.py
另外,Python文件必须具有正确的特权(如果PHP脚本在浏览器或curl中运行,则对用户www-data / apache的执行)和/或必须是“可执行的”。此外,所有进入.py文件的命令都必须具有正确的特权:
www-data / apache
采取从PHP手册:
对于那些试图在unix类型的平台上使用shell_exec并且似乎无法使其正常工作的人,请快速提醒一下。PHP以系统上的Web用户身份执行(对于Apache,通常为www),因此你需要确保Web用户对你在shell_exec命令中尝试使用的任何文件或目录具有权限。否则,它似乎不会做任何事情。
unix
Apache
为了使在UNIX型平台上的可执行文件:
chmod +x myscript.py