php shell_exec()命令不起作用


php shell_exec() command is not working

我正在尝试从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

我还将两个.shn.py文件的文件权限都更改为777请帮助

如果您说它在终端上工作,而在apache上不工作,那么apache的php.ini文件可能会禁用shell_exec()的使用。

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

您的apache的php.ini文件可能看起来像

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

从该列表中删除shell_exec并重新启动web服务器,尽管这是一个安全风险,我不建议这样做。

shell_exec可能不知道要在哪个目录中查找可执行文件的位置目录。在shell_exec:之前,我解决了这个问题

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

然后终端可以找到可执行文件。还要检查命令每个部分的权限,以确保apache用户具有读取和执行权限。

如果它在shell中运行良好,我认为apache是chrooted。所以php找不到/var/。。。

或者httpd用户的用户没有权限输入/var/。。。

如果你擅长PHP。打开目录/var/。。。readdir()和check dir存在,check file存在。

这个问题可能会对你有所帮助。扫描/home/使用opendir()

问题通常是,当您从php中执行代码时,它在许多linux发行版中作为Web服务器的用户www数据运行。正常情况下,这个用户没有设置环境,因此没有PATH。通过在文件中使用完整路径,您通常可以克服这一问题。

xxe.sh

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

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

以下是我的项目目录所在的位置(克隆的git-reo):

/var/www/html/my-repo

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

<?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-webhook。

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

我想了一个解决办法。1.将脚本移到python文件"script.py"中,并将该文件放在服务器根目录下。2.shell_exec("python script.py");

不管怎样,它对我来说都有效。

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

shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');

您可以访问此参考资料。

我遇到了同样的问题,因为PHP反斜杠。

PHP转义反斜杠,因此到达shell 的命令

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

所以我发出了类似的命令

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

您必须对反斜杠进行双转义:一次用于PHP,一次用于shell。