利用PHP的Popen实现RRDTOOL作图的动态输出

最近看了一下RRDTOOL如何作图,语法确实比较繁琐,但不是太难。命令行下执行的时候,每次都需要输出成为一个文件。我们希望做一个应用,能够动态生成图表,看了看Cacti的实现方法,核心的部分就是使用了popen这个函数,将命令的输出放到了管道中,然后循环读取所有的数据,完成后,再以图片的形式输出到客户端。这样用户就能够看到动态的图片而不需要进行物理的存储了,下面是我截取的代码段,供大家参考。

error_reporting(E_ALL); //作图命令,注意看 graph 后面加了一个连接符 $command = '/opt/rrdtool/bin/rrdtool graph - --start=-86400 --end=-300 --title=Test --height=400 --width=800 DEF:value1="/home/echo/workspace/misc/tianjin_dpool_web_21_traffic_in_22.rrd":traffic_in:AVERAGE AREA:value1#ff0000 2>&1'; //测试管道符 session_write_close(); //用管道的方式执行命令,并且接收错误输出 $handle = popen("$command 2>&1", 'r'); $read = ''; while (!feof($handle)) {         $read .= fgets($handle, 4096); } pclose($handle); echo $read; // Set the proper headers to allow caching $this->request->headers['Content-Type']   = File::mime_by_ext('png'); $this->request->headers['Content-Length'] = strlen($read); $this->request->headers['Last-Modified']  = date('r', time());

参考资料: 1、RRDTOOL教程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

硬盘故障时如何强制关机:Input/output error

如果硬盘可能会出现锁死或坏道的故障,会造成 SHELL 命令的失效,包括 reboot,powoff,,shutdown,用正常的命令是没法完成重启的。 执行这...

35440
来自专栏架构师之路

线上操作与线上问题排查实战

技术同学需要经常登录线上的服务器进行操作,58到家架构部/运维部/58速运技术部,联合进行了一次线上操作与线上问题排查实战演练,同学们反馈有收获,特将实战演练的...

32640

使用wget命令在命令行下下载资源

wget是一个命令行实用程序,它从Internet检索文件并将它们保存到本地文件系统。任何可以通过HTTP或FTP协议访问的文件都能利用wget进行下载。wge...

1.5K30
来自专栏陈树义

高效开发技巧:为什么你下载Git项目这么慢?

笔者所在公司采用的是 GitLab 进行版本管理,但许多同事下载 Git 项目的路径是这样的: 打开浏览器 -> 输入网址 -> 查找项目地址 -> 复制项目...

37440
来自专栏木头编程 - moTzxx

Laravel 自定义公共函数的引入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

11810
来自专栏静晴轩

生成lua的静态库.动态库.lua.exe和luac.exe

前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 “lua: attempt to ...

1.1K110
来自专栏smy

git将代码提交到远程分支(非主分支)

一个仓库可以包含多个分支,有一个默认的主分支:master 若想提交代码至远程仓库的某个分支(非主分支) 先查看下本地分支以及远程分支:git branch -...

34450
来自专栏静下来

php提示Notice:undefined index的解决方法

今天一个朋友的网站被他的服务商关站了,说是网站每天报错日志能有30M。想想一个文本,就一些提示就能有30M的大小,那错误是蛮多的了。 因为他用的虚拟空间,他这个...

41850
来自专栏乐沙弥的世界

Virtual Box下安装Oracle Linux 6.3

      Oracle Linux 6.3已经发布快2年了,其功能有很大的提升,增强了KVM,文件卷的在线resizing,LVM支持 raid4, 5, 6...

9120
来自专栏Java开发

解决MariaDB中文乱码

39640

扫码关注云+社区

领取腾讯云代金券