Linux平台php命令行程序处理管道数据的方法


Posted in PHP onNovember 10, 2016

本文实例讲述了Linux平台php命令行程序处理管道数据的方法。分享给大家供大家参考,具体如下:

linux下有一个强大的命令|(管道提示符).它的作用是将前一个命令的结果交给后一条命令并作为后一条命令的输入.而linux下的大多数命令 也都支持这种方式.可是当笔者写完一个php的命令行小程序以后,对于怎样获得前一个命令的结果却陷入了僵局.难道php不支持这样的操作?

于是又开始问google大叔.找来找去,都是说php的命令行模式是怎么回事儿,也没有和我想知道的问题相关的资料.难道是俺的关键字用的不对?或者是 传说的RP问题?google无果以后,开始想找人求助.我认识的做php的朋友中,谁可能会做过命令的程序呢,然后问.问来问去都说没玩过或者不熟悉. 又是无果,哎,真急死人.看来只能靠自己了,于是开始自救.于是开始研究php的argc和argv,试来试去都不行.开始静下心来细细思考怎么回事儿. 隐约记得以前玩perl的时候,想获得输入用的是一个'<>'来完成的.而'<>'代表从标准输入读东西的意思.再想想管道符的 作用不就是代替人输入东西嘛.思路打开了,于是有了下面这段小程序:

[rainbird@rainbird-desktop ~]$cat a.php
#!/usr/bin/php -q
<?php
$fh = fopen('php://stdin','r');
echo fgets($fh);
fclose($fh);
?>
[rainbird@rainbird-desktop ~]$echo "aaaaa"|./a.php
aaaaa

呵呵,成功搞定!但是这样的话,有一个小问题:

[rainbird@rainbird-desktop ~]$tail /etc/passwd|./a.php
couchdb:x:106:113:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash

一次只能读入一行!看来是fgets的问题了.怎么样才可以一下子把所有的内容读过来呢?在使用php的过程中,我知道,如果想一下子把一个文件的内容放 在一个变量而不是数组的话用:file_get_contents.但是它是对文件操作的,不知道是不是适合标准输入.不知道可以试一下嘛.看结果:

[rainbird@rainbird-desktop ~]$cat a.php
#!/usr/bin/php -q
<?php
echo file_get_contents('php://stdin');
?>
[rainbird@rainbird-desktop ~]$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-desktop ~]$./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 相关文章推荐
php 中文处理函数集合
Aug 27 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
配置php网页显示各种语法错误
Sep 23 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 #PHP
php事件驱动化设计详解
Nov 10 #PHP
PHP的消息通信机制测试实例
Nov 10 #PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 #PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 #PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 #PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 #PHP
You might like
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
小程序实现投票进度条
2019/11/20 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
利用python代码写的12306订票代码
2015/12/20 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
python下10个简单实例代码
2017/11/15 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
美国温暖商店:The Warming Store
2018/12/15 全球购物
驾驶员岗位职责
2014/01/29 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
表扬通报怎么写
2015/01/16 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Python MNIST手写体识别详解与试练
2021/11/07 Python