php网页加载时需要调用.sh

php网页加载时需要调用.sh

我在加载主页时尝试运行 .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只需能够读取脚本,然后执行数据即可。

相关内容