PHPサーバーが突然セッションエラーを出すようになりました

PHPサーバーが突然セッションエラーを出すようになりました

私は、基本的に Windows 用の LAMP セットアップである Xampp を実行しています。何年も問題なく使用してきましたが、突然、PHP セッションを使用するすべてのサイト ページで次のようなエラーが表示されるようになりました...

警告: session_start() [function.session-start]: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されています (出力は C:\webserver\htdocs\friendproject2\labs\2.php:1 で開始されました)、C:\webserver\htdocs\friendproject2\labs\2.php の 3 行目

これは通常、次の 2 つの原因のいずれかによって発生すると私は認識しています。

  1. session_start()関数が呼び出される前に画面に空白が印刷されると、これが発生することがあります。
  2. session_start() が呼び出される前に画面/ブラウザに何かが印刷されている場合。

問題は今や異なります。今夜まで、セッションを使用するファイルが何百もありましたが、そのどれもこれらのエラーを示しませんでした。ユーザー エラーを見落としているのは 1 つのファイルだけではありません。これはすべてのファイルに影響を及ぼし始めました。今夜も、記憶している限り最近も、コンピューターに変更を加えたことはありません。

何が原因なのでしょうか?私は気が狂いそうになっていますが、なぜこのようなことが起き始めたのか誰も知らないようです。サーバー関連の問題だと思います

ファイルを作成して、それをサーバーの Web 上の任意のフォルダーに配置し、以下のような単純なファイルにしても、上記のようなエラーが発生します。

<?PHP
session_start();

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

echo $_SESSION['test'];
?>

答え1

すべてのファイルが UTF-8 エンコードで保存されているかどうかを確認してください。UTF-8 エンコードされたファイルには、ビッグ エンディアンとリトルエンディアンのバイト オーダーを区別するための BOM (バイト オーダー マーク) が含まれている場合があります。PHP は BOM を認識できず、ファイルの先頭で BOM に遭遇すると、データを処理しているとみなして送信してしまいます。その時点では、ヘッダーを変更するには遅すぎます。

解決策としては、ファイルをANSIとして保存し、IDE/エディターを設定することです。

それが役に立てば幸い。

編集:

このような場合は、変換が必要なファイルがたくさんある可能性があります。iconv を使用して変換を実行するこの bash シェル コードを使用できます (以下から引用)。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

関連情報