Tag: php

cacti 又不能采集流量了

最近总遇到一些莫名其妙的问题,总要troubleshooting 。

先前cacti 出现过,到了一定流量时,就采集不到了。。。这个实在诡异,即使按照 joecen 说的,把output type id 改为64bit 都无济于事。。。

今天竟然发现cacti 完全不采集了!!在google 大神的帮助下,成功不明所以然地解决了,也记录一下吧。

直接原因是,采集的脚本出错:

执行,/usr/bin/php5-cgi /data/cacti/poller.php

Content-type: text/html
X-Powered-By: PHP/5.3.3

<br><strong>This script is only meant to run at the command line.</strong>

看来与cacti 本身没有关系,是php 执行错误。

祭出google 大神,修改 php.ini 的 register_argc_argv 为 on 。问题解决。

php 文档说,register_argc_argv 这个参数是

Tells PHP whether to declare the argv & argc variables (that would contain the GET information).

呃。。。我不懂 php ,我完全不知情!!^_^

php 设置response header 时的小问题

今天遇到一个感觉很诡异的问题,就是 php 设置header 总是不成功,设置为返回xml ,但总是返回html 。源码大概如下:

<?php
echo “<?xml version=\”1.0\” encoding=\”UTF-8\”?>\n”;
header(“Content-Type: text/xml; charset=UTF-8″);
echo “<result>\n”;
echo “<success>false</success>\n”;
echo “</result>”;

?>

只要把header 一行移到第一个echo 的前面就行了

<?php
header(“Content-Type: text/xml; charset=UTF-8″);
echo “<?xml version=\”1.0\” encoding=\”UTF-8\”?>\n”;
echo “<result>\n”;
echo “<success>false</success>\n”;
echo “</result>”;

?>

对php 理解和实践都不深,猜测下,只要有了 echo 的话,php 就自动将返回头设定了,无论后面是否使用header() 函数,也无法改变它的 content-type 了。不知道php5.3 是否有改变,不知道是否还有更方便的方法设置 content-type ,不管了,我只是临时去解决了个小问题。

没文化真可怕阿,我的半桶水php 水平,差点就搞不掂今天的问题了。

debian 下nginx 快速搭建FCGI环境

我的想法是。。。快点,快点,再快点!!

apt-get install spawn-fcgi php5-cgi

用 spawn-fcgi 启动 fcgi ,

spawn-fcgi -a 127.0.0.1 -p 8000 -u nobody -f /usr/bin/php-cgi -C 5 ;

在 nginx 里配置加一句:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

然后把一个 php 放在 /home/nginx/html 里,就可以使用了。

新搭建的nagios+pnp爆的一个错误

部门明天要上一个大项目啊,我今天赶紧搭监控。

原谅我这个古董,21 世纪了,还在搭nagios。。。web 环境,我也还是很古董地选用apache + php_module 的方式。。。其实监控系统来说,没什么性能要求,apache和nagios 也符合我的需求了,好,开始!!

首先爆了一堆这样的错:

Deprecated: Assigning the return value of new by reference is deprecated in /data/nagios/share/pnp/include/function.inc.php on line 1029

Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead in /data/nagios/share/pnp/include/function.inc.php on line 560

貌似 5.3.0 才报这样的错,5.2.9 也没有爆啊。。。没错,我是很懒,但一般我都会追求真相的。但是,项目明天就要上线了啊,时间不允许我这样玩了,我还是懒一点吧。。。以解决问题为最终目标!!

让我设timezone。。。不太会php啊。。。也没研究过nagios的架构。。。直接一点吧,见到什么改什么!!

function.inc.php 貌似是一个基础函数,每个函数都会include它的,我在里面显式地指定timezone总可以吧,于是在function.inc.php 里加一句

date_default_timezone_set(‘Asia/Chongqing’);

哈哈,timezone 的 warning 解决了!但问题随之又来了。。。又报错。。。

Deprecated: Function eregi() is deprecated in /data/nagios/share/pnp/include/function.inc.php on line 1505

函数 deprecated 了。。。算了,我决定改php.ini,屏蔽错误和warning!

打开 phpinfo() 看一下php.ini 在哪里,找不到。。。

在 httpd.conf 里加一句:

PHPIniDir “/data/apache/conf”

随便copy一个php.ini过来,刚才google了一下,好像是 error_reporting 的问题,但不管我怎么改error_reporting的组合,都无法成功。。。突然被我看到这样的字眼:

display_errors = On

哈哈,还不是你!!把你关了总可以了吧!!

display_errors = Off

apachectl graceful 一下,哈哈,问题解决了!!!可以用了!!继续配置监控。。。

唉,LAMP 如此经典的组合,我了解得还是不够啊!!