PHPを使用して.jsファイルをGZIPしようとすると、何らかのPHP関連エラーが発生します

StackOverflow https://stackoverflow.com/questions/612628

質問

さて、私はいくつかのページをグーグルで調べて、次の解決策を考え出しました:

これを.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");
    }
?>

ヘッダー<!> quot; text / css <!> quotを送信します。 .cssファイルと<!> quot; text / javascript <!> quot; 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ファイルにアクセスし、<!> quot;エラーを修正する<!> quot;そのphpは気に入らない。しかし、それは簡単な解決策ではありませんか?

役に立ちましたか?

解決

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

/^[^<?]+/

これをPHPに渡しているため、PHPエンジンが再び起動し、予期しない]が表示されます。

@jonstjohnのメソッド、またはさらに制御が必要な場合は@cletusのメソッドを使用します。

他のヒント

Apache Mod_Deflate を使用し、そこに示されている設定例を使用します。 。 PHPでハッキングしなくても問題なく動作します。

実際には、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圧縮を有効にします(出力バッファリングを使用します)。

これは本当に効果的です。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top