由於Web Server以及PHP的實現方式所限,我們在現實環境中很難利用PHP去調用一些Linux中需要root權限才能執行的程序,對此,我從網上找到另外一種方式來繞開這個限制。首先先寫個c程序中轉調用系統命令,然後用PHP去執行此c程序。
c程序
首先寫個c文件,比如/usr/local/ismole/w.c
- //note 由於wordpress編輯器的原因,請將此代碼中頭文件多余的空格去除
- #include < stdio.h>
- #include < stdlib.h>
- #include < systypes.h>
- #include < unistd.h>
- int main()
- {
- uid_t uid ,euid;
- //note 獲得當前的uid
- uid = getuid();
- //note 獲得當前euid
- euid = geteuid();
- //note 交換這兩個id
- if(setreuid(euid, uid))
- perror("setreuid");
- //note 執行將要執行linux系統命令
- system("/usr/bin/w");
- return 0;
- }
//note 由於wordpress編輯器的原因,請將此代碼中頭文件多余的空格去除
編譯該文件gcc -o ipt -Wall w.c,這時會在當前目錄下生成程序w。
改變此程序的屬主chmod u+s ./w。
PHP執行
文件內容如下,放在web目錄下,訪問就會輸出當前的服務器負載情況。
- < ?php
- //note key的驗證過程
- if($key != $authkey) {
- // exit(key error);
- }
- $last_line = exec(/usr/local/ismole/w, $retval);
- $returnArray = explode("load average: ", $retval[0]);
- $returnString = $returnArray[1];
- echo $returnString;
按照上面的實例,我們可以用PHP來做任何我們想執行的Linux系統命令,SVN更新,服務器監控,備份,恢復,日常維護等等。比如《利用SVN搭建測試服務器》