1

さて、私はいくつかのページをグーグルで検索し、次の解決策を思いつきました:

これを .htaccess に追加します
#Active GZIP for php-files
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5

.js と .css の場合:

AddHandler application/x-httpd-php .css .js
php_value auto_prepend_file /Library/WebServer/Documents/blog/code/Helpers/ContentHeader.php

.js と .css を php スクリプトとして実行します。2 行目には次のページが含まれます。

<?php
    $pathInfo = pathinfo($_SERVER['PHP_SELF']);
    $extension = $pathInfo['extension'];

    if($extension == "css")
    {
        header("Content-type: text/css");
    }
    if($extension == "js")
    {
        header("Content-type: text/javascript");
    }
?>

ヘッダー「text/css」を.cssファイルに送信し、「text/javascript」をjavascriptファイルに送信します。ここまでは順調ですね。ただし、問題は、私が使用しているいくつかの縮小された JavaScript にあり、ある種の php エラーが発生します。

<br />
<b>Parse error</b>:  syntax error, unexpected ']' in <b>/Library/WebServer/Documents/blog/public/scripts/prettify/prettify.js</b> on line <b>18</b><br />

また:

<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />
<br />
<b>Parse error</b>:  syntax error, unexpected '?' in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />

それで、これを行うより良い方法はありますか?私が思いつくことができる唯一のオプションは、.javascript ファイルに手動でアクセスし、php が気に入らない「エラーを修正」することです。しかし、それはより簡単な解決策であるべきではありませんか?

4

3 に答える 3

6

Apache Mod_Deflateを使用し、そこに示されている構成例を使用します。PHP をハッキングしなくてもうまく機能します。

于 2009-03-04T21:57:28.993 に答える
2

私は実際に PHP スクリプトから JS ファイルを提供しています。この問題が原因ではありませんが、Expires ヘッダーとキャッシュを制御できます。一般的なモデルは次のとおりです。

  • URL は /script/blah.1234567890.js のようなものです。
  • その URL は、blah.js ファイルの mtime から生成されます。
  • その URL は、.htaccess の書き換えルールを介して js.php スクリプトに送信されます。
  • スクリプトは、渡された mtime をチェックします。キャッシュされたバージョンの mtime よりも新しい場合は、すべての JS ファイル (単一のファイルに照合され、JSMin で縮小されます) から新しいキャッシュ バージョンが生成されます。
  • mtime がスクリプトよりも新しくない場合は、キャッシュされたバージョンが単に提供されます。
  • いずれの場合も、コンテンツの有効期限は 1 年後に設定されています。

URL のタイムスタンプにより、スクリプト ファイルを更新できます。

これはgzipとどのように関連していますか?単純。私の js.php スクリプトの一番上にあるのは次のとおりです。

ob_start("ob_gzhandler")

これにより、クライアントがサポートしている場合 (および出力バッファリングを使用する場合)、gzip 圧縮がオンになります。

それは本当に本当にうまくいきます。

1 つの JS ファイルと 1 つの CSS ファイルだけに制限してみてください。必要に応じて組み合わせてください。CSSファイルでも同じトリックを行います(もちろん縮小はしません)。

このソリューションの利点は、mod_rewrite が有効になっていることのみに依存することです。他の拡張機能は必要ありません (ob_gzhandler は PHP の標準部分です)。さらに、ファイルを結合するにはスクリプトが必要です (ビルド プロセスの一部として結合する場合を除きますが、これは少し面倒だと思います)。

于 2009-03-04T22:03:13.020 に答える
1

このエラーが発生する理由は、スクリプトに<?. たとえば、prettify.js では次のようになります。

/^[^<?]+/

これを PHP に渡すと、PHP エンジンが再び起動し、予期しない].

もっと制御が必要な場合は、@ jonstjohn の方法、または @cletus の方法を使用します。

于 2009-03-04T22:08:30.230 に答える