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

首頁 > 系統 > Linux > 正文

PHP也可以當成Shell Script使用

2024-08-27 23:57:47
字體:
來源:轉載
供稿:網友

PHP 執行檔的安裝

一般 PHP 作為網頁處理語言都是要編譯成 Apache 的模塊﹐這里當然不么做﹐也因此編譯起來很簡單﹐只要以 root 的身分進行如下動作 :

解開 php-3.0.xx.tar.gz

cd php

configure

make

編譯完之后,在 php 目錄下有一個可執行檔,檔名為 php,將它 copy 到 /usr/local/bin 下即可,注意,如果檔案太大,可以使用 strip 指令將 php 的方式將不必要的信息去除,這樣檔案就會小得多了。

第一個程序

開始撰寫我們的第一個 PHP Shell Script 程序﹐這個例子印出 "Hello world !":

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. echo "Hello, world !"
  4. ?> 

注意到 PHP 原本是應用在網頁應用的,因此它內定會送出 HTML 的 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[] 數組參數存著的則是參數的內容,比如說我現在要設計一個算兩個數字總和的程序:

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. $sum=0; 
  4. $sum=$sum+$argv[1]+$argv[2]; 
  5. echo $sum
  6. ?> 

假設將此程序命名為 sum.php3,則執行 sum.php3 1 2 按下 enter 則會印出 3。

如果要算出不特定個數的參數和,那么就得要用到 $argc 這個特殊變量了:

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. $sum=0; 
  4. for ($t=1;$t<=$argc;$t++) 
  5. $sum=$sum+$argv[$t]; 
  6. echo $sum
  7. ?> 

假設將此程序命名為 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 的意思),程序如下:

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. $fp=fopen("/dev/stdin","r"); 
  4. $inputstr=fgets($fp,100); 
  5. fclose($fp); 
  6. echo "n----------------------n"
  7. echo $inputstr
  8. ?> 

其中的 fgets($fp,100) 是指從 $fp 這個檔案(也就是 "/dev/stdin")中讀取出 100 個 byte 的資料,程序執行到這行便會停下來等待我們的輸入,當我們輸入完按下 enter 之后,程序就會將剛才我們輸入的資料給印出來了。

進階使用 II

雖然已經可以處理輸入,但是這樣的功能顯然還是太簡單,無法應付更大的應用,比如說我需要一個功能是將一串資料流(data stream)中的 HTML 給去除,這時便需要完整地處理輸出輸入轉向的能力,我們可以先設計程序如下:

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. $fp=fopen("/dev/stdin","r"); 
  4. while(!feof($fp)) { 
  5. $c=fgetc($fp); 
  6. $inputstr=$inputstr.$c
  7. }; 
  8. fclose($fp); 
  9. echo $inputstr
  10. ?> 

假設將此程序命名為 filt.php3,如果你直接執行這個程序,它會一直等待你輸入,直到你按下 Ctrl+D 后才會將你的輸入資料給印出,我們可以這么執行它:

more filt.php3 | filt.php3

這樣的做法是將 filt.php3 這個程序用 more 給秀出并轉向給 filt.php3 這個程序,filt.php3 會不斷接受資料(事實上就是 filt.php3 程序代碼本身),最后將其印出。

我們可以在其中加上過濾 HTML 的功能:

  1. #!/usr/local/bin/php -q 
  2. <? 
  3. $fp=fopen("/dev/stdin","r"); 
  4. while(!feof($fp)) { 
  5. $c=fgetc($fp); 
  6. $inputstr=$inputstr.$c
  7. }; 
  8. fclose($fp); 
  9. $inputstr=ereg_replace("<([^<>]*)>","",$inputstr); 
  10. echo $inputstr
  11. ?> 

假設將此程序命名為 filt2.php3,如此一來便完成了過濾功能,不信請拿個 HTML 檔來試試看:

more xxx.html | filt2.php3

你便會看到刪除了 HTML TAG 的文件了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 施秉县| 新河县| 日照市| 兴仁县| 六枝特区| 浙江省| 库车县| 吉林市| 竹溪县| 呈贡县| 衡阳县| 兴文县| 井研县| 洞口县| 漯河市| 龙江县| 大关县| 安吉县| 彩票| 修水县| 仁怀市| 辛集市| 阳朔县| 金塔县| 桐柏县| 文昌市| 维西| 曲周县| 磐石市| 库尔勒市| 建阳市| 建湖县| 黔西| 若尔盖县| 石城县| 湘潭市| 达州市| 图木舒克市| 炉霍县| 龙山县| 平阴县|