PHP 怎麼這麼紅
最近PHP(Personal Hypertext Preprocessor) 似乎已經成了這一兩年來Linux/Unix 上最廣為大家所使用的網頁處理語言﹐它的方便、強大功能與OpenSource 的特性使得它正逐漸侵蝕到傳統CGI 甚至是MicroSoft ASP(Active Server Page)的市場﹐幾乎各大網站徵招人才莫不以會PHP 作為基本條件。
PHP 確實有這個資格可以這麼紅﹐原因有下面數點:
PHP 是OpenSource 軟體﹐完全免費﹐可以自由散佈﹐因此吸引了極多的人來使用﹐也因為如此﹐吸引到了商業本公司為其發展更好的引擎與優化軟體(請參考http://www.zend.com/)。
PHP 本身非常簡單易懂﹐淺顯的指令語法﹐外加一些基本的物件導向處理能力﹐讓新手足以在最短時間內學會。
PHP 提供了相當多的功能﹐包含了數學處理、字串處理、網路相關功能、各種資料庫的支援、影像處理功能、有為數眾多的發展者正為PHP 發展各式各樣的新功能﹐擴充性極佳。
PHP 非常容易與 Apache 結合﹐作為 Apache 的模組來使用﹐設定安裝上相當簡單﹐也因為 Apache 目前已經佔據了 Web Server 全球 60% 的市場﹐PHP 自然而然成為 Apache 最佳搭配。
不過﹐這次要講的主題不是PHP 在網頁設計上的應用﹐而是PHP 在Shell Script 上的應用﹐一般所知的Shell Script 大約就是tcsh、bash、perl 或python 這類語言﹐我所要談的就是將PHP 當成Shell Script 來使用。
PHP 執行檔的安裝
一般PHP 作為網頁處理語言都是要編譯成Apache 的模組﹐這裡當然不麼做﹐也因此編譯起來很簡單﹐只要以root 的身份進行如下動作:
解開php-3.0.xx.tar.gz
cd php
configure
make
編譯後﹐將在php 目錄下有一個可執行檔﹐名稱為它。到/usr/local/bin 下即可。注意﹐如果檔案太大﹐可以使用 strip 指令將 php 的方式將不必要的資訊移除﹐這樣檔案就會小得多了。
第一個程式
開始寫我們的第一個PHP Shell Script 程式﹐這個範例印出"Hello world !" :
#!/usr/local/bin/php -q
echo "Hello, world !";
?>
注意到PHP 原本是應用在網頁應用的﹐因此它內定會用HTHTML 的HEADER﹐但是在此送出我們是要將PHP 用作Shell Script﹐"-q" 就是表示不要送HEADER 的意思﹐你可以試試看看不加上-q 的顯示結果。
在這個例子中﹐/usr/local/bin/php 是表示要執行 /usr/local/bin/ 下的 PHP﹐因為我們剛才將它裝在該處。 echo 指令將 "Hello, world !" 印出﹐其中的 "" 字元是換行字元。
注意到在將這個程式存成檔案後﹐須將其 chmod 成為可執行屬性(chmod x 檔案名稱)﹐然後才能執行喔。
進階使用I
有時候我們需要在程式執行時﹐送進一些參數﹐比如說ls 這個指令﹐後面可以加上-l 參數﹐PHP Shell Script 一樣也有支援這樣的用法﹐有兩用個特殊的變數: $argc 記錄著後面送入參數的個數﹐$argv[] 陣列參數存的則是參數的內容。例如我現在要設計一個算兩個數字總和的程式:
#!/usr/local/bin/php -q
$sum=0;
$sum=$ sum $argv[1] $argv[2];
echo $sum;
?>
假設將此程式命名為sum.php3﹐則執行sum.php3 1 2 按下enter 則會印出3。
如果要算出不特定個數的參數和﹐那麼就得要用到$argc 這個特殊變數了:
#!/usr/local/bin/php -q
$sum=0;
for ($t=1;$t $sum=$sum $argv[$t];
echo $sum
; ?>
假設將此程式命名為bigsum.php3﹐則執行bigsum.php3 1 2 3 4 5 按enter 則會印出15﹐執行bigsum.php3 1 2 3 4 5 6 按下enter 則會印出21。
有時候我們需要在程式執行中輸入資料﹐但是PHP 原本就是用於網頁設計﹐而網頁上的資料輸入自然都是用FORM 的方式來輸入﹐所以這將PHP 作為Shell Script 時問題就來了﹐好在PHP 有提供了開檔功能﹐而在Linux/Uinx 之下﹐輸入(input)這件事原本就可以用開檔的方式來完成﹐我們要開啟的是/dev/stdin 這個設備檔(stdin 是表示standard input 的意思)﹐程式如下:
#!/usr/local/bin/php -q
$fp=fopen("/dev/stdin","r ");
$inputstr=fgets($fp,100);
fclose($fp);
echo "n--------------- -------n";
echo $inputstr;
?>
其中的fgets($fp,100) 是指從$fp 這個檔案(也就是"/dev/stdin" )中讀取出100 個byte 的資料﹐程式執行到這行便會停下來等待我們的輸入﹐當我們輸入完按下enter 之後﹐程式就會將剛才我們輸入的資料給印出來了。
進階使用II
雖然已經可以處理輸入﹐但是這樣的功能顯然還是太簡單﹐無法應付更大的應用﹐比如說我需要一個功能是將一串資料流(data stream)中的HTML 給予去除﹐這時需要完整處理輸出輸入轉向的能力﹐我們可以先設計程序如下:
#!/usr/local/bin/php -q
$fp= fopen("/dev/stdin","r");
while(!feof($fp)) {
$c=fgetc($fp);
$inputstr=$inputstr .$c;
};
fclose($fp);
echo $inputstr;
?>
more filt.php3 | filt.php3
這樣的做法是將filt.php3 這個程式用more 給秀出並轉向給filt.php3 這個程式﹐filt.php3 會不斷接受資料(事實上就是filt.php3 程式碼本身)﹐最後將其印出。
我們可以在其中加上過濾HTML 的功能:
#!/usr/local/bin/php -q
$fp=fopen("/dev/stdin"," r");
while(!feof($fp)) {
$c=fgetc($fp);
$inputstr=$inputstr.$c;
; 🎜>
fclose($fp);
$inputstr=ereg_replace("]*)>","",$inputstr);
?>
假設將此程式命名為filt2.php3﹐如此一來便完成了過濾功能﹐不信請拿個HTML 檔來試試看:
more xxx.html | filt2.php3
你便會看到刪除了HTML TAG 的檔案了。
結論
PHP 拿來當Shell Script 事實上相當地好用﹐原因是PHP 本身很好學﹐而且它又支持了各種數據庫﹐當你已經經常拿PHP 來設計你的網站之後﹐絕對不太喜歡再使用其它的Shell Script 語言來處理其它必須非網頁的部份﹐這時候拿PHP 來當做Shell Script 的好處就會顯現出來了﹐你可以以一貫的方式來發展整個系統﹐而不必一下要用PHP一下再用Perl/Python 或是C。
國內的PHP 風氣已經相當興盛﹐本站LinuxFab 便是完全以PHP 搭配MySQL 發展起來的﹐事實上PHP 的妙用還有很多歡迎﹐有機會日後再介紹﹐如果讀者們需要PHP 的相關信息﹐歡迎到本站上的PHP 論壇參與更多討論。 (出處:Viphot)
http://www.bkjia.com/PHPjc/314161.html