热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP也可以當成ShellScript

PHP也可以當成ShellScript
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。
国内的 PHP 风气已经相当兴盛﹐本站 LinuxFab 便是完全以 PHP 搭配 MySQL 发展起来的﹐事实上 PHP 的妙用还有很多﹐有机会日后再介绍﹐如果读者们需要 PHP 的相关信息﹐欢迎到本站上的 PHP 论坛 参与更多讨论。 (出处:Viphot)
推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
author-avatar
秋夜里的寂寞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有