PHP 調用系統外部命令 system() exec() passthru() 和 popen()

來源:互聯網
上載者:User
文章目錄
  • 一 用PHP提供的專門函數,簡單執行命令
  • 二 用popen()函數開啟進程,實現命令互動
  •  三 樣本
一 用PHP提供的專門函數,簡單執行命令原型:

string system (string command [, int return_var]);
string exec(string command [, array $output [, int $return_var]]);
void passthru (string command [, int return_var]);
不同點:

system() 輸出並返回最後一行shell結果。
exec() 不輸出結果,返回最後一行shell結果,所有結果可以儲存到一個返回的數組裡面。
passthru() 只調用命令,把命令的運行結果原樣地直接輸出到標準輸出裝置上。

相同點:

都可以獲得命令執行的狀態代碼

前提條件:

由於PHP基本是用於WEB程式開發的,所以安全性成了人們考慮的一個重要方面。於是PHP的設計者們給PHP加了一個門:安全模式。如果運行在安全模式下,那麼PHP指令碼中將受到如下四個方面的限制:
1) 執行外部命令
2) 在開啟檔案時有些限制
3) 串連MySQL資料庫
4) 基於HTTP的認證
在 安全模式下,只有在特定目錄中的外部程式才可以被執行,對其它程式的調用將被拒絕。這個目錄可以在php.ini檔案中用 safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項來指定,預設是 /usr/local/php/bin。
   在/etc/php.ini檔案中
   把safe_mode_exec_dir=
   改為
   safe_mode_exec_dir =  "/wwwroot/blog/protected/commands/shell"

二 用popen()函數開啟進程,實現命令互動

   如在增加Linux的系統使用者時,要調用su來把目前使用者換到root才行,而su命令必須要在命令列上輸入root的密碼。如下(root密碼是root):
  

<?php   $sucmd = "su --login root --command";   $useraddcmd = "useradd ";   $rootpasswd = "root";   $user = "wzhwho";   $useraddcmd = sprintf("%s "%s %s"",$sucmd,$useraddcmd,$user);   $fp = @popen($useraddcmd,"w");   @fputs($fp,$rootpasswd);   @pclose($fp);   ?>
 三 樣本    C程式
 #include <stdio.h> #include <stdlib.h>int main(int argc, char* argv[]){   int a = 0;   int r =0;    if(argc != 2)    {        printf("usage: %s &r\n", argv[0]);        exit(-1);    }   a = atoi(argv[1]);   r = a*a;   printf("Ok:r = %d\n",r);   return r;}    
php程式
 <html><body><h1>Call External Program</h1>   <?php    $p=3;    $ret = -1;    $r =-1;    echo "=====system========";    echo "<br />";    $r=system("whoami",$ret);    echo "<br />";    echo "r is $r,ret is $ret";    echo "<br />";    echo "=====exec========";    $r=exec("whoami",$ret);    echo "<br />";    echo "r is $r,ret is $ret";    echo "<br />";    echo "=======passthru======";    echo "<br />";    passthru("whoami", $ret);    echo "<br />";    echo "r is $r,ret is $ret"; ?> </body></html>
   輸出結果:

=====system========

apache
r is apache,ret is 0
=====exec========
r is apache,ret is Array
=======passthru======
apache
r is apache,ret is 0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.