Ben GZIP. Js çalıştığınızda PHP kullanarak dosyaları php ile ilgili hata çeşit olsun

3 Cevap php

Tamam, Yani sayfaları birkaç googled ve aşağıdaki çözüm ile geldim:

Add this in .htaccess
#Active GZIP for php-files
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5

ve bunun için js ve css..:

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

Yürütmek hangi. Js gibi. Css php komut dosyaları gibi. İkinci satır aşağıdaki sayfayı içermektedir:

<?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");
    }
?>

. Css dosyaları ve javascript dosyaları "text / javascript" için başlık "text / css" gönderecektir Hangi. Şimdiye kadar iyi. Sorun ancak ben php hata çeşit olsun kullanmak minified JavaScripts bir çift ile:

<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 />

or:

<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 />

Yani, bunu yapmanın daha iyi bir yolu var mı? Ben kadar gelebilir tek seçenek elle. Javascript dosyaları gitmek ve php gibi olmadığını "hataları düzeltmek" için. Ama bu bir daha kolay çözüm olmamalı?

3 Cevap

The reason you're getting this error is that the scripts contain <?. For example, in prettify.js is this:

/^[^<?]+/

Eğer PHP içine bu geçiyoruz, böylece PHP motoru tekrar devam başlar ve görür beklenmedik bir ].

Eğer daha fazla denetime gerek duyarsanız ben @ jonstjohn yöntemiyle veya Cletus'un @ ile gitmek istiyorum.

Biz Apache Mod_Deflate kullanmak ve burada gösterilen örnek yapılandırma. PHP hack olmadan harika çalışıyor.

Ben aslında bir PHP komut dosyası benim JS dosyaları hizmet vermektedir. Çünkü bu konuda ama ben sona başlığı ve önbelleğini kontrol edemez. Genel modeli:

  • URL / script/blah.1234567890.js gibi bir şeydir;
  • Bu URL blah.js dosyasının mtime oluşturulur;
  • . İşte URL htaccess bir yeniden yazma kuralı yoluyla js.php komut gönderilir;
  • Komut geçirilen mtime kontrol ederse onun o (tek bir dosya içine harmanlanmış ve sonra JSMin ile küçültüldüğü takdirde) tüm JS dosyaları yeni bir önbelleğe alınmış sürümünü üretir önbelleğe alınmış sürümünün mtime daha yeni;
  • Mtime komut daha yeni değilse, önbelleğe alınan sürüm sadece servis edilir;
  • Tüm durumlarda içerik bugünden itibaren bir yıl sona erecek.

URL damgası komut dosyası yenilemeyi sağlar.

Şimdi bu nasıl Gzip Sıkıştırma ile ilgisi nedir? Basit. Benim js.php yazısının üstünde yer alır:

ob_start("ob_gzhandler")

hangi istemci (de çıktı tamponlama kullanma gibi) destekliyorsa gzip sıkıştırma yanar.

Bu gerçekten çalışıyor.

Deneyin ve tam bir JS ve bir CSS dosyası kendinizi sınırlamak. Gerekirse bunları birleştirmek. Ben de (elbette hiçbir minification) CSS dosyaları ile aynı hile yapmak.

Bu çözümün avantajı sadece mod_rewrite etkin olma dayanır olduğunu. Başka hiçbir uzantısı (ob_gzhandler PHP standart bir parçasıdır) gereklidir. (Eğer bir inşa sürecinin bir parçası olarak ama bu biraz daha sıkıcı bulduğu yapmadıkça) artı bir komut dosyaları birleştirmek için gereklidir.