php shell_exec()命令不起作用

时间:2013-11-21 14:58:53

标签: php shell python-2.7

我正在尝试从php运行.sh文件。 我尝试用shell_exec()来做。但它不起作用 我在堆栈溢出中提到了许多与此相关的问题,但无法解决

我的php代码是(web.php)

    <?php
    echo shell_exec('/var/www/project/xxe.sh');
    echo "done";
    ?>

仅打印完成。但它正在终端(php /var/www/project/web.php)

在xxe.sh中我正在调用python文件

    python vin.py

我还将.sh n .py文件的文件权限更改为777 请帮忙

8 个答案:

答案 0 :(得分:5)

如果你说它适用于终端而不是apache,那么apache的php.ini文件可能会禁用shell_exec()

请参阅http://www.php.net/manual/en/ini.core.php#ini.disable-functions

您的apache的php.ini文件可能类似于

disable_functions=exec,passthru,shell_exec,system,proc_open,popen

从此列表中删除shell_exec并重新启动Web服务器,但这存在安全风险,我不建议这样做。

答案 1 :(得分:3)

如果它在shell中运行良好,我认为apache是​​chroot。所以php无法找到/ var /...

或者httpd用户的用户无权输入/ var /...

如果你擅长PHP。打开dir / var / ...并且readdir()并检查dir是否存在并且检查文件是否存在。

这个问题可能会对你有所帮助。 scanning /home/ with opendir()

答案 2 :(得分:2)

尝试运行由github post-receive webhook触发的脚本。

这是我的项目目录所在的位置(克隆git repo):

/var/www/html/my-repo

我在上面的目录中创建了一个名为webhook.php的脚本:

<?php
#webhook.php

$cmd = shell_exec("git pull 2>&1");

#for debugging
echo $cmd;
?>

在/ var / www / html

中执行以下命令
sudo chown www-data:www-data -R my-repo/

转到http://www.myserver.com/my-repo/webhook.php

进行测试

将脚本的路径添加到github webhooks。

答案 3 :(得分:1)

问题通常是当你从php中执行代码时,它作为很多linux发行版中的webservers用户www-data运行。 Normaly此用户没有设置环境,因此没有PATH。通过在文件中使用完整路径,您通常可以克服这一点。

xxe.sh

/usr/bin/python /path/to/script/vin.py

答案 4 :(得分:1)

我已经陷入这个问题几个小时了。

我考虑过一个解决方案。 1.将您的脚本移动到python文件“script.py”并将此文件放入您的服务器根目录。 2. shell_exec(“python script.py”);

无论如何,它对我有用。

答案 5 :(得分:0)

在我的主机上,我必须为从shell_exec()执行的php文件提供不同的路径。 这不起作用shell_exec('/usr/bin/php backgroundtask.php');

虽然这样做shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');

您可以访问this Reference.

答案 6 :(得分:0)

由于PHP反斜杠,我遇到了同样的问题。

PHP转义了反斜杠,因此到达外壳的命令

Select ArrivalMonth
     , count(Number_Of_Bookings)
     , count(DateOfBirth)
 FROM [View1]
WHERE [ArrivalMonth] between '2017-01-01' and '2018-05-01'
group by ArrivalMonth

所以我发出了这样的命令

'COPY E:path1\path2\file.prn /B \127.0.0.1\"PRINTER NAME"'

您必须两次转义反斜杠:一次用于PHP,一次用于shell。

答案 7 :(得分:0)

我在这里尝试了所有方法,但没有任何效果。 最终为我解决的问题是在shell_exec之前使用以下命令:

putenv('PATH=/usr/local/bin');