header("Content-type: text/css");
はFirefoxで動作します、Chromeおよびその他、ただしInternet Explorer 9では動作しません。何が起きているのかわかりません。
ChromeおよびFireworkでは、独自のタブで開いてページに適用されている場合、スタイルシートが表示されます。
Chrome開発者ツールの[ネットワーク]の下で、タイプはtext/css
およびステータスは200です。
Internet Explorer 9では、スタイルシートを独自のタブで開き、ページに適用されていない場合、スタイルシートをダウンロードする必要があります。
F12開発者ツールでは、ネットワークをクリックしてキャプチャを開始し、ページを更新できます。 Style.css.php
。タイプはtext/html
および結果は406です。
これは頭の中にあります:
<link rel="stylesheet" type="text/css" href="/assets/css/style.css.php" media="screen" />
リクエストヘッダー:
Key Value
Request GET /assets/css/main.css HTTP/1.1
Accept text/css
Referer http://10.0.1.5/
Accept-Language en-US
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding gzip, deflate
Host 10.0.1.5
Connection Keep-Alive
Cookie PHPSESSID=*Hidden*
応答ヘッダー:
Key Value
Response HTTP/1.1 406 Not Acceptable
Date Fri, 01 Apr 2011 10:12:42 GMT
Server Apache/2.2.14 (Ubuntu)
Alternates {"main.css.php" 1 {type application/x-httpd-php}}
Vary negotiate
TCN list
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type text/html; charset=iso-8859-1
IEには " いいえ、Content-Typeについて冗談を言うつもりはありません "スイッチがあります:
X-Content-Type-Options: nosniff
ところで:PHPでLast-Modified
を送信し、session.cache_limiter
を無効にすることも確認してください。そうしないと、ブラウザーはCSSファイルをリロードし続け、パフォーマンスに悪影響を及ぼします。
Internet Explorerには、ブラウザによって報告されたMIMEタイプよりもファイル拡張子を信頼するという歴史があります。 mod_rewriteを使用できる場合は、HTMLで.cssファイルを探してから、そのURLをスクリプトにパイプするmod_rewriteルールを作成します。
header("Content-type: text/css", true);
を使用するとうまくいくことがわかりました。サーバーが「Content-Type」の2つのHTTPヘッダーを出力するのを防ぎます。
ヘッダーが送信される前に出力はありますか? phpファイルのBOM?キャリッジリターン?
エラー報告を無効にした場合、トリガーされるエラーが表示されない場合があります。
ob_start()
を先頭に追加してみてください。header()
呼び出しの前に既に送信されたヘッダーに関連する問題を解決します。
UTF8ファイルにBOMがある場合は、削除することをお勧めします。
最近、私自身にもこのような問題がありました。厄介なデバッグだけがこれについて言えます。これがあなたの人々に役立つかどうかはわかりませんが、そうなることを願っています。話の本題に入る。
Internet Explorerは、MIMEタイプのスニッフィングと呼ばれるものを使用します。これは、ファイルヘッダーの200バイトを読み取るだけです。
PHPスクリプトがありました。このスクリプトは、提供されたパラメーターに応じて、異なるデータファイル(データ-ファイル全体)を返す必要がありました。
私のビデオリクエストの例:get-video.php?id = here_goes_the_id
$file = ''; // Get the video file path
if (is_file($file)) {
header("Content-Type: video/mp4");
header("Content-Length: " . filesize($file));
readfile($file);
}
exit(); // This is the turnaround
ファイルデータを送信した直後にスクリプトを一時停止する必要があります。これにより、IE Mime-type sniffing。
それが役に立てば幸い。
動的に生成されたCSSファイルの応答ヘッダーでHTTP 406ステータスコードを提供するInternet Explorer 9の場合:
仮想ホスト構成またはhtaccessに書き換えルールを追加しました。
<IfModule mod_rewrite.c
RewriteEngine on
RewriteBase /
#serve CSS and JS from combine.php
RewriteRule ^combine(.*) combine.php [NC,L]
</IfModule>
注:このソリューションは、mod_negotiationを削除するとこのディレクティブの使用も削除されるため、Multiviewsを使用していないサーバー/仮想ホストにのみ適しています。
この問題は、おそらくCSSではなく401エラーページ(HTML)を提供しているmod_security
が原因であると思います。これをWebサイトのWebルートの.htaccess
ファイルに追加して、問題が解決するかどうかを確認してください。
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
記事Handle Images/CSS/JS as PHP without httpd.conf Using .htaccess問題の把握に役立ちました。
基本的には、他の全員が言及したのと同じこと(PHPでヘッダーを設定するなど)を行いますが、.htaccess
AddHandlerパラメータを設定します。
<Files my_style.css>
ForceType application/x-httpd-php
AddHandler application/x-httpd-php .css
</Files>
このように、.cssで名前を付け、まだPHP解析することができます。