Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten

    Hansi73

    • Frisch an Board
    • Beiträge: 84
    Hallo,

    da mir auch schon geholfen wurde möchte meine Erfahrungen bezüglich 1und1 und gzip weitergeben. Auf den Servern wird leider kein mod_gzip oder mod_deflate zur Komprimierung der css- oder js-Dateien unterstützt. Die komprimierte Ausgabe des Shops funktioniert aber. Mit einem kleinen Trick werden auch die restelichen Dateien komprimiert:

    1. Eine Datei (z.B. 1und1-gzip.php) im Wurzelverzeichnis erstellen und folgenden Code einfügen:

    Code: PHP  [Auswählen]
    <?php
    // turn off all error reporting
    error_reporting(0);
     
    //check that zlib compression is enabled
    if(!ini_get('zlib.output_compression')){ ini_set('zlib.output_compression', 'On');; }
     
    $allowed = array('css','js','svg','ttf'); //set array of allowed file types to prevent abuse
     
    //check for request variable existence and that file type is allowed
    if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){
        $data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // grab the file contents
     
        $etag = '"'.md5($data).'"'; // generate a file Etag
        header('Etag: '.$etag); // output the Etag in the header
     
        // output the content-type header for each file type
        switch ($_GET['type']) {
            case 'css':
                header ("Content-Type: text/css; charset=UTF-8");
            break;
     
            case 'js':
                header ("Content-Type: text/javascript; charset=UTF-8");
            break;
     
            case 'svg':
                header ("Content-Type: image/svg+xml");
            break;
     
            case 'ttf':
                header ("Content-Type: application/x-font-ttf");
            break;
        }
     
        header('Cache-Control: max-age=604800, must-revalidate'); //output the cache-control header
        $offset = 60 * 60 * 24 * 7;
        $expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; // set the expires header to be 1 hour in the future
        header($expires); // output the expires header
     
        // check the Etag the browser already has for the file and only serve the file if it is different
        if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
            header('HTTP/1.1 304 Not Modified');
            header('Content-Length: 0');
        } else {
            echo $data;
        }
    }
    ?>

    2. In der htaccess zwei Einträge anlegen:

    Code: PHP  [Auswählen]
      ##-- 1und1 gzip mod
     RewriteRule ^(.*\.js) /1und1-gzip.php?type=js&file=$1
      RewriteRule ^(.*\.css) /1und1-gzip.php?type=css&file=$1
      RewriteRule ^(.*\.svg) /1und1-gzip.php?type=svg&file=$1
      RewriteRule ^(.*\.ttf) /1und1-gzip.php?type=ttf&file=$1

    Fertig!

    [EDIT Tomcraft 12.05.2015: Fehler in Code korrigiert.]
    [EDIT Tomcraft 13.05.2015: Code erweitert für SVG & TTF.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=32875.0

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #1 am: 04. Mai 2015, 21:46:45
    @Hansi73

    Finde den Tipp interessant.

    Zitat
    Eine Datei (z.B. 1und1-gzip.php) im Wurzelverzeichnis erstellen und folgenden Code einfügen

    Ist mit dem Wurzelverzeichnis der Root gemeint, da wo also auch die .htaccess liegt?

    Hansi73

    • Frisch an Board
    • Beiträge: 84
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #2 am: 04. Mai 2015, 21:48:34
    Ja, root = Wurzel ;)

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #3 am: 05. Mai 2015, 01:41:36
    Danke für den Tipp, habe diesen soeben bei mir umgesetzt und bin begeistert ;-)

    Beim Google Pagespeed war es davor 63/100 und jetzt 78 / 100, damit ist

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #4 am: 12. Mai 2015, 11:58:34
    Ein kleiner Hinweis

    Das Skript '1und1-gzip.php' von Hansie73 hat einen kleinen Fehler, die Generierung des HTTP-Headers ist nicht korrekt, anstatt 'charset: UTF-8' müsste dort 'charset=UTF-8' stehen.

    Der obige Fehler hat zur Folge, dass wenn man seinen Shop einer CSS-Validierung beim W3C CSS Validation Service unterzieht das Programm folgenden Fehler ausgibt und die CSS-Datei gar nicht validiert.

    Code: XML  [Auswählen]
    Unbekannter Fehler org.w3c.www.http.HttpInvalidValueException: Invalid content type.

    Siehe auch folgende Links:
    Gruss
    Hanspeter

    [EDIT Tomcraft 12.05.2015: Korrektur in Beitrag 1 übernommen.]

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #5 am: 12. Mai 2015, 12:12:50
    Dankeschön für den Hinweis hier an dieser Stelle  :thx:

    Hansi73

    • Frisch an Board
    • Beiträge: 84
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #6 am: 12. Mai 2015, 14:44:08
    Danke! Habe es gemeldet, damit es im ersten Beitrag korrigiert wird.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.161
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #7 am: 12. Mai 2015, 15:13:07
    Erledigt. ;-)

    Grüße

    Torsten

    sixtyseven

    • Fördermitglied
    • Beiträge: 107
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #8 am: 13. Mai 2015, 08:46:37
    ... läuft wie geschmiert, vielen Dank.

    Könnte das nicht jemand noch für Webfonts (speziell meckert google .svg und .ttf als nicht gzipped an) erweitern?

    Und wenn ich das richtig erkenne, wird hier ja gar kein spezieller Shop-Code verwendet. Das bedeutet, dass dieser Tipp vermutlich mit allen anderen bei 1 und 1 gehosteten Seiten auch funktionieren sollte, oder?

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #9 am: 13. Mai 2015, 12:46:09
    [...]
    Könnte das nicht jemand noch für Webfonts (speziell meckert google .svg und .ttf als nicht gzipped an) erweitern?
    [...]

    Du könntest folgendes Skript ausprobieren, habe es nicht getestet.

    Code: PHP  [Auswählen]
    <?php
    // turn off all error reporting
    error_reporting(0);

    //check that zlib compression is enabled
    if(!ini_get('zlib.output_compression')){ ini_set('zlib.output_compression', 'On');; }
     
    $allowed = array('css','js','svg','ttf'); //set array of allowed file types to prevent abuse
     
    //check for request variable existence and that file type is allowed
    if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){
        $data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // grab the file contents
     
        $etag = '"'.md5($data).'"'; // generate a file Etag
        header('Etag: '.$etag); // output the Etag in the header
     
        // output the content-type header for each file type
        switch ($_GET['type']) {
            case 'css':
                header ("Content-Type: text/css; charset=UTF-8");
            break;
     
            case 'js':
                header ("Content-Type: text/javascript; charset=UTF-8");
            break;

            case 'svg':
                header ("Content-Type: image/svg+xml");
            break;

            case 'ttf':
                header ("Content-Type: application/x-font-ttf");
            break;
        }
     
        header('Cache-Control: max-age=604800, must-revalidate'); //output the cache-control header
        $offset = 60 * 60 * 24 * 7;
        $expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; // set the expires header to be 1 hour in the future
        header($expires); // output the expires header
     
        // check the Etag the browser already has for the file and only serve the file if it is different
        if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
            header('HTTP/1.1 304 Not Modified');
            header('Content-Length: 0');
        } else {
            echo $data;
        }
    }
    ?>

    Gruss
    Hanspeter

    [EDIT Tomcraft 13.05.2015: Code in Beitrag 1 übernommen.]

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #10 am: 13. Mai 2015, 16:28:15
    Nachtrag zu meinem letzten Beitrag.

    In die .htaccess muss natürlich nach

    Code: PHP  [Auswählen]
      ##-- 1und1 gzip mod
     RewriteRule ^(.*\.js) /1und1-gzip.php?type=js&file=$1
      RewriteRule ^(.*\.css) /1und1-gzip.php?type=css&file=$

    noch folgendes eingetragen werden

    Code: PHP  [Auswählen]
      RewriteRule ^(.*\.svg) /1und1-gzip.php?type=svg&file=$1
      RewriteRule ^(.*\.ttf) /1und1-gzip.php?type=ttf&file=$1

    Gruss
    Hanspeter

    [EDIT Tomcraft 13.05.2015: Fehler in Code korrigiert.]
    [EDIT Tomcraft 13.05.2015: Code in Beitrag 1 übernommen.]

    sixtyseven

    • Fördermitglied
    • Beiträge: 107
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #11 am: 13. Mai 2015, 16:59:00
    Ich vermute, du meinst :

    Code: PHP  [Auswählen]
    RewriteRule ^(.*\.svg) /1und1-gzip.php?type=svg&file=$1
    RewriteRule ^(.*\.ttf) /1und1-gzip.php?type=ttf&file=$1

    Vielen Dank, werde es morgen direkt probieren.

    [EDIT Tomcraft 13.05.2015: Korrektur in darüber liegenden Beitrag übernommen.]

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #12 am: 13. Mai 2015, 21:41:01
    Hallo sixtyseven

    Sorry, natürlich du hast recht in die '.htaccess' muss dein Code rein.

    Unterdessen habe ich den von mir in Beitrag #9 geposteten in Code der '1und1-gzip.php' lokal getestet und musste leider feststellen das die Komprimierung von SVG-Bildern mit ZLIB bei mir nicht funktionierte, deshalb habe ich den Code nochmal umgeschrieben, siehe nachfolgendes Skript.
    Code: PHP  [Auswählen]
    <?php
    //turn off all error reporting
    error_reporting(0);
     
    $allowed = array('css','js','svg','ttf'); //set array of allowed file types to prevent abuse
     
    //check for request variable existence and that file type is allowed
    if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){
        $data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // grab the file contents
     
        $etag = '"'.md5($data).'"'; // generate a file Etag
        header('Etag: '.$etag); // output the Etag in the header
     
        // output the content-type header for each file type
        switch ($_GET['type']) {
            case 'css':
                header ("Content-Encoding: gzip");        
                header ("Content-Type: text/css; charset=UTF-8");
            break;
     
            case 'js':
                header ("Content-Encoding: gzip");        
                header ("Content-Type: text/javascript; charset=UTF-8");
            break;

            case 'svg':
                header ("Content-Encoding: gzip");
                header ("Content-Type: image/svg+xml");
            break;

            case 'ttf':
                header ("Content-Encoding: gzip");        
                header ("Content-Type: application/x-font-ttf");
            break;
        }
     
        header('Cache-Control: max-age=604800, must-revalidate'); //output the cache-control header
        $offset = 60 * 60 * 24 * 7;
        $expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; // set the expires header to be 1 hour in the future
        header($expires); // output the expires header
     
        // check the Etag the browser already has for the file and only serve the file if it is different
        if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
            header('HTTP/1.1 304 Not Modified');
            header('Content-Length: 0');
        } else {
            echo gzencode($data, 9);
        }
    }
    ?>
     

    Gruss
    Hanspeter

    sixtyseven

    • Fördermitglied
    • Beiträge: 107
    • Geschlecht:
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #13 am: 14. Mai 2015, 15:24:10
    Perfekt, Hanspeter. Läuft ausgezeichnet und alles ist gzipped. Diese Vorgehensweise werde ich auch mal bei meinen anderen (nicht Modified) Projekten probieren, die bei 1 und 1 gehostet sind.

    karsta.de

    • Experte
    • Beiträge: 3.056
    Re: ANLEITUNG: Komprimierung (gzip) bei 1und1 einrichten
    Antwort #14 am: 03. Juni 2015, 14:47:47
    Habe das auch mal eingebaut. Funktioniert soweit gut, nur wenn ich das in der .htaccess aktiviere, werden in meiner Thickbox die Button(.png) nicht mehr angezeigt. Wenn ich den Eintrag

    RewriteRule ^(.*\.css) /1und1-gzip.php?type=css&file=$1

    deaktiviere sind die Button wieder da. Habe überhaupt keine Ahnung woran das liegen könnte. Ist das bei euch auch so oder wird bei euch dann in der Thickbox alles korrekt angezeigt.
    12 Antworten
    11799 Aufrufe
    10. Oktober 2013, 15:44:07 von kaisa
    1 Antworten
    6487 Aufrufe
    14. Februar 2014, 17:51:01 von Georg
    114 Antworten
    90814 Aufrufe
    03. April 2022, 20:42:34 von Tomcraft
    5 Antworten
    760 Aufrufe
    11. März 2023, 19:42:57 von hbauer