解决 joomla 0 failed to start the session because headers have already been sent by XXXX 原
由于需要帮用户将SHOP2全站升级到最新的J3.9.8版本,我将SHOP2全站打包到了本地,然后在本地完成了升级,其中为了确定升级无重大错误,我在后台全局设置中将错误报告设置为开发级别。然后将升级包分别部署到我们的测试服务器和客户的测试服务器上,两次部署都很成功,但在客户的服务器上,无法登陆后,提示joomla 0 failed to start the session because headers have already been sent by XXXX。在我的服务器上却没有发生这种问题。
1,问题描述
使用kickstart.php在客户服务器上还原网站后,前台可以正常打开,后台打开的时候就提示joomla 0 failed to start the session because headers have already been sent by XXXX。由于在全局设置中将错误报告设置为开发,因此,在前后台都有一些提示经过信息,按照经验,这些是不会影响程序正常的工作的(完成后,在后台全局射中将错误报告设置为无即可)
2,问题分析
在前几天也遇到了failed to start the session的问题,因此当时我很武断的将解决 Joomla session_start(): Failed to read session data 这篇文章发给客户,让他参考解决。但第二天,他告诉我说不行。我这才重视起来。仔细的分析了两次的错误提示信息,发现是有不同的。
本次的提示信息是:
joomla 0 failed to start the session because headers have already been sent by XXXX
这个问题在开发PHP脚本的时候也有时遇到,导致的问题是写脚本的时候在<?php 标签前有多余的空格,只需要去掉即可。核心的原理就是php start session之前不允许有任何的输出。
3,解决的过程
首先我想到的就是将错误报告关闭,看看是否会解决问题。可能是由于在session_start之前,输出了错误提示信息导致session start失败的。由于不能登录后台,所以通过ftp找到网站根目录下的configuration.php文件,将错误报告设置为无。如:
public $error_reporting = 'none';
然后重新登录,发现问题解决。
总结:在出现joomla 0 failed to start the session because headers have already been sent by XXXX的时候,可以尝试将错误报告设置为无
4,疑惑
1,非常的奇怪,如果是错误信息导致session start失败的,那么为什么在我的测试环境中并没有出错呢?这一点有待深究,这很有可能和用户使用的php版本和php设置有关。