所以我在这里读了很多问题,但没有人帮我解决问题。
我有这个PHP页面加载时出现此错误: -
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Library/WebServer/Documents/k/editprofile.php:1) in /Library/WebServer/Documents/k/class/class.user.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/k/editprofile.php:1) in /Library/WebServer/Documents/k/verify_user.php on line 4
我已经检查过,并且没有" echo"或"打印"或任何空格。 这个错误可能是什么原因?
档案: -
editprofile.php
<?php
include 'class/class.user.php';
include 'common_includes.php';
$user = new user();
.
.
.
class.user.php
<?php
session_start();
include 'dbconnector.php';
class user{
.
.
.
verify_user.php
<?php
if((!isset($_SESSION['logged'])) || ($_SESSION['logged'] != 1))
{
header("Location:login.php?error=Please Login First");
}
?>
dbconnector.php
<?php
$connectionString = 'mysql:host=127.0.0.1;dbname=k';
try
{
$conn = new PDO($connectionString, 'root', 'k');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
common_includes.php
<?php
include 'verify_user.php';
include 'config.php';
?>
答案 0 :(得分:0)
HTTP响应需要以标题开头,然后是正文。在PHP页面中,您回显或包含为混合HTML的任何内容都将进入正文,因此如果您开始回显,然后写入标题,它将失败。这很棘手,因为PHP让人很容易(有些人会说太容易)在不知情的情况下写入正文。
仅从你的片段中,我看到了两件大事:
?>
结束文件。这意味着它被认为是内容之后的一切。即使它看起来没有任何后续的东西,它也很容易。额外的空间甚至换行都会破裂。解决方案:不要将?>
放在文件的末尾。它没有任何优势,大多数现代PHP风格指南都会主动禁止它。echo
中运行header()
之前,您可能会发生verify_user.php
次。如果您要回复PDOException
,之后您可能只想die
,以便它不会写错误消息,然后设置标题。检查标题之前可能运行的任何其他回声。一般情况下,您希望尽可能早地设置标题。