Linux平台php命令行程序处理管道数据的方法
本文实例讲述了Linux平台php命令行程序处理管道数据的方法。分享给大家供大家参考,具体如下
linux下有一个强大的命令|(管道提示符).它的作用是将前一个命令的结果交给后一条命令并作为后一条命令的输入.而linux下的大多数命令 也都支持这种方式.可是当笔者写完一个php的命令行小程序以后,对于怎样获得前一个命令的结果却陷入了僵局.难道php不支持这样的操作?
于是又开始问google大叔.找来找去,都是说php的命令行模式是怎么回事儿,也没有和我想知道的问题相关的资料.难道是俺的关键字用的不对?或者是 传说的RP问题?google无果以后,开始想找人求助.我认识的做php的朋友中,谁可能会做过命令的程序呢,然后问.问来问去都说没玩过或者不熟悉. 又是无果,哎,真急死人.看来只能靠自己了,于是开始自救.于是开始研究php的argc和argv,试来试去都不行.开始静下心来细细思考怎么回事儿. 隐约记得以前玩perl的时候,想获得输入用的是一个'<>'来完成的.而'<>'代表从标准输入读东西的意思.再想想管道符的 作用不就是代替人输入东西嘛.思路打开了,于是有了狼蚁网站SEO优化这段小程序:
[rainbird@rainbird-desk ~]$cat a.php #!/usr/bin/php -q <?php $fh = fopen('php://stdin','r'); echo fgets($fh); fclose($fh); ?> [rainbird@rainbird-desk ~]$echo "aaaaa"|./a.php aaaaa
呵呵,成功搞定!这样的话,有一个小问题:
[rainbird@rainbird-desk ~]$tail /etc/passwd|./a.php couchdb:x:106:113:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash
一次只能读入一行!看来是fgets的问题了.怎么样才可以一下子把所有的内容读过来呢?在使用php的过程中,我知道,如果想一下子把一个文件的内容放 在一个变量而不是数组的话用:file_get_contents.它是对文件操作的,不知道是不是适合标准输入.不知道可以试一下嘛.看结果:
[rainbird@rainbird-desk ~]$cat a.php #!/usr/bin/php -q <?php echo file_get_contents('php://stdin'); ?> [rainbird@rainbird-desk ~]$tail /etc/passwd|./a.php couchdb:x:106:113:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash haldaemon:x:107:114:Hardware abstraction layer,,,:/var/run/hald:/bin/false speech-dispatcher:x:108:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false rainbird:x:1000:1000:rainbird,,,:/home/rainbird:/bin/bash sshd:x:113:65534::/var/run/sshd:/usr/sbin/nologin postfix:x:114:122::/var/spool/postfix:/bin/false
真帅!搞定.就这么简单的几行,php就简单实现了cat的功能:
[rainbird@rainbird-desk ~]$./a.php </etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync ......
对php开始由衷的折服.php也开始融入了linux一切皆文件的思想,竟可以把标准输入作为一个文件来处理.细细想来:其实这是一个简单的小问题,只 是因为没有做过这样一个事情,思维受到了限制,当接触这样一个需求的时候一下子不知道应该怎么思考.用perl,python,ruby做程序的同学们再 遇到这样的需求知道怎么处理了吧:)这个小经历印证:程序是算法的表达方式,算法是灵魂,有思路才有出路.
更多关于PHP相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程