use*_*038 17 php shell python-2.7
我试图从PHP运行.sh文件.我尝试用shell_exec()来做.但它不起作用我在堆栈溢出中提到了许多与此相关的问题,但无法解决
我的PHP代码是(web.php)
<?php
echo shell_exec('/var/www/project/xxe.sh');
echo "done";
?>
Run Code Online (Sandbox Code Playgroud)
只打印完成.但它是从终端工作(php /var/www/project/web.php)
在xxe.sh中我调用了一个python文件
python vin.py
Run Code Online (Sandbox Code Playgroud)
我也将.sh n .py文件的文件权限更改为777,请帮忙
小智 7
shell_exec
可能不知道在哪个目录中查找可执行文件的位置目录。为我解决的问题是在 shell_exec 之前:
putenv('PATH=/usr/local/bin');
Run Code Online (Sandbox Code Playgroud)
然后终端就可以找到可执行文件。还要检查命令每个部分的权限,以确保 apache 用户具有读取和执行权限。
问题通常是,当您从 php 中执行代码时,它会作为许多 Linux 发行版中的网络服务器用户 www-data 运行。通常该用户没有设置环境,因此没有 PATH。通过在文件中使用完整路径,通常可以克服这个问题。
xxe.sh
/usr/bin/python /path/to/script/vin.py
Run Code Online (Sandbox Code Playgroud)
如果它在 shell 中运行良好,我认为 apache 已经被 chroot 了。所以php找不到/var/...
或者httpd用户的用户没有权限进入/var/...
如果你擅长 PHP。打开 dir /var/... 并 readdir() 并检查目录是否存在并检查文件是否存在。
这个问题可能对你有帮助。使用 opendir() 扫描 /home/
如果您说它在终端上有效,而不在apache上有效,则apache的php.ini
文件可能会禁用shell_exec()
。
参见http://www.php.net/manual/zh/ini.core.php#ini.disable-functions
您的apache php.ini
文件可能看起来像
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
Run Code Online (Sandbox Code Playgroud)
shell_exec
从此列表中删除并重新启动Web服务器,尽管这存在安全隐患,我不建议这样做。