我正在尝试从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 请帮忙
答案 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');