我在加载主页时尝试运行 .sh 脚本:
索引.php:
<?php
shell_exec('./alert.sh');
?>
<script type='text/javascript'>
window.location = "phpshell.php";
</script>
我的脚本alert.sh:
#! /bin/sh
echo Login: >> log.txt
date >> log.txt
mpg123 alert.mp3
从 nautilus 手动启动时可以正常工作,但通过 web 服务器连接时没有任何反应。我使用的是 Ubuntu 11.10 和 Apache2。
Web 服务器的默认文件夹是 /var/www
答案1
shellscript 的位置很重要,您使用的路径也很重要。即使alert.sh
位于/var/www
,当前工作目录也可能不同。使用echo getcwd();
获取当前工作目录。使用绝对路径,您可以使用:
shell_exec('/var/www/alert.sh');
第二种可能性(最有可能)是文件模式(文件权限)不足。Apache Web 服务器以用户身份运行www-data
。如果alert.sh
归您所有,属于您的组,并且只有所有者才具有执行权限,则 Apache 服务器无法执行它。可能的权限(实践最小特权规则)包括:
- 755 - 所有者:您 - 群组:您
- 750 - 所有者:您 - 群组:www-data
- 644 或 640 - 所有者:您 - 组:您或 www-data
最后一个选项仅在您执行类似 的脚本时才有效shell_exec('/bin/sh alert.sh')
。shell 程序/bin/sh
只需能够读取脚本,然后执行数据即可。