php专区

 首页 > php专区 > PHP进阶 > 负载均衡 > php接收标准输入解决分布式处理实现方法

php接收标准输入解决分布式处理实现方法

分享到:
【字体:
导读:
         摘要:我是求转发的技术之一,我要参加sina举办的云计算开发者社区【PHP技术】征文大赛开始啦!我们给sina云支付购买的云豆很多,支付的有压力,看到这个活动,那必须认证分享经验,争取拿这个金币奖励,谢谢sina云,谢......

php接收标准输入解决分布式处理实现方法
 

我是求转发的技术之一,我要参加sina举办的“云计算开发者社区【PHP技术】征文大赛开始啦!”
我们给sina云支付购买的云豆很多,支付的有压力,看到这个活动,那必须认证分享经验,争取拿这个金币奖励,谢谢sina云,谢谢主办活动方
我要分享的是php获取终端信息的功能,这个功能看着代码少,但是作用很大,在生产上解决了很多实际问题,比如分布式处理;
我们这个在生产上使用范围很多,举我们的一个使用范例吧;
我们要统计用户访问日志,apache日志联系滚动,就像linux下面的tail -f命令一样,希望只针对新日志进行分析,进来一条新日志,分析一条;我们考虑过php的长运行循环
while(1)
{

}
但是,运行不到2天,就假死,不工作了,ps -ef |grep phpname ,进程还在,就是没有统计结果了,看top及分析资源使用情况,都趋于0,没有工作;
我们想到了c语言调度php,由于php的数量,资源多,简单,逻辑操作快捷,技术储备多,维护人员衔接多;所以,还是通过一个简单的c调用php,php处理日志分析,就不用在c里面写逻辑分析了;
c毕竟调试稳定等付出多,维护难,解决成本高,所以,我们就要考虑c调度php,通过c获取每行新日志,然后把日志交送给php,那么就需要通过管道传递给php,php就得通过标准输入接收到;
php的标准接受数据功能,就摆到了我们面前,后来发现,php对标准输入支持很完美,STDIN使用的很不错,通过feof(“n”)结束每次获取输入功能。
具体php接收标准输入代码如下:程序名:testpipe.php
<?php
if( STDIN ) {
    while (!feof(STDIN)) {
            $line = trim(fgets(STDIN)); // stream_get_line(STDIN, 4096, "n");
            if( !empty($line) ) {
                    $data[] = $line;

//print_r($data);
            }
    }
}
print_r($data);
?>
就不用c来给大家演示调度了,毕竟不像在php的文章里面显摆c代码了;由于这些都是标准,所以可以通过linux终端实现测试,测试过程如下:
root@206:~# php testpipe.php
123qwe
test
I like php pipe
this is stdin php is good
Array
(
    [0] => 123qwe
    [1] => test
    [2] => I like php pipe
    [3] => this is stdin php is good
)
root@206:~# 
上面每行内容自己随便输入,然后最后ctrl+D结束,由于需要一个n结束,所以,在最后一行输入来个空行,再ctrl+D,就输出数组了,谢谢大家支持,谢谢交流,谢谢sina的这个活动

php接收标准输入解决分布式处理实现方法
分享到:
谈谈大型网站架构系列:负载均衡详解(3...
谈谈大型网站架构系列:负载均衡详解(3) 本次分享大纲 软件负载均衡概述 Ngnix负载均衡 Lvs负载均衡 Haproxy负载均衡 本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级...
PHP大牛必须应该知道的10个科技术语
PHP大牛必须应该知道的10个科技术语在高科技行业中工作,意味着你会听到很多特定行业的行话。  即使你不是一个工程师,这是值得了解的角度来看,他们日常使用,所以你至少可以与他们进行互动,更好地了解他们所面临的挑战。  班吉温伯格,工程现场率先在四方,最近解释了10个基本术语工程师日常使用。 在这里...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……