我的 PHP 伺服器突然出現會話錯誤

我的 PHP 伺服器突然出現會話錯誤

我正在運行 Xampp,它基本上是一個 LAMP 設置,但適用於 Windows。我已經使用它很多年了,沒有任何問題,突然之間,我所有使用 PHP 會話的網站頁面現在都出現這樣的錯誤...

警告:session_start() [function.session-start]:無法傳送會話快取限制器- 標頭已傳送(輸出從C:\webserver\htdocs\friendproject2\labs\2.php:1 開始)在C:\webserver \htdocs 中第 3 行的 \friendproject2\labs\2.php

我意識到這種情況通常是由兩件事之一引起的。

  1. 如果在呼叫 session_start() 函數之前有任何空白列印到螢幕上,有時會導致這種情況發生
  2. 在呼叫 session_start() 之前是否有任何內容列印到螢幕/瀏覽器。

現在我的問題不同了。在今晚之前,我有數百個使用會話的文件,但沒有一個文件顯示任何這些錯誤。我忽略的不僅僅是 1 個文件中的使用者錯誤,這剛開始影響我的所有文件。據我所知,今晚或最近我都沒有對我的計算機進行任何更改。

可能是什麼原因造成的?這讓我發瘋,似乎沒有人知道為什麼會發生這種事。我想這一定是伺服器相關的

我甚至可以創建一個文件並將其放入我的伺服器網路的任何資料夾中,並成為像這樣的簡單文件 bvelow ,它仍然會給出我上面顯示的錯誤...

<?PHP
session_start();

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

echo $_SESSION['test'];
?>

答案1

檢查您的所有檔案是否以 UTF-8 編碼儲存。 UTF-8 編碼的檔案可能包含 BOM(位元組順序標記)來區分大端/小端位元組順序之間的差異。 PHP 不理解 BOM,當它在檔案開頭遇到 BOM 時,它會假設它正在處理資料並將其發送出去 - 到那時修改標頭就為時已晚。

解決方案是確保將檔案儲存為 ANSI - 配置 IDE/編輯器

希望能幫助你。

編輯:

如果是這種情況,您可能有很多文件需要轉換。您可以嘗試使用此 bash shell 程式碼,該程式碼使用 iconv 來為您完成此操作(改編自: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

相關內容