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