我的 PHP 服务器突然出现会话错误

我的 PHP 服务器突然出现会话错误

我正在运行 Xampp,它基本上是一个 LAMP 设置,但适用于 Windows。我已经使用它很多年了,没有任何问题,突然间,我所有使用 PHP 会话的网站页面都出现了这样的错误...

警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 C:\webserver\htdocs\friendproject2\labs\2.php:1)在 C:\webserver\htdocs\friendproject2\labs\2.php 第 3 行

我意识到这种情况通常是由两件事中的一件事引起的。

  1. 如果在调用 session_start() 函数之前有任何空白打印到屏幕上,有时会导致这种情况发生
  2. 如果在调用 session_start() 之前有任何内容打印到屏幕/浏览器。

现在我的问题不同了。今晚之前,我有数百个使用会话的文件,但没有一个显示任何这些错误。我忽略了用户错误的文件不只一个,这开始影响我的所有文件。我记得今晚或最近我都没有对我的电脑进行任何更改。

这可能是什么原因造成的?这让我抓狂,似乎没人知道为什么会发生这种情况。我认为这一定与服务器有关

我甚至可以创建一个文件并将其放入我的服务器网络的任何文件夹中,并成为像下面这样的简单文件,但它仍然会出现我上面显示的错误......

<?PHP
session_start();

$_SESSION['test'] = 'test value';

echo $_SESSION['test'];
?>

答案1

检查所有文件是否都以 UTF-8 编码保存。UTF-8 编码文件可能包含 BOM(字节顺序标记),以区分大端字节顺序/小端字节顺序。PHP 不理解 BOM,当它在文件开头遇到 BOM 时,它会假定正在处理数据并将其发送出去 - 到那时再修改标头就太晚了。

解决方案是确保将文件保存为 ANSI - 配置您的 IDE/编辑器

希望能帮助到你。

编辑:

如果是这种情况,你可能有很多文件需要转换。你可以尝试使用这个使用 iconv 的 bash shell 代码来为你做这件事(改编自:https://stackoverflow.com/questions/1182037/osx-change-file-encoding-iconv-recursive

for files in /mydisk/myfolder/*.php
  do
    iconv -f UTF-8 -t ISO-8859-1 "$files" "${files%.php}"
done

相关内容