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
Merci !!!!!!!!!!!! ça marche niquel !
Franchement merci à toi
Bonjour,
Avez-vous mis en œuvre cette procédure sur un serveur mutualisé ou bien sur un dédié ?
Merci 🙂
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…
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
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 😉
X-Homemade-Compression: OK
Content-Encoding: gzip
Youpi , merci 🙂
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 ?
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
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