我正在尝试运行一个.sh文件从php。我尝试这样做与shell_exec()。但它不工作,我参考了许多问题,这在堆栈溢出,但无法解决
我的php代码是(web.php)
<?php
echo shell_exec('/var/www/project/xxe.sh');
echo "done";
?>
只打印已完成的。但它是从终端工作(php/var/www/project/web. php)
在www.example.com中xxe.sh我调用了一个python文件
python vin.py
我还将两个.sh n .py文件的文件权限更改为777,请帮助
8条答案
按热度按时间7tofc5zh1#
如果你说它可以在终端上工作,而不能在apache上工作,那么apache的
php.ini
文件可能禁用了shell_exec()
。请参见http://www.php.net/manual/en/ini.core.php#ini.disable-functions
apache的
php.ini
文件可能类似于从此列表中删除
shell_exec
并重新启动Web服务器,尽管这有安全风险,我不推荐这样做。j8yoct9x2#
shell_exec
可能不知道要在哪个目录中查找可执行文件的位置目录。在shell_exec之前,我解决了这个问题:然后终端可以找到可执行文件。还要检查命令每一部分的权限,以确保apache用户有读和执行权限。
zy1mlcev3#
如果它在shell中运行良好,我认为apache是chroot的,所以php找不到/var/...
或者httpd用户的用户没有权限输入/var/...
如果你擅长PHP,打开dir /var/...和readdir(),检查目录是否存在,文件是否存在。
此问题可能对您有所帮助。scanning /home/ with opendir()
vohkndzv4#
问题通常是当你在php中执行代码的时候,在很多linux发行版中它是以webservers用户www-data的身份运行的。通常这个用户没有设置一个环境,因此没有PATH。通过在你的文件中使用完整的路径,你通常可以克服这个问题。
xxe.sh
qncylg1j5#
试图运行由github接收后webhook触发的脚本时。
下面是我的项目目录所在的位置(克隆的git repo):
我在上面的目录中创建了一个名为webhook.php的脚本:
在/var/www/html中执行以下命令
转到http://www.myserver.com/my-repo/webhook.php进行测试
将脚本的路径添加到github webhook。
mspsb9vt6#
我在这个问题上纠缠了好几个小时。
我已经想到了一个解决方案。1.将你的脚本移动到一个python文件“script.py“中,并将这个文件放置在你的服务器根目录下。2. shell_exec(“python script.py”);
不管怎么说,这对我有用。
5gfr0r5j7#
在我的主机上,我不得不给予我的php文件一个不同的路径来执行shell_exec()。这不工作
shell_exec('/usr/bin/php backgroundtask.php');
。而这个做
shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');
。您可以访问this Reference.
gajydyqb8#
我有同样的问题,因为PHP反斜杠。
PHP转义反斜杠,因此到达shell的命令
所以我这样下命令
必须对反斜杠进行双转义:一次用于PHP,一次用于shell。