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.
2. $results = shell_exec('wc -w *.txt');
3. echo $results;
4. ?>
注意,僅使用後撇號操作符也會得到相同的結果,如下所示。
清單3.僅使用後撇號操作符
1.
2. $results = `wc -w *.txt`;
3. echo $results;
4. ?>
清單4.更加簡單的方法
1.
2. echo `wc -w *.txt`;
3. ?>
通過 UNIX 命令行和shell腳本能夠完成很多東西,知道這點很重要。例如,您可以使用豎線將命令連接起來。您甚至可以使用操作符在其中創建shell腳本,並且僅 調用shell腳本(根據需要使用或不使用參數)。例如,如果您僅希望計算該目錄下的前5個文本文件的單詞數,那麼可以使用豎線(|)將wc和head命 令連接起來。另外,您還可以將輸出結果放到pre標記內部,讓它能夠更美觀地呈現在Web瀏覽器中,如下所示。
清單5.更加複雜的shell命令
1. <?php
2. $results = shell_exec('wc -w *.txt | head -5');
3. echo "<pre>".$results . "</pre>";
4. ?>
在本文的後面部分,您將學習如何使用PHP為這些腳本傳遞參數。現在您可以將它看作運行shell命令的一種方法,但要記住您只能看到標準輸出。如果命令或腳本出現錯誤,您將看不到標準的錯誤(stderr),除非您通過豎線將它添加到stdout。