国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP中system,exec,passthru函數(shù)用法

2024-09-04 11:48:16
字體:
供稿:網(wǎng)友

本文章來給各位同學(xué)介紹關(guān)于在php中system,exec,passthru函數(shù)的一些使用方法,各位同學(xué)不防進(jìn)入?yún)⒖?

php提供了system(),exec(),passthru()這幾個函數(shù)來調(diào)用外部的命令.

他們的區(qū)別:

system() 輸出并返回最后一行shell結(jié)果,exec()不輸出結(jié)果,返回最后一行shell結(jié)果,所有結(jié)果可以保存到一個返回的數(shù)組里面.passthru()只調(diào)用命令,把命令的運(yùn)行結(jié)果原樣地直接輸出到標(biāo)準(zhǔn)輸出設(shè)備上.

相同點(diǎn):都可以獲得命令執(zhí)行的狀態(tài)碼

  1. ?ystem()、exec()、shell_exec() 官方文件?明如下:  
  2. system — Execute an external program and display the output 
  3. string system ( string $command [, int &$return_var ] ) 
  4. exec — Execute an external program 
  5. string exec ( string $command [, array &$output [, int &$return_var ]] ) 
  6. shell_exec — Execute command via shell and return the complete output as a string 
  7. string shell_exec ( string $cmd ) 
  8. ystem()、exec()、shell_exec() 官方文件說明如下: 
  9. system — Execute an external program and display the output 
  10. string system ( string $command [, int &$return_var ] ) 
  11. exec — Execute an external program 
  12. string exec ( string $command [, array &$output [, int &$return_var ]] ) 
  13. shell_exec — Execute command via shell and return the complete output as a string 
  14. string shell_exec ( string $cmd ) 

一般系統(tǒng)會有兩種輸出,一種是系統(tǒng)狀態(tài)(return code),一種是輸出文字(output string),這三個 Function 主要就是這些回傳的差異.

system()

$last_line = system('ls', $return_var);

system() 會將輸出內(nèi)容直接印出,所以若於網(wǎng)頁,會將所有回傳內(nèi)容都顯示於頁面上.

$last_line: 只能取得最后一行的內(nèi)容

$return_var: 取得系統(tǒng)狀態(tài)回傳碼

exec()

exec('ls', $output, $return_var);

$output: 回傳內(nèi)容都會存於此變數(shù)中(儲存成陣列), 不會直接秀在頁面上.

$return_var: 取得系統(tǒng)狀態(tài)回傳碼

shell_exec()

$output = shell_exec('ls');

$output: 回傳內(nèi)容都會存於此變數(shù)中(儲存成純文字內(nèi)容),不會直接秀在頁面上在PHP中調(diào)用外部命令,可以用如下三種方法來實現(xiàn):

1)用PHP提供的專門函數(shù)

PHP提供共了3個專門的執(zhí)行外部命令的函數(shù):system(),exec(),passthru().

system()

原型:string system (string command [, int return_var])

system()函數(shù)很其它語言中的差不多,它執(zhí)行給定的命令,輸出和返回結(jié)果.第二個參數(shù)是可選的,用來得到命令執(zhí)行后的狀態(tài)碼.

返回結(jié)果

        成功返回0,  
        失敗(命令不存在等原因)   返回   非0值

例子:system("/usr/local/bin/webalizer/webalizer");

exec()

原型:string exec (string command [, string array [, int return_var]])

exec()函數(shù)與system()類似,也執(zhí)行給定的命令,但不輸出結(jié)果,而是返回結(jié)果的最后一行.雖然它只返回命令結(jié)果的最后一行,但用第二個參數(shù)array 可以得到完整的結(jié)果,方法是把結(jié)果逐行追加到array的結(jié)尾處.所以如果array不是空的,在調(diào)用之前最好用unset()最它清掉.只有指定了第二 個參數(shù)時,才可以用第三個參數(shù),用來取得命令執(zhí)行的狀態(tài)碼.

實例代碼如下:

  1. exec("/bin/ls -l"); 
  2. exec("/bin/ls -l"$res); 
  3. exec("/bin/ls -l"$res$rc); 
  4. passthru() 

原型:void passthru (string command [, int return_var])

passthru()只調(diào)用命令,不返回任何結(jié)果,但把命令的運(yùn)行結(jié)果原樣地直接輸出到標(biāo)準(zhǔn)輸出設(shè)備上.所以passthru()函數(shù)經(jīng)常用來調(diào)用象pbmplus(Unix下的一個處理圖片的工具,輸出二進(jìn)制的原始圖片的流)這樣的程序.同樣它也可以得到命令執(zhí)行的狀態(tài)碼.

例子:

  1. header("Content-type: image/gif"); 
  2. passthru("./ppmtogif hunte.ppm"); 

2)用popen()函數(shù)打開進(jìn)程

上面的方法只能簡單地執(zhí)行命令,卻不能與命令交互.但有些時候必須向命令輸入一些東西,如在增加Linux的系統(tǒng)用戶時,要調(diào)用su來把當(dāng)前用戶換到 root才行,而su命令必須要在命令行上輸入root的密碼.這種情況下,用上面提到的方法顯然是不行的.

popen ()函數(shù)打開一個進(jìn)程管道來執(zhí)行給定的命令,返回一個文件句柄.既然返回的是一個文件句柄,那么就可以對它讀和寫了.在PHP3中,對這種句柄只能做單一的操作模式,要么寫,要么讀;從PHP4開始,可以同時讀和寫了.除非這個句柄是以一種模式(讀或?qū)懀┐蜷_的,否則必須調(diào)用pclose()函數(shù)來關(guān)閉它.

例子1:

  1. $fp=popen("/bin/ls -l""r"); 

例子2:

/* PHP中如何增加一個系統(tǒng)用戶
下面是一段例程,增加一個名字為james的用戶,
root密碼是 verygood。僅供參考

實例代碼如下:

  1. */ 
  2. $sucommand = "su --login root --command"
  3. $useradd = "useradd "
  4. $rootpasswd = "verygood"
  5. $user = "james"
  6. $user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user); 
  7. $fp = @popen($user_add,"w"); 
  8. @fputs($fp,$rootpasswd); 
  9. @pclose($fp); 
  10. ?> 

3)用反撇號(`,也就是鍵盤上ESC鍵下面的那個,和~在同一個上面)

這個方法以前沒有歸入PHP的文檔,是作為一個秘技存在的.方法很簡單,用兩個反撇號把要執(zhí)行的命令括起來作為一個表達(dá)式,這個表達(dá)式的值就是命令執(zhí)行的結(jié)果.如:

  1. $res='/bin/ls -l'
  2. echo ' 
  3. '.$res.' 
  4. '; 

這個腳本的輸出就象:

  1. hunte.gif 
  2. hunte.ppm 
  3. jpg.htm 
  4. jpg.jpg 
  5. passthru.php 

范例程式

由此范例執(zhí)行一次就比較容易理解. (請建立一個目錄,隨便放兩個檔案,再將此程式放置執(zhí)行)

實例代碼如下:

  1. echo "nsystem"
  2. $last_line = system('ls'$return_var); 
  3. echo "nreturn_var:"
  4. print_r($return_var); 
  5. echo "nlast_line:"
  6. print_r($last_line); 
  7. echo "nnexec"
  8. exec('ls'$output$return_var); 
  9. echo "nreturn_var:"
  10. print_r($return_var); 
  11. echo "noutput:"
  12. print_r($output); 
  13. echo "nnshell_exec"
  14. $output = shell_exec('ls'); 
  15. echo "noutput:"
  16. print_r($output); 
  17. ?> 
  18. */ 
  19.  
  20. ?> 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蕲春县| 和硕县| 德令哈市| 安达市| 定兴县| 称多县| 沙洋县| 昌都县| 资阳市| 贵德县| 微山县| 革吉县| 新竹县| 探索| 永昌县| 宕昌县| 临夏市| 修武县| 上犹县| 松阳县| 铅山县| 广宁县| 左云县| 宁明县| 涟水县| 百色市| 商河县| 武城县| 上饶县| 怀化市| 凤山市| 吉木萨尔县| 呼和浩特市| 石楼县| 海淀区| 普定县| 江源县| 利津县| 兴业县| 通海县| 大关县|