我在使用codeigniter开发的实时上收到php会话错误
A PHP Error was encountered
Severity: Warning
Message: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/userts4m/public_html/development/relatioweb/admin/index.php:1)
Filename: Session/Session.php
Line Number: 140
Backtrace:
File: /home/userts4m/public_html/development/relatioweb/application/admin/controllers/User.php
Line: 9
Function: __construct
File: /home/userts4m/public_html/development/relatioweb/admin/index.php
Line: 293
Function: require_once
在本地主机工作很好。但是当我在服务器上向上时,我们面临着这个问题。
我该怎么办...
有两种解决方案可以解决此问题。
有时此错误是由于框架配置错误而发生的,转到文件夹applications/config
并打开config.php
像这样在文件的开头写下这个
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
ob_start();
/* Remaining Part Of your file
.........................................
*/
另一种解决方案是在类的构造函数中编写ob_start()
喜欢这个:
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Your_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
ob_start();
}
}
这个问题在这里得到了很好的解释 如何修复PHP中的"标头已发送"错误
为了解决这个问题,我需要实现输出缓冲的概念(输出缓冲是一种机制,其中不是立即向浏览器发送响应,而是将其缓冲在某个地方,以便我们可以在整个内容准备就绪时立即发送它(。因此,错误表明索引中出现问题.php
我做了什么我插入了
ob_start();
在索引的开头.php
@kunal
和@dale
建议,/home/userts4m/public_html/development/relatioweb/admin/index.php
中有一个空格
通常意味着你已经有一个session_start()
的地方,第二个会抛出这个错误。删除多余的。
在此文件中,在启动 PHP 标记之前可能有空格。
尝试使用 @session_start((;它将绕过错误,会话将启动。请注意@session_start((是代码的第一行。不要执行或回显它之前的任何内容。
检查控制器文件,如果 php 标记之前有空格,请将其删除。
检查您的文件是否有多余的空格或输入,就我而言,我在 php 标签之前在应用程序/配置/自动加载中有一个额外的输入.php(我使用代码点火器(
ob_start ([ callable $output_callback = NULL [, int $chunk_size = 0 [, int $flags =
PHP_OUTPUT_HANDLER_STDFLAGS ]]] ) : bool
此函数将打开输出缓冲。当输出缓冲 活动 不从脚本发送任何输出(标头除外(,而是 输出存储在内部缓冲区中。
此内部缓冲区的内容可以复制到字符串中 变量使用 ob_get_contents((。要输出存储在 内部缓冲区,使用 ob_end_flush((。或者,ob_end_clean(( 将以静默方式丢弃缓冲区内容。
我不得不去php.ini并从always_populate_raw_post_data = -1
行中删除注释。