Activer la compression gzip / deflate sur 1and1 [Astuce]

Ayant un WordPress chez 1and1 j’ai voulu activer la compression de mes pages. Après avoir longuement cherché de partout, j’ai trouvé comment procéder, et ce n’est vraiment pas simple…. En effet, il va falloir faire passer tous nos fichiers (js, css, html, …) par PHP afin qu’ils soient compressés à la volée.

Chemin d’accès complet

Il nous faut le chemin d’accès complet chez 1and1. Pour cela on va mettre un fichier temporaire à la racine de notre site qui se nomme info.php dans lequel on inscrit :

<?php
phpinfo();
?>

On accède à cette page via un navigateur pour avoir toutes les informations liées à PHP. On y cherche la ligne qui correspond à DOCUMENT_ROOT afin de trouver le chemin d’accès complet de notre site ; par exemple /kunden/homepages/25/d3506178849/htdocs/clickandbuilds/WordPress/.

Supprimer le fichier info.php.

Création du prepend file

Maintenant on crée un nouveau fichier à la racine de notre site qui se nomme headers.php dans lequel on met :

<?php
$pathinfo=pathinfo($_ENV['SCRIPT_FILENAME']); 
$extension=$pathinfo['extension']; 
switch ($extension) {
  case 'css':
    $contentType = 'text/css';
    break;
  case 'js':
    $contentType = 'application/x-javascript';
    break;
  case 'xml':
    $contentType = 'text/xml';
    break;
  default:
    $contentType = 'text/html';
    break;
}
header("Content-type: ".$contentType);
// pour vérifier que notre script est bien exécuté
header("X-Homemade-Compression: OK");
?>

Ce fichier va être appelé pour chaque page et va permettre d’envoyer le bon Content-Type.

Fichiers .htaccess et php.ini

Maintenant, cela se complique car il va falloir repérer où se situent toutes les ressources que l’on souhaite compresser. Dans le cas de WordPress, il devrait y avoir :

  • /wp-includes/js/jquery/*
  • /wp-content/themes/votretheme/*

On peut aussi inclure les éventuels répertoires des plugins, et toutes autres ressources.

On se crée un fichier php.ini :

; Server side compression
zlib.output_compression=on
zlib.output_compression_level=9
; tous les fichiers seront parsés par le script headers.php afin d'envoyer le bon Content-Type
auto_prepend_file=/kunden/homepages/25/d3506178849/htdocs/clickandbuilds/WordPress/headers.php

On se crée aussi un fichier .htaccess en y mettant :

AddType x-mapp-php5 .html .htm .css .js .php

Pour que la compression fonctionne sans créer de problème, il va falloir envoyer ces deux fichiers dans chaque répertoire des ressources que l’on souhaite compresser. Par exemple dans /wp-content/themes/votretheme/js/ pour que les fichiers JS du thème soient impactés.

Vous pouvez aussi mettre php.ini à la racine de votre site web, mais sans utiliser le .htaccess de ci-dessus afin d’éviter des problèmes avec l’admin.

On teste

Enfin vous pouvez tester si tout est correct grâce à curl sous Linux :
curl -I -H 'Accept-Encoding: gzip,deflate' --head http://votresite/votreressource.js

Vous devriez voir apparaitre :

X-Homemade-Compression: OK
Content-Encoding: gzip

10 avis sur “Activer la compression gzip / deflate sur 1and1 [Astuce]

  1. Florence

    Bonjour,
    Avez-vous mis en œuvre cette procédure sur un serveur mutualisé ou bien sur un dédié ?
    Merci 🙂

  2. Aymeric Auteur de la publication

    Florence > si ça avait été un dédié, je n’aurais pas eu toutes ces emmerdes et j’aurais pu installer ce que je voulais…

  3. makinero

    J’ai fait tout ce qui est indiqué :

    – le fichier headers.php à la racine du site (wordpress).

    – le php.ini (j’ai bien remplacé le chemin absolu vers headers.php) + .htaccess avec la ligne AddType dans le dossier JS du thème (juste celui-là pour l’instant pour tester)

    J’appelle un fichier JS avec la ligne de commande donnée, je n’ai pas :

    X-Homemade-Compression: OK
    Content-Encoding: gzip

    🙁

    Je suis sur une offre unlimited.

    Merci

  4. Aymeric Auteur de la publication

    makinero > là comme ça c’est dur de vous aider… je l’ai utilisé encore récemment sur un hébergement partagé, et ça a fonctionné.

    Continuez à tester et à débuguer, vous finirez bien par trouver 😉

  5. anne

    Bonjour,

    si je sais comment faire pour mettre le header, je suis désolée, je suis perdue sur le test.

    Comment on teste ? à quel endroite ?

  6. Aymeric Auteur de la publication

    Anne > il faut avoir une machine sous Linux avec une invite de commande….

    Si vous n’en avez pas, alors vous pouvez utiliser le site https://helloacm.com/curl/ en y mettant l’URL d’une ressource que vous voulez tester (dans mon exemple c’était « http://votresite/votreressource.js »).
    Cliquez sur le bouton « Request HTTP Header » et vous devriez alors voir (si ça a marché):
    X-Homemade-Compression: OK
    Content-Encoding: gzip

  7. Gigi

    Hi, I think I am using php 5.6, well the point is to work straight you should add in php.ini:
    zlib.output_compression = 1
    zlib.output_compression_level = 9
    and to .htaccess you should add:
    AddHandler x-mapp-php5.5 .php .html .htm .js .css
    AddType ‘text/css; charset=UTF-8’ css
    it will gzip also the .css files and will work good, of course don’t forget the caching … stuff in .htaccess
    But if you want a more complete solution, I should suggest use of: https://github.com/fhoech/gz.php that will permit gzip and also the creation of a « static gzip files » that will help even more …
    To test you can verify with http://gtmetrix.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*