分享
 
 
 

PHP也可以当成ShellScript使用

王朝php·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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 目录下有一个可执行档╋档名为 php╋将它 copy 到 /usr/local/bin 下即可。注意╋如果档案太大╋可以使用 strip 指令将 php 的方式将不必要的信息去除╋这样档案就会小得多了。

第一个程序

开始撰写我们的第一个 PHP Shell Script 程序╋这个例子印出 "Hello world !" :

#!/usr/local/bin/php -q

<?

echo "Hello, world !";

?

注意到 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[] 数组参数存着的则是参数的内容。比如说我现在要设计一个算两个数字总和的程序 :

#!/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<=$argc;$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;

?

假设将此程序命名为 filt.php3╋如果你直接执行这个程序╋它会一直等待你输入╋直到你按下 Ctrl+D 后才会将你的输入资料给印出╋我们可以这么执行它 :

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);

echo $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。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有