当前位置:首页 > linux教程 > 列表

PHP也可以当成Shell Script使用

发布:smiling 来源: PHP粉丝网  添加日期:2014-03-07 09:58:35 浏览: 评论:0 

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 的文件了.

Tags: PHP Shell Script

分享到: