我想用PHP执行linux命令
myfile.php:
<?php
$output = shell_exec('ls');
echo "<pre>$output</pre>";
?>
有效!
但是当我将linux命令从ls
更改为reboot
时,没有任何反应!
所以我试图找到另一个解决方案:
mycode.html:
<button type="button" onclick="/var/www/myscript.sh">Click Me!</button>
myscript.sh:
sudo reboot
它也不起作用!
愿任何人帮我解决这个问题。
感谢您的帮助。
答案 0 :(得分:6)
默认情况下,必须以root身份执行reboot命令。如果您的Web服务器在root帐户下运行,您就可以这样做,但这是非常不寻常的主张。
通常,Web服务器在有限的帐户下运行,这不能做太多,当然也不能执行重启。如果确实想要这样做,那么必须非常小心。提供此功能的标准方法是创建特殊的包装器(最有可能是suid),它在允许在提升的权限下运行之前检查许多条件。
另一个解决方案是让PHP创建标志文件或插入特殊数据库条目,这将由另一个以root身份运行的服务进行检查,注意到该标志并最终执行reboot。
答案 1 :(得分:5)
正如@mvp所说,你不能以非root用户身份执行reboot。
执行此操作的一种简单方法是使用cron作业。
你的myscript.sh将是:
#!/bin/bash
touch /tmp/reboot.now
然后创建一个cron作业,检查该文件是否存在:
#!/bin/bash
if [ -f /tmp/reboot.now ]; then
rm -f /tmp/reboot.now
/sbin/shutdown -r now
fi
然后将服务器配置为每分钟执行此脚本
* * * * * /usr/local/sbin/reboot.sh
当然,别忘了给文件赋予执行权限。
希望有所帮助
已编辑:当然,您的myscript.sh
可以是带有fopen
和fclose
的php而不是
答案 2 :(得分:2)
除了Sal00m的回答
ROOT crontab
* * * * * /usr/local/sbin/checkreboot.sh
checkreboot.sh
#!/bin/bash
if [ -f /var/www/html/reboot.server ]; then
rm -f /var/www/html/reboot.server
/sbin/shutdown -r now
fi
reboot.php
<?php
$filehandler = fopen("/var/www/html/reboot.server",'w');
fwrite($filehandler,"Reboot now\n");
fclose($filehandler);
?>