11

PHPファイルが正しく機能しないという問題があります。Content-typeは、どのブラウザでもまったく受信されません。Firebugは、ファイルをcssではなくtext/htmlとして解釈します。これがファイルです:

<?php
header('Content-Type: text/css; charset=UTF-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
/* CSS goes on from here */

ヘッダー行の前に行を配置することをテストしecho 'TEST';、従来の「ヘッダーは既に送信されました」エラーが表示されることを期待していましたが、何も表示されません。

ただし、通常の.cssファイルは魅力のように機能します。

これを整理するにはどうすればよいですか?

更新: php.iniでに 変更default_mimetype = "text/html"default_mimetype = "text/css"、すべてのページがすぐにcssとして解釈されるようになったため、このファイルのcssヘッダーを送信する方法が必要です:)

ジョンの要求からの完全なファイル:

    <?php
    header('Content-Type: text/css; charset=UTF-8');
    echo 'body {background-color: #000000; }';
    ?>

更新#2: PHPファイルに 追加ini_set('default_mimetype', 'text/css');すると、このファイルは修正されますが、この障害の原因となる問題は解決されません...

更新#3:AddType text/css .css .htaccessとApache構成の両方への 追加をテストしました。まだ運がない。文字セットから分離されたヘッダーを送信することもテストされています:header('Content-Type: text/css');-まだ運がありません...

更新#4: サーバーにApache + PHPを再インストールして、問題が解決するかどうかを確認しましたが、解決しませんでした。同じ古い、同じ古い...

4

14 に答える 14

11

php.ini ファイルで output_buffering 設定を確認してください。「オフ」に設定されていない場合、PHP は自動的に出力バッファリングを行います。これを off に設定し、ヘッダー コマンドの前に何かをエコーすると、「従来のエラー」が表示されます。

閉じ ?> を使用しないでください。これが物議を醸す提案であることは承知していますが、あまりにも多くの人が改行やスペースをその後に追加し、ブラウザーに (ヘッダーの前に) 出力します。使用しないことで問題が発生するケースはほとんどありません。

于 2010-04-16T00:33:57.123 に答える
5
  1. ファイル エディターがPHP ファイルにBOMを保存しないようにしてください。
  2. error_reporting / ini_set を移動して、それらを最初の PHP ステートメントにするようにしてください (header() 呼び出しの前)。このようにして、すべてのエラーが表示されます (存在する場合)。それをオフにすることを忘れないでください!
  3. ばかげた発言ですが、このファイルが PHP として解釈されることを確認してください (拡張子は .php であるか、.htaccess でない場合はサーバーに PHP として解釈するように指示します)。
  4. 他のすべてはあなたのコードで問題ありません。それでもうまくいかない場合は、サーバーのログを確認してください。たぶん、他の何かがこの PHP ファイルの実行をクラッシュさせます (無効な MIME など)...
于 2010-04-13T14:58:40.577 に答える
2

その理由は、header関数が最初に呼び出された場合にのみ機能するためです!

前に置くechoと、コンテンツタイプは自動的にtext/html

実際に機能するかどうかをテストするために、ヘッダーの後に CSS コードを出力してみてください。

詳細については、このページをお読みください

編集: 投稿を変更しましたか? :-)

于 2010-03-24T15:04:08.683 に答える
1

ファイル全体がインデントされていることがわかりました。

    <?php
    header('Content-Type: text/css; charset=UTF-8');
    echo 'body {background-color: #000000; }';
    ?>

1 行目のインデントは 4 つのスペースを出力したため、ヘッダーは機能しません。

于 2010-04-16T00:05:39.887 に答える
1

curlを使用して、実際に送信されているヘッダーを確認することをお勧めします。

コマンドラインからこれを試して、「text/css」を確認してください。

curl -I http://example.com

ブラウザのリクエスト ヘッダーによっては、PHP が出力バッファリングを使用して gzip 圧縮された出力を送信している可能性もあります。PHP ファイルで、これを試してob_gzhandler.

print_r(ob_list_handlers());

zlib.output_compression有効になっている場合は、php.ini または Apache 構成でチェックインします。

于 2010-04-13T12:27:19.130 に答える
1

これは通常、コードが実行される前 (実行時に ini_set() によって display_errors が設定される前) にスクリプトが異常終了する致命的なエラー (つまり、構文エラー) によって引き起こされます。PHP 構成ファイル (php.ini) で display_errors を変更してみてください。

于 2010-03-24T15:08:45.367 に答える
1

設定で機能header()が無効になっている可能性がありますか?

テスト:

print ini_get('disable_functions');
于 2010-04-10T21:30:12.363 に答える
0

野蛮な推測:任意のBOMを表示するものでファイルを開きます。問題が発生する前に奇妙なキャラクターが表示された場合<?php。現在のエディターオプションを確認してUTF-8ファイルを保存し、BOMなしで保存するようにします。

于 2010-04-13T12:37:13.867 に答える
0

キャッシングに問題があるのか​​もしれません。

これを試して:

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

echo 'body {background-color: #000000; }';

すぐに使用できる XAMPP インストールと Firefox で動作します - firebug は正しいコンテンツ タイプを報告します。

于 2010-04-13T14:39:29.093 に答える
0

これは、Web サーバーがスクリプトを通常のファイルとして解釈しているようです。拡張子が .php で、他の .php ファイルは期待どおりに動作しますか?

于 2010-03-24T15:04:20.570 に答える
0

完全に問題ないように見え、 の行echoは間違いなく警告を生成するはずです。間違ったファイルを編集している可能性がありますか?

于 2010-03-24T15:04:45.980 に答える
0

あなたが試すことができますContent-Style-Type: text/css

ここから下をご覧ください

<META http-equiv="Content-Style-Type" content="text/css">

デフォルトのスタイル シート言語は、HTTP ヘッダーで設定することもできます。上記の META 宣言は、HTTP ヘッダーと同等です。

Content-Style-Type: text/css

編集:

リンクで、AddType text/css .cssApache構成ファイルに追加することが言及されています。多分あなたはそれを試してみることができます

Edit2このリンク で「css」を検索します。誰かがあなたと同じ問題を抱えていました。文字セットなしでヘッダーを送信してみてください

私は最近、Firefox と XHTML 1.0 トランジショナルで身の毛もよだつような問題に直面しました。

他のブラウザや HTML 4.1 でも問題なく動作しました。

簡単に言えば、PHP で生成された JS および CSS ファイルは、ヘッダーによって引き続き text/html として報告されていましたが、HTML では、それらは text/css および application/javascript でした。ページが XHTML 1.0 であると伝えられた Firefox は、肛門保持型になり、ページのスタイル設定を拒否しました。(JSはまだ機能していると思いますが、とにかく修正しました。)

解決:

header('Content-type: テキスト/css'); and header('Content-type: application/javascript');

編集 3 AVG Linkscanner というユーティリティが原因で、一部のフォームがデータを送信しないという投稿 がありました。Apache + php を再インストールしましたが、OS を再インストールしていないと思います。そのため、これについて調査するか、いくつかのユーティリティ/プラグインをオフにしてみてください。

于 2010-03-24T15:12:25.577 に答える