我有嘗試像system(reboot)
exec(reboot)
和system("/ect/init.d/networking restart");
一些命令,但沒有發生什麼可以用PHP重啓linux服務器或重啓dhcp嗎?
我該怎麼辦?
我有嘗試像system(reboot)
exec(reboot)
和system("/ect/init.d/networking restart");
一些命令,但沒有發生什麼可以用PHP重啓linux服務器或重啓dhcp嗎?
我該怎麼辦?
你有你的Apache用戶添加到與NOPASSWD sudoers文件,並只給訪問即重新啓動,然後運行系統(「命令重啓」);
對於sudoersfile:
www-data reboot = NOPASSWD: /sbin/reboot
這將使Apache訪問重新啓動服務器,但rememer該系統上的所有用戶,然後就可以重新啓動。
試試這個:
<?php
shell_exec("/usr/sbin/reboot");
exec("/usr/sbin/reboot");
system("/usr/sbin/reboot");
?>
詳情請看:
如果你想通過PHP的Apache和CGI版本要做到這一點 - 那麼答案沒有」。 PHP將以與apache相同的用戶身份執行,並且允許此用戶訪問您的系統將是非常危險的。
也許你的PHP解釋器沒有運行具有合適的權限來做到這一點的用戶。通常這些都需要以root身份完成,這對於PHP來說是一個壞主意,因爲一個小的安全漏洞可能會讓整個機器受到威脅。
如果你真的想要做到這一點,我會建議看看使用sudo授予有限的額外訪問權限的網絡服務器運行的用戶。
另一替代須藤在某些系統是DBUS。使用正確的dbus權限,您可以發送指令以重新啓動例如
dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
從命令行工作,我相信有dbus綁定可用於PHP。
爲everyboy說,這是相當危險的。最好使用一些ssh會話來重啓/重啓你的服務器/服務。
在這種情況下你還是想這樣做,給你運行apache用戶(www)的sudo的權利。
在RHEL我不得不評論這需要在sudoers的配置文件中的tty行:
#Defaults requiretty
是不是在/ sbin目錄重新正常啓動? – Flexo 2010-10-29 11:54:41
@awoodland你是對的,已更改 – infinity 2010-10-29 11:57:22
在我的測試系統上至少是/ sbin/reboot,而不是/ usr/sbin/reboot。 FHS(http://www.pathname.com/fhs/pub/fhs-2.3.html#SBINSYSTEMBINARIES)意味着這也是正確的地方。 – Flexo 2010-10-29 12:02:07