Vra

Goed, so ek het 'n paar bladsye googled en kom met die volgende oplossing:

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

en hierdie vir Js en Css:

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

Watter Js asook Css sal uit te voer as PHP skrifte. Die tweede ry sluit die volgende bladsy:

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

Watter kop "teks / css" sal stuur om lêers en "text / javascript" Css om javascript lêers. So ver so goed. Die probleem is egter met 'n paar van minified Java wat ek gebruik ek kry 'n soort van PHP fout:

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

of

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

So, is daar geen beter manier om dit te doen? Die enigste opsie wat ek kan kom met is om met die hand in te gaan na die .javascript lêers en "reg te stel die foute" wat php hou nie. Maar moet dit nie wees 'n makliker oplossing?

Was dit nuttig?

Oplossing

Die rede wat jy kry hierdie fout is dat die skrifte bevat <?. Byvoorbeeld, in prettify.js is dit:

/^[^<?]+/

Jy verby hierdie in PHP, sodat begin die PHP-enjin weer aan die gang en sien 'n onverwagse ].

Ek sal gaan met @ jonstjohn se metode, of @ Cletus se as jy meer beheer het.

Ander wenke

Ons gebruik Apache Mod_Deflate en gebruik die voorbeeld opset daar getoon . Werk baie goed sonder inbraak in PHP.

Ek het eintlik my JS lêers dien van 'n PHP script. Nie as gevolg van hierdie kwessie, maar sodat ek kan beheer oor die verval kop en caching. Die algemene model is:

  • Die URL is iets soos /script/blah.1234567890.js;
  • Dit URL gegenereer uit die mtime van die blah.js lêer;
  • Dit URL is via 'n herschrijfregel in die htaccess 'n js.php script gestuur;
  • Die script gaan die mtime geslaag in As sy nuwer as die mtime van die kas weergawe dit 'n nuwe kas weergawe van al my JS-lêers (wat saamgestel in 'n enkele lêer en dan minified met JSMin) genereer;.
  • As die mtime is nie nuwer as die script, die kas weergawe is net gedien;
  • In alle gevalle die inhoud is ingestel op 'n jaar verstryk van nou af.

Die tyd stempel in die URL toelaat vir verfrissende die script lêer.

Nou hoe hou dit verband met gzipping? Eenvoudig. Op die top van my js.php script is:

ob_start("ob_gzhandler")

wat draaie op gzip kompressie as die kliënt ondersteun dit (asook die gebruik van uitset buffer).

Dit werk regtig.

Probeer jouself beperk tot presies een JS en een CSS-lêer. Kombineer hulle, indien nodig. Ek doen dieselfde truuk met CSS-lêers te (geen minification natuurlik).

Die voordeel van hierdie oplossing is dit net staatmaak op mod_rewrite word aangeskakel. Geen ander uitbreiding is nodig (ob_gzhandler is 'n standaard deel van PHP). Plus 'n script is nodig om die lêers te kombineer (tensy jy dit doen as deel van 'n bou-proses, maar ek vind dit 'n bietjie meer vervelige).

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top