用php执行shell命令
我试图用用php执行shell命令,php,bash,shell,Php,Bash,Shell,我试图用php/html按钮执行bash脚本来唤醒我的nas <form action="" method="POST"> <input type="submit" value="Wake NAS" name="zero" /> </form> <?php if (isset($_POST["zero"])){ #echo "Hello World!"; shell_exec("/var/www/html/wakenas.sh
php/html
按钮执行bash脚本来唤醒我的nas
<form action="" method="POST">
<input type="submit" value="Wake NAS" name="zero" />
</form>
<?php
if (isset($_POST["zero"])){
#echo "Hello World!";
shell_exec("/var/www/html/wakenas.sh &");
}?>
wakenas.sh
拥有所有权利
也许你们知道为什么它不会被执行
提前感谢您的倾诉:
etherwake: This program must be run as root.
当您执行wakenas.sh时,您可能正在以root用户身份执行它。这就是它起作用的原因
向运行php服务器的用户授予sudo权限(无密码)
并将wakenas.sh更改为:
#!/bin/bash
sudo etherwake -D "BC:5F:F4:09:E1:07"
echo "why!?!?!" > "/var/www/html/works.txt"
exit 1
我最近发布了一个项目,该项目允许PHP获取一个真正的Bash shell并与之交互(如果请求,则作为root),它解决了exec()和shell_exec()的限制。在这里获取: 下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd("etherwake -D \"BC:5F:F4:09:E1:07\"");
//the return will be a string containing the return of the command
echo $return1;
执行脚本的简单而安全的方法是放入sudoers。假设您的Linux发行版是Debian base,运行web服务器的用户是
www data
,那么您可以创建一个文件,例如/etc/sudoers.d/wakeup\u ether
Cmnd_Alias WAKE_UP_CMD = /var/www/html/wakenas.sh
www-data ALL=NOPASSWD: WAKE_UP_CMD
修改脚本以在命令前面加上sudo
shell_exec("sudo /var/www/html/wakenas.sh &");
参考资料:如何在shell上执行它<代码>shell wakenas.sh?你能把
ls-l/path/to/wakenas.sh
的输出与sh/path/to/wakenas.sh
ls-l wakenas.sh:-rwxrwx 1 www-data www-data 126 Jun 4 12:47 wakenas.sh
你的脚本在我看来是正确的,试着var\u转储(shell\u exec(“/var/www/html/wakenas.sh&”)
要查看它是否返回NULL
(),并检查您的/var/www/html/works.txt
文件内容最后一件事,ls-l/var/www/html/works.txt
根据您的用例,我猜您可能是通过apache这样的web服务器访问php?apache用户(通常是nobody
、www-data
或apache2
)是否有权执行wakenas.sh
?请注意,如果有任何对该页面的公共访问,则不应授予您的web服务器的shell访问/执行权限。
shell_exec("sudo /var/www/html/wakenas.sh &");