前面,我把PHP运行环境都搭建完成,为了检验一下成果,装了一个PHP探针(B-Check v0.05.2)。
显示基本正常,就是前面有两句错误。
session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/inpublisher/php1.php:1)
session_start()是一个会话函数,执行一些必要的参数初始化,赋值等。
session_start() 产生错误提示,原因有多种:
1、session_start(); 必须在所有语句最前面。
2、没有指定存储session的目录。
解决方法是:
a、在php.ini文件中,找到session.save_path,给它指定一个目录,这个目录必须实际存在。
session.save_path = "e:/web/tmp"
b、初始化设为允许 session.auto_start = 1
; Initialize session on request startup.
session.auto_start = 1
重启WEB服务,刷新后就没有session_start 错误提示了。
还有个小BUG就是,B-Check v0.05.2 PHP探针获取ZendOptimizer 版本号,而ZendOptimizer 确实已经安装成功,这在phpinfo.php页面可以看到。
如何解决?方法如下:
将以下语句:
//获取Zend Optimizer版本,方法参考了废墟のPHP探针
function checkoptimizer()
{
$url= "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?action=phpinfo";
$htmlct=file_get_contents($url);
eregi("Optimizer v(.*), Copyright", $htmlct, $regs);
$optimizerversion=$regs[1];
$optimizerversion=(''!=$optimizerversion)?$optimizerversion:"<font color=red>获取失败!</font>";
return $optimizerversion;
}
修改为:
//获取Zend Optimizer版本,方法参考了废墟のPHP探针
function checkoptimizer()
{
$optimizerversion=OPTIMIZER_VERSION;
$optimizerversion=(""!=$optimizerversion)?$optimizerversion:"<font color=red>获取失败!</font>";
return "v".$optimizerversion;
}
原来,它是用正则表达式截取Url的ZendOptimizer 版本号,但实际上action=phpinfo是一个漏洞,已被PHP修补,用这种方法当然获取不到信息。
正确方法,用PHP内置常量OPTIMIZER_VERSION,直接来取得ZendOptimizer 版本号,就可以了。