2011年12月6日 星期二

PHP - 執行外部linux指令


PHP經過長時間的發展,很多用戶都很了解PHP了,這裡我發表一下個人理解,和大家討論討論PHP命令行。 PHP Command Line Interface (CLI) Server Application Programming Interface (SAPI)在PHP V4.2.0開始發布,用於試驗目的。到V4.3.0時,已經受到完整支持並且默認啟用。

PHP CLI SAPI允許您開發PHP支持的shell腳本,甚至是基於桌面的腳本。事實上,可以用PHP命令行運行的工具。採用這種方式,PHP開發人員可以像 Perl、AWK、Ruby 或shell程序員一樣高效。本文探究構建到PHP中的工具,讓您了解PHP運行的底層shell環境和文件系統。 PHP為執行外部命令提供大量函數,其中包括shell_exec()、exec()、passthru()和system()。這些命令是相似的,但為 您運行的外部程序提供不同的界面。所有這些命令都衍生一個子進程,用於運行您指定的命令或腳本,並且每個子進程會在命令輸出寫到標準輸出(stdout)時捕捉它們。
1.           shell_exec()
shell_exec()命令行實際上僅是反撇號(`)操作符的變體。如果您編寫過shell或Perl腳本,您就知道可以在反撇號操作符內部捕捉其他命令的輸出。例如,清單1顯示瞭如何使用反撇號在當前目錄中獲取每個文本(.txt)的單詞計數。
PHP命令行概述
清單1.使用反撇號計算單詞數量
1.           #! /bin/sh
2.           number_of_words=`wc -w *.txt`
3.           echo $number_of_words
4.
5.           #result would be something like:
6.           #165 readme.txt 388 results.txt 588 summary.txt
7.           #and so on....
在您的PHP腳本中,您可以在shell_exec()中運行這個簡單的命令,如清單2所示,並獲取想要的結果。這裡假設在同一個目錄下有一些文本文件。
清單2.在shell_exec()中運行相同的命令
1.           <strong><?php</strong>
span style="color: #cc66cc;">2.           $results = shell_exec('wc -w *.txt')
span style="color: #cc66cc;">3.           echo $results
span style="color: #cc66cc;">4.           <strong>?></strong>
注意,僅使用後撇號操作符也會得到相同的結果,如下所示。
清單3.僅使用後撇號操作符
1.           <strong><?php</strong>
span style="color: #cc66cc;">2.           $results = `wc -w *.txt`
span style="color: #cc66cc;">3.           echo $results
span style="color: #cc66cc;">4.           <strong>?></strong>
清單4.更加簡單的方法
1.           <strong><?php</strong>
span style="color: #cc66cc;">2.           echo `wc -w *.txt`
span style="color: #cc66cc;">3.           <strong>?></strong>
通過 UNIX 命令行和shell腳本能夠完成很多東西,知道這點很重要。例如,您可以使用豎線將命令連接起來。您甚至可以使用操作符在其中創建shell腳本,並且僅 調用shell腳本(根據需要使用或不使用參數)。例如,如果您僅希望計算該目錄下的前5個文本文件的單詞數,那麼可以使用豎線(|)將wc和head命 令連接起來。另外,您還可以將輸出結果放到pre標記內部,讓它能夠更美觀地呈現在Web瀏覽器中,如下所示。
清單5.更加複雜的shell命令
1.           <strong><?php</strong>
2.           $results = shell_exec('wc -w *.txt | head -5');
3.           echo "<strong><pre></strong>".$results . "<strong></pre></strong>";
4.           <strong>?></strong>
在本文的後面部分,您將學習如何使用PHP為這些腳本傳遞參數。現在您可以將它看作運行shell命令的一種方法,但要記住您只能看到標準輸出。如果命令或腳本出現錯誤,您將看不到標準的錯誤(stderr),除非您通過豎線將它添加到stdout。

沒有留言: