2009-04-08 7 views
1

ImはPHP 4.3.11での作業と私はheaderを実行するとき、常にこのPHPヘッダー機能は、それが

警告のようなエラーで応答はずのエラー生成:は、ヘッダー情報を変更することはできません - すでにによって送られたヘッダを( \フォルダ\ file.php:出力はDで開始行の\フォルダ\ file.php

警告:は、ヘッダー情報を変更することはできません - すでに(出力が開始により送信されたヘッダ1)(d)にd:\ folder \ file.php:1)のD:ライン上の\フォルダ\ file.php 現在のPHPのバージョン:4.3.11

私はこのエラーを生成するために使用されるコードは

<?php 
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

    echo 'Current PHP version: ' . phpversion(); 

    // prints e.g. '2.0' or nothing if the extension isn't enabled 
    echo phpversion('tidy'); 
?> 

だったことには、スペースや改行の前を持っていませんまたはPHPタグの後ろにあり、5.xバージョンの同じコードは期待どおりのPHPバージョンを返します。

ヒント?事前に

おかげ

編集: 私は西ヨーロッパのエンコーディングでファイルを開き、BOMを削除し、それが働いてきた!:解決しました。あなたの助けをありがとう!

答えて

5

ファイルの先頭にUTF BOMがありますか?

+0

はい、また5.xバージョン –

+0

ありがとう!私は別のエディタでチェックし、それらの文字を削除し、それは働いた! –

5

<?phpが実際にファイルの最初になるように、PHPブロックの前に空白行と不可視文字(UTF BOMなど)がないことを確認してください。

+0

あなたの速い応答に感謝しますが、それは本当に私を狂ってしまいます。 –

+0

後者を確認するために16進エディタを試しましたか? – Gumbo

0

エラーが発生しているということは、header()関数が呼び出される前に、スクリプト全体(他のファイルが含まれている)が何らかの出力を送信しているということです。

あなたはすべてのファイルを修正し、それらのいずれかが(エコー付き()またはプリント())何かを出力しているかどうかを確認、または必要がありますが、最後の終了タグの後にいくつかの空のスペースを逃した場合?>

+0

ファイルを直接実行してもエラーが発生し、他の実行はajaxを使用しているため同じ結果を返さなければなりません。 –

+0

@ solomongabyと同様に、終了タグを完全にスキップする必要があります。これはPHPで許可されているので、末尾の空白/改行の問題を避けることができます –

2

あなたのファイルにPHPコード以外のものが含まれていない場合は、ファイル末尾の空白の問題を避けるためにPHPの終了タグをスキップすることをお勧めします。

+0

同じ結果を、ありがとう! –

0

php.iniにauto_prepend_fileを定義する可能性があります(おそらく.htaccessも)。

http://at2.php.net/manual/en/ini.core.php - これはすべてのスクリプトの冒頭でrequire()のように動作します。これを確認するには、phpinfo();出力を調べます。

でも、問題はutf-8 BOMだと思います。