php呼叫shell的方法

2021-08-01 10:27:50 字數 2296 閱讀 7050

php提供4種方法執行系統外部命令:exec()、passthru()、system()、 shell_exec()。

方法一:exec()

exec 執行系統外部命令時不會輸出結果,而是返回結果的最後一行,如果你想得到結果你可以使用第二個引數,讓其輸出到指定的陣列,此陣列乙個記錄代表輸出的一行,即如果輸出結果有20行,則這個陣列就有20條記錄,所以如果你需要反覆輸出呼叫不同系統外部命令的結果,你最好在輸出每一條系統外部命令結果時清空這個陣列,以防混亂。第三個引數用來取得命令執行的狀態碼,通常執行成功都是返回0。

方法二:passthru()

passthru與system的區別,passthru直接將結果輸出到瀏覽器,不需要使用 echo 或 return 來檢視結果,不返回任何值,且其可以輸出二進位制,比如影象資料。

方法三:system()

system和exec的區別在於system在執行系統外部命令時,直接將結果輸出到瀏覽器,不需要使用 echo 或 return 來檢視結果,如果執行命令成功則返回true,否則返回false。第二個引數與exec第三個引數含義一樣。

方法四:反撇號`和shell_exec()

shell_exec() 函式實際上僅是反撇號 (`) 操作符的變體。

檢視php.ini中配置是否開啟安全模式,主要是以下三個地方

safe_mode =  (這個如果為off下面兩個就不用管了)

disable_functions =

safe_mode_exec_dir=

二、使用

由於php基本是用於web程式開發的,所以安全性成了人們考慮的乙個重要方面。於是php的設計者們給php加了乙個門:安全模式。如果執行在安全模式下,那麼php指令碼中將受到如下四個方面的限制:

① 執行外部命令

② 在開啟檔案時有些限制

③ 連線mysql資料庫

④ 基於http的認證

在安全模式下,只有在特定目錄中的外部程式才可以被執行,對其它程式的呼叫將被拒絕。這個目錄可以在php.ini檔案中用 safe_mode_exec_dir指令,或在編譯php是加上--with-exec-dir選項來指定,預設是/usr/local/php /bin。

如果你呼叫乙個應該可以輸出結果的外部命令(意思是php指令碼沒有錯誤),得到的卻是一片空白,那麼很可能你的網管已經把php執行在安全模式下了。

三、如何做?

在php中呼叫外部命令,可以用如下三種方法來實現:

1) 用php提供的專門函式

php提供共了3個專門的執行外部命令的函式:system(),exec(),passthru()。

system()

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

system()函式很其它語言中的差不多,它執行給定的命令,輸出和返回結果。第二個引數是可選的,用來得到命令執行後的狀態碼。

例子:複製** **如下:

system("/usr/local/bin/webalizer/webalizer");

exec()

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

exec() 函式與system()類似,也執行給定的命令,但不輸出結果,而是返回結果的最後一行。雖然它只返回命令結果的最後一行,但用第二個引數array可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在呼叫之前最好用unset()

最它清掉。只有指定了第二個引數時,才可以用第三個引數,用來取得命令執行的狀態碼。

例子:複製** **如下:

exec("/bin/ls -l");

exec("/bin/ls -l", $res);

#$res是乙個資料,每個元素代表結果的一行

exec("/bin/ls -l", $res, $rc);

#$rc的值是命令/bin/ls -l的狀態碼。成功的情況下通常是0

passthru()

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

passthru() 只呼叫命令,不返回任何結果,但把命令的執行結果原樣地直接輸出到標準輸出裝置上。所以passthru()函式經常用來呼叫象pbmplus(unix 下的乙個處理的工具,輸出二進位制的原始的流)這樣的程式。同樣它也可以得到命令執行的狀態碼。

例子:複製** **如下:

header("content-type: image/gif");

passthru("./ppmtogif hunte.ppm");

js呼叫php和php呼叫js的方法

一 js呼叫php的值 a.html b.php action get action 輸出一句js語句,生成乙個js變數,並賦顛值為php變數 action的值 echo var jstext action echo var jstext aa echo var jstext 1 小結 在html裡...

python 呼叫shell命令的方法

在python程式中呼叫shell命令,是件很酷且常用的事情 1.os.system command 此函式會啟動子程序,在子程序中執行command,並返回command命令執行完畢後的退出狀態,如果command有執行內容,會在標準輸出顯示。這實際上是使用c標準庫函式system 實現的。缺點 ...

ruby呼叫linux的shell方法

碰到需要呼叫作業系統shell命令的時候,ruby為我們提供了六種完成任務的方法 1.exec方法 kernel exec方法通過呼叫指定的命令取代當前程序 例子 irb exec echo hello hostname hello nate.local 值得注意的是,exec方法用echo命令來取...