一尘不染

从PHP运行Python脚本

python

我正在尝试使用以下命令从PHP运行Python脚本:

exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');

但是,PHP根本不会产生任何输出。错误报告设置为E_ALL,并且display_errors打开。

这是我尝试过的:

  • 我使用python2,/usr/bin/python2python2.7不是/usr/bin/python2.7
  • 我还使用了相对路径而不是绝对路径,该绝对路径也没有任何改变。
  • 我试着使用的命令exec,shell_exec,system

但是,如果我跑步

if (exec('echo TEST') == 'TEST')
{
    echo 'exec works!';
}

它shutdown now什么都没做,但工作得很好。

PHP有权访问和执行文件。

编辑:感谢亚历杭德罗,我能够解决此问题。如果你遇到相同的问题,请不要忘记你的网络服务器可能/希望不是以root用户身份运行。尝试以你的Web服务器用户或具有类似权限的用户身份登录,然后尝试自己运行命令。


阅读 397

收藏
2020-02-12

共1个答案

一尘不染

在Ubuntu Server 10.04上测试。希望它对Arch Linux也有帮助。

在PHP中使用shell_exec函数:

通过shell执行命令并以字符串形式返回完整的输出。

它从执行的命令返回输出,如果发生错误或命令不产生任何输出,则返回NULL。

<?php 

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

?>

在Python文件中test.py,在第一行中验证以下文本:(请参见shebang解释):

!/usr/bin/env python

另外,Python文件必须具有正确的特权(如果PHP脚本在浏览器或curl中运行,则对用户www-data / apache的执行)和/或必须是“可执行的”。此外,所有进入.py文件的命令都必须具有正确的特权:

采取从PHP手册:

对于那些试图在unix类型的平台上使用shell_exec并且似乎无法使其正常工作的人,请快速提醒一下。PHP以系统上的Web用户身份执行(对于Apache,通常为www),因此你需要确保Web用户对你在shell_exec命令中尝试使用的任何文件或目录具有权限。否则,它似乎不会做任何事情。

为了使在UNIX型平台上的可执行文件:

chmod +x myscript.py
2020-02-12