Compression de fichiers css js kml xml txt html

Pour optimiser les temps de chargement des pages, il est possible de compresser le contenu avant de l'envoyer au navigateur. Ce petit script permet de faire cette compression pour tous les fichiers physiques de type texte. 
Pour l'utiliser il faut disposer du rewriting et ajouter à la fin du fichier .htaccess les deux lignes suivantes : 
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*).(css|js|kml|xml|xsl|txt|html)$ /compresse.php?fichier=$1.$2&extension=$2 [L]

Il faut également nommer le script compresse.php (ou changer la règle de rewriting).


Information sur les mises à jour

Dernière mise à jour :

11 Août 2019
modification de la description

14 115  vues
Compatibilité du code
PHP 5, PHP 7 et PHP 8
  code classé dans   SEO - Référencement
  code source classé dans   SEO - Référencement
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
                    
/*------------------------------*/
/*
Titre : Compression de fichiers css js kml xml txt html

Auteur : forty
Website auteur : http://www.toplien.fr/
Date édition : 29 Fev 2008
Date mise a jour : 11 Aout 2019

Rapport de la maj:
- modification de la description
*/
/*------------------------------*/

?>

<?php
//nom du script : compresse.php
//ajouter les lignes suivantes à  la fin du fichier .htaccess pour utiliser le
// rewriting automatique
//RewriteCond %{REQUEST_FILENAME} -f
//RewriteRule
// ^(.*).(css|js|kml|xml|xsl|txt|html)$ /compresse.php?fichier=$1.$2&extension=$
//2
// [L]

//supprime les magic quotes
function noEscape($string) {
$string = is_array($string)? array_map('noEscape', $string): stripslashes(
$string);
return $string;
}
$_GET = array_map('noEscape', $_GET);
}

if (!empty($_GET['fichier']) && @file_exists($_GET['fichier'])) { //si le
// fichier existe
$date_modif = @filemtime(dirname(__FILE__) . '/' . $_GET['fichier']);
if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime(preg_replace(
'/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) < $date_modif)) {
header('Status: 304 Not Modified', false, 304);
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $date_modif) . ' GMT');
exit;
} else {
header('Status: 200 OK', false, 200);
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $date_modif) . ' GMT');
}
if (!isset($_SERVER['SCRIPT_URL'])) {
$uri = explode('?', $_SERVER['REQUEST_URI']);
$_SERVER['SCRIPT_URL'] = $uri[];
}
if ($_SERVER['SCRIPT_URL'] == $_SERVER['SCRIPT_NAME']) { //oblige a passer par
// le rewriting
die('error');
}
$extension = (empty($_GET['extension'])) ? strrchr(basename($_GET['fichier']),
'.') : $_GET['extension'];
if ($extension == 'css') {
header('Content-Type: text/css');
} elseif ($extension == 'js') {
header('Content-Type: application/x-javascript');
} elseif ($extension == 'kml') {
header('Content-Type: application/vnd.google-earth.kml+xml');
} elseif ($extension == 'xml') {
header('Content-Type: text/xml');
} elseif ($extension == 'xsl') {
header('Content-Type: text/xml');
} elseif ($extension == 'txt') {
header('Content-Type: text/plain');
} elseif ($extension == 'html') {
header('Content-Type: text/html');
} else {
die('error');
}
if ((ini_get('zlib.output_compression') != true) && function_exists('ob_gzh' .
'andler')) {
ob_start('ob_gzhandler'); //lance la bufferisation avec compression
} else {
ob_start(); //lance la bufferisation sans compression
header('Content-Length: ' . filesize($_GET['fichier']));
}
readfile($_GET['fichier']);
ob_end_flush(); //envoie les données
} else {
die('error');
}
?>
/*------------------------------*/
/*
Titre : Compression de fichiers css js kml xml txt html

Auteur : forty
Website auteur : http://www.toplien.fr/
Date édition : 29 Fev 2008
Date mise a jour : 11 Aout 2019

Rapport de la maj:
- modification de la description
*/
/*------------------------------*/

?>

<?php
//nom du script : compresse.php
//ajouter les lignes suivantes à  la fin du fichier .htaccess pour utiliser le
// rewriting automatique
//RewriteCond %{REQUEST_FILENAME} -f
//RewriteRule
// ^(.*).(css|js|kml|xml|xsl|txt|html)$ /compresse.php?fichier=$1.$2&extension=$
//2
// [L]

//supprime les magic quotes
function noEscape($string) {
$string = is_array($string)? array_map('noEscape', $string): stripslashes(
$string);
return $string;
}
$_GET = array_map('noEscape', $_GET);
}

if (!empty($_GET['fichier']) && @file_exists($_GET['fichier'])) { //si le
// fichier existe
$date_modif = @filemtime(dirname(__FILE__) . '/' . $_GET['fichier']);
if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime(preg_replace(
'/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) < $date_modif)) {
header('Status: 304 Not Modified', false, 304);
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $date_modif) . ' GMT');
exit;
} else {
header('Status: 200 OK', false, 200);
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $date_modif) . ' GMT');
}
if (!isset($_SERVER['SCRIPT_URL'])) {
$uri = explode('?', $_SERVER['REQUEST_URI']);
$_SERVER['SCRIPT_URL'] = $uri[];
}
if ($_SERVER['SCRIPT_URL'] == $_SERVER['SCRIPT_NAME']) { //oblige a passer par
// le rewriting
die('error');
}
$extension = (empty($_GET['extension'])) ? strrchr(basename($_GET['fichier']),
'.') : $_GET['extension'];
if ($extension == 'css') {
header('Content-Type: text/css');
} elseif ($extension == 'js') {
header('Content-Type: application/x-javascript');
} elseif ($extension == 'kml') {
header('Content-Type: application/vnd.google-earth.kml+xml');
} elseif ($extension == 'xml') {
header('Content-Type: text/xml');
} elseif ($extension == 'xsl') {
header('Content-Type: text/xml');
} elseif ($extension == 'txt') {
header('Content-Type: text/plain');
} elseif ($extension == 'html') {
header('Content-Type: text/html');
} else {
die('error');
}
if ((ini_get('zlib.output_compression') != true) && function_exists('ob_gzh' .
'andler')) {
ob_start('ob_gzhandler'); //lance la bufferisation avec compression
} else {
ob_start(); //lance la bufferisation sans compression
header('Content-Length: ' . filesize($_GET['fichier']));
}
readfile($_GET['fichier']);
ob_end_flush(); //envoie les données
} else {
die('error');
}
?>

      Fonctions du code - Doc officielle PHP

   php.net  
Description
Versions PHP
    array_map
Applique une fonction sur les éléments d'un tableau
PHP 4, 5, 7 et 8
    basename
Retourne le nom de la composante finale d'un chemin
PHP 4, 5, 7 et 8
    die
Alias de la fonction exit
PHP 4, 5, 7 et 8
    dirname
Renvoie le chemin du dossier parent
PHP 4, 5, 7 et 8
    empty
Détermine si une variable est vide
PHP 4, 5, 7 et 8
    exit
Terminer le script en cours avec un code d'état ou un message
PHP 4, 5, 7 et 8
    explode
Scinde une chaîne de caractères en segments
PHP 4, 5, 7 et 8
    filemtime
Lit la date de dernière modification du fichier
PHP 4, 5, 7 et 8
    filesize
Lit la taille d'un fichier
PHP 4, 5, 7 et 8
    file_exists
Vérifie si un fichier ou un dossier existe
PHP 4, 5, 7 et 8
    function_exists
Indique si une fonction est définie
PHP 4, 5, 7 et 8
    get_magic_quotes_gpc
Retourne la configuration actuelle de l'option magic_quotes_gpc
(PHP 4, PHP 5, PHP 7)
    gmdate
Formate une date/heure GMT/TUC
PHP 4, 5, 7 et 8
    header
Envoie un en-tête HTTP brut
PHP 4, 5, 7 et 8
    ini_get
Lit la valeur d'une option de configuration
PHP 4, 5, 7 et 8
    isset
Détermine si une variable est déclarée et est différente de null
PHP 4, 5, 7 et 8
    is_array
Détermine si une variable est un tableau
PHP 4, 5, 7 et 8
    ob_end_flush
none
PHP 4, 5, 7 et 8
    ob_start
Enclenche la temporisation de sortie
PHP 4, 5, 7 et 8
    preg_replace
Rechercher et remplacer par expression rationnelle standard
PHP 4, 5, 7 et 8
    readfile
Affiche un fichier
PHP 4, 5, 7 et 8
    return
Retourne le controle du programme au module appelant
PHP 4, 5, 7 et 8
    stripslashes
Supprime les antislashs d'une chaîne
PHP 4, 5, 7 et 8
    strrchr
Trouve la dernière occurrence d'un caractère dans une chaîne
PHP 4, 5, 7 et 8
    strtotime
Transforme un texte anglais en timestamp
PHP 4, 5, 7 et 8

[3]

  • avatar

    Forty

    23 Fév 2011 à 18:30

    Il faut créer le script compresse.php contenant le code ci-dessus et ajouter dans un fichier .htaccess les deux lignes citées dans le commentaire

  • avatar

    Invité

    23 Fév 2011 à 18:19

    Comment on utilise ce code ?

  • avatar

    Invité

    03 Déc 2009 à 02:03

     Bonjour, on peut également utiliser les modules d'apaches (mod_deflate ou mod_gzip et mod_cache) ce qui sera plus performant.

Minimum 10 mots. Votre commentaire sera visible après validation.


 Autres snippets qui pourraient vous intéresser

Remplacer le BBCode par du HTML avec PHP

Compatibilité : PHP 5, PHP 7, PHP 8

Permet de remplacer les balises BBCode d'une chaine de caractères par leur balises équivalentes HTML.

Génération de tableaux HTML avec PHP

Compatibilité : PHP 5, PHP 7, PHP 8

Cette fonction génère des tableaux HTML. Passez lui en paramètres, l'intitulé des colonnes, votre tableau de données.

* Requêtes exécutées avec Recherche Contextuelle
avatar

Forty

  29 Fév 2008

  SOURCE   Télécharger

Information sur les mises à jour

Dernière mise à jour :

11 Août 2019
modification de la description

14 115 Vues
Compatibilité du code
PHP 5, PHP 7, PHP 8