begin process at 2012 05 27 22:24:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > COMPRESSER (MINIMISER) UN FICHIER CSS

COMPRESSER (MINIMISER) UN FICHIER CSS


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :css, réduire, minimiser, alléger, style Niveau :Débutant Date de création :20/08/2010 Date de mise à jour :23/08/2010 10:28:47 Vu / téléchargé :2 732 / 112

Auteur : shevabam

Ecrire un message privé
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

 Description

Cette classe vous permet de minimiser le contenu d'un fichier CSS afin de réduire la taille de vos fichiers.

Source

  • <?php
  • /**
  • * CSSSkrinker class
  • *
  • * Compress your css files
  • *
  • * @author ShevAbam
  • * @version 1.0 - 22 Sept 2009
  • */
  • class CSSShrinker
  • {
  • private $_file_original;
  • private $_file_minimized;
  • private $_file_content_original;
  • private $_file_content_shrink;
  • private $_config = array(
  • 'suffix' => '.min',
  • 'comments' => true, // remove /* */ comments
  • 'fontweight' => true, // font-weight: bold ==> font-weight: 700
  • 'zerodotvalues' => true, // 0.2 ==> .2
  • 'zerounits' => true, // 0px ==> 0
  • 'quotes' => true, // background-url: url('test.png') ==> background-url: url(test.png)
  • 'hex' => true // #ffffff ==> #fff
  • );
  • /**
  • * Constructor
  • *
  • * @access public
  • * @param string $file_original
  • * @param array $config
  • * @return void
  • */
  • public function __construct($file_original, $config = array())
  • {
  • $this->_setConfig($config);
  • if (empty($file_original))
  • throw new Exception('CSSShrinker::__construct - First parameter must be filled');
  • else
  • $this->_file_original = $file_original;
  • // Generate minimized filename
  • $this->_file_minimized = $this->_generateMinimizedFileName();
  • // Run compression
  • $this->_shrinkFile();
  • }
  • /**
  • * Sets configuration
  • *
  • * @access private
  • * @param array $array Configuration array
  • * @return void
  • */
  • private function _setConfig($array)
  • {
  • if (!empty($array))
  • $this->_config = array_merge($this->_config, $array);
  • }
  • /**
  • * Generate minimized filename
  • *
  • * @access private
  • * @return string
  • */
  • private function _generateMinimizedFileName()
  • {
  • $extAndDot = strrchr($this->_file_original, '.');
  • return substr($this->_file_original, 0, -strlen($extAndDot)).$this->_config['suffix'].$extAndDot;
  • }
  • /**
  • * Read file
  • *
  • * @access private
  • * @param string $file
  • * @return string
  • */
  • private function _readFile($file)
  • {
  • if (!file_exists($file) || filesize($file) == 0)
  • throw new Exception('CSSShrinker::_readFile - $file doesn\'t exists');
  • else
  • return file_get_contents($file);
  • }
  • /**
  • * Write into minimized file
  • *
  • * @access private
  • * @return bool
  • */
  • private function _writeFile()
  • {
  • if (!empty($this->_file_content_shrink))
  • {
  • $fput = file_put_contents($this->_file_minimized, $this->_file_content_shrink);
  • if (!$fput)
  • throw new Exception('CSSShrinker::_writeFile - file_put_contents error');
  • else
  • return true;
  • }
  • }
  • /**
  • * Compress file
  • *
  • * @access private
  • * @return bool
  • */
  • private function _shrinkFile()
  • {
  • // If minimized file already exists or if original file is newer than the minimized
  • if (!file_exists($this->_file_minimized) || filemtime($this->_file_minimized) < filemtime($this->_file_original))
  • {
  • $this->_file_content_original = $this->_readFile($this->_file_original);
  • $this->_shrinkString();
  • return $this->_writeFile() ? true : false;
  • }
  • else
  • return false;
  • }
  • /**
  • * Removes comments
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_comments($str)
  • {
  • return preg_replace('#/\*.*?\*/#s', '', $str);
  • }
  • /**
  • * Sets font-weight
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_fontWeight($str)
  • {
  • $one = array('lighter' , 'normal' , 'bold' , 'bolder' );
  • $two = array('100' , '400' , '700' , '900' );
  • return str_replace($one, $two, $str);
  • }
  • /**
  • * Removes unnecessary zeros : 0.2 ==> .2
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_zerodotValues($str)
  • {
  • return trim(eregi_replace('([^0-9])0\.([0-9]+)em', '\\1.\\2em', ' '.$str));
  • }
  • /**
  • * Removes unnecessary units : 0px ==> 0
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_zeroUnits($str)
  • {
  • return trim(eregi_replace('([^0-9])0(px|em|\%)', '\\10', ' '.$str));
  • }
  • /**
  • * Removes the quotes before and after the parentheses
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_quotes($str)
  • {
  • $one = array('("' , '(\'' , '")' , '\')' );
  • $two = array('(' , '(' , ')' , ')' );
  • return str_replace($one, $two, $str);
  • }
  • /**
  • * Changes the color hex : #ffffff ==> #fff
  • *
  • * @access private
  • * @param string $str
  • * @return string
  • */
  • private function _strip_hexColors($str)
  • {
  • return preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i', '$1#$2$3$4$5', $str);
  • }
  • /**
  • * Main execution
  • *
  • * @access private
  • * @param none
  • * @return void
  • */
  • private function _shrinkString()
  • {
  • $content = $this->_file_content_original;
  • $content = preg_replace('#\s+#', ' ', $content); // Removes spaces
  • $content = str_replace('; ' , ';' , $content);
  • $content = str_replace(': ' , ':' , $content);
  • $content = str_replace(' {' , '{' , $content);
  • $content = str_replace('{ ' , '{' , $content);
  • $content = str_replace(', ' , ',' , $content);
  • $content = str_replace('} ' , '}' , $content);
  • $content = str_replace(';}' , '}' , $content);
  • $content = str_replace(array("\n", "\r", "\t"), '', $content);
  • if ($this->_config['comments'])
  • $content = $this->_strip_comments($content);
  • if ($this->_config['fontweight'])
  • $content = $this->_strip_fontWeight($content);
  • if ($this->_config['zerodotvalues'])
  • $content = $this->_strip_zerodotValues($content);
  • if ($this->_config['zerounits'])
  • $content = $this->_strip_zeroUnits($content);
  • if ($this->_config['quotes'])
  • $content = $this->_strip_quotes($content);
  • if ($this->_config['hex'])
  • $content = $this->_strip_hexColors($content);
  • $this->_file_content_shrink = trim($content);
  • }
  • /**
  • * Returns the name of the minimized file
  • *
  • * @access public
  • * @param none
  • * @return string
  • */
  • public function getMinimizedFilename()
  • {
  • return $this->_file_minimized;
  • }
  • }
  • // -- Example
  • $oCSSShrinker = new CSSShrinker('style_original.css');
  • echo $oCSSShrinker->getMinimizedFilename();
  • ?>
<?php

/**
 * CSSSkrinker class
 * 
 * Compress your css files
 *
 * @author ShevAbam
 * @version 1.0 - 22 Sept 2009
 */
class CSSShrinker
{
    private $_file_original;
    private $_file_minimized;
    private $_file_content_original;
    private $_file_content_shrink;
    
    private $_config = array(
        'suffix'        => '.min', 
        'comments'      => true,    // remove /* */ comments
        'fontweight'    => true,    // font-weight: bold ==> font-weight: 700
        'zerodotvalues' => true,    // 0.2 ==> .2
        'zerounits'     => true,    // 0px ==> 0
        'quotes'        => true,    // background-url: url('test.png') ==> background-url: url(test.png)
        'hex'           => true     // #ffffff ==> #fff
    );
    
    
    
    /**
     * Constructor
     * 
     * @access public
     * @param   string  $file_original
     * @param   array   $config
     * @return void
     */
    public function __construct($file_original, $config = array())
    {
        $this->_setConfig($config);
        
        if (empty($file_original))
            throw new Exception('CSSShrinker::__construct - First parameter must be filled');
        else
            $this->_file_original = $file_original;
        
        
        // Generate minimized filename
        $this->_file_minimized = $this->_generateMinimizedFileName();
        
        // Run compression
        $this->_shrinkFile();
    }
    
    
    
    /**
     * Sets configuration
     * 
     * @access   private
     * @param    array    $array  Configuration array
     * @return   void
     */
    private function _setConfig($array)
    {
        if (!empty($array))
            $this->_config = array_merge($this->_config, $array);
    }
    
    
    
    /**
     * Generate minimized filename
     * 
     * @access   private
     * @return   string
     */
    private function _generateMinimizedFileName()
    {
        $extAndDot = strrchr($this->_file_original, '.');
        
        return substr($this->_file_original, 0, -strlen($extAndDot)).$this->_config['suffix'].$extAndDot;
    }
    
    
    /**
     * Read file
     * 
     * @access   private
     * @param    string    $file
     * @return   string
     */
    private function _readFile($file)
    {
        if (!file_exists($file) || filesize($file) == 0)
            throw new Exception('CSSShrinker::_readFile - $file doesn\'t exists');
        else
            return file_get_contents($file);
    }
    
    /**
     * Write into minimized file
     * 
     * @access   private
     * @return   bool
     */
    private function _writeFile()
    {
        if (!empty($this->_file_content_shrink))
        {
            $fput = file_put_contents($this->_file_minimized, $this->_file_content_shrink);
            
            if (!$fput)
                throw new Exception('CSSShrinker::_writeFile - file_put_contents error');
            else
                return true;
        }
    }
    
    
    /**
     * Compress file
     * 
     * @access    private
     * @return    bool
     */
    private function _shrinkFile()
    {
        // If minimized file already exists or if original file is newer than the minimized
        if (!file_exists($this->_file_minimized) || filemtime($this->_file_minimized) < filemtime($this->_file_original))
        {
            $this->_file_content_original = $this->_readFile($this->_file_original);
            
            $this->_shrinkString();
            
            return $this->_writeFile() ? true : false;
        }
        else
            return false;
    }
    
    
    
    
    /**
     * Removes comments
     * 
     * @access   private
     * @param    string    $str
     * @return   string
     */
    private function _strip_comments($str)
    {
        return preg_replace('#/\*.*?\*/#s', '', $str);
    }
    
    
    /**
     * Sets font-weight
     * 
     * @access   private
     * @param    string    $str
     * @return   string
     */
    private function _strip_fontWeight($str)
    {
        $one = array('lighter' , 'normal' , 'bold' , 'bolder' );
        $two = array('100'     , '400'    , '700'  , '900'    );
        
        return str_replace($one, $two, $str);
    }
    
    
    /**
     * Removes unnecessary zeros : 0.2 ==> .2
     * 
     * @access   private
     * @param    string    $str
     * @return   string
     */
    private function _strip_zerodotValues($str)
    {
        return trim(eregi_replace('([^0-9])0\.([0-9]+)em', '\\1.\\2em', ' '.$str));
    }
    
    
    /**
     * Removes unnecessary units : 0px ==> 0
     * 
     * @access   private
     * @param    string    $str
     * @return   string
     */
    private function _strip_zeroUnits($str)
    {
        return trim(eregi_replace('([^0-9])0(px|em|\%)', '\\10', ' '.$str));
    }
    
    
    /**
     * Removes the quotes before and after the parentheses
     * 
     * @access   private
     * @param    string    $str
     * @return   string
     */
    private function _strip_quotes($str)
    {
        $one = array('("' , '(\'' , '")' , '\')' );
        $two = array('('  , '('   , ')'  , ')'   );
        
        return str_replace($one, $two, $str);
    }
    
    
    /**
     * Changes the color hex : #ffffff ==> #fff
     * 
     * @access    private
     * @param    string   $str
     * @return    string
     */
    private function _strip_hexColors($str)
    {
        return preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i', '$1#$2$3$4$5', $str);
    }
    
    
    
    /**
     * Main execution
     * 
     * @access    private
     * @param    none
     * @return    void
     */
    private function _shrinkString()
    {
        $content = $this->_file_content_original;
        
        $content = preg_replace('#\s+#', ' ', $content);    // Removes spaces
        
        $content = str_replace('; ' , ';' , $content);
        $content = str_replace(': ' , ':' , $content);
        $content = str_replace(' {' , '{' , $content);
        $content = str_replace('{ ' , '{' , $content);
        $content = str_replace(', ' , ',' , $content);
        $content = str_replace('} ' , '}' , $content);
        $content = str_replace(';}' , '}' , $content);
        
        $content = str_replace(array("\n", "\r", "\t"), '', $content);
        
        
        if ($this->_config['comments'])
            $content = $this->_strip_comments($content);
        
        if ($this->_config['fontweight'])
            $content = $this->_strip_fontWeight($content);
        
        if ($this->_config['zerodotvalues'])
            $content = $this->_strip_zerodotValues($content);
        
        if ($this->_config['zerounits'])
            $content = $this->_strip_zeroUnits($content);
        
        if ($this->_config['quotes'])
            $content = $this->_strip_quotes($content);
        
        if ($this->_config['hex'])
            $content = $this->_strip_hexColors($content);
        
        
        $this->_file_content_shrink = trim($content);
    }
    
    
    /**
     * Returns the name of the minimized file
     * 
     * @access   public
     * @param    none
     * @return   string
     */
    public function getMinimizedFilename()
    {
        return $this->_file_minimized;
    }
}



// -- Example
$oCSSShrinker = new CSSShrinker('style_original.css');

echo $oCSSShrinker->getMinimizedFilename();
?>

 Conclusion

Exemple complet dans le ZIP ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

23 août 2010 10:28:48 :
23-10-2010 : ajout d'un ZIP contenant un exemple d'utilisation complet

 Sources du même auteur

GESTION FTP (CLASSE)
MANIPULATION DES DONNÉES IPTC

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
Source avec Zip Source avec une capture CSS-GENERATOR par inwebo
Source avec Zip Source avec une capture ORGANIGRAMME PHP DYNAMIQUE par megatom
Source avec Zip Source avec une capture GERER STYLE SITE par ben05

Commentaires et avis

Commentaire de fenoril le 20/08/2010 23:08:30 10/10

j'ai pu m'en servir directement, sans bug quelconque et le résultat fonctionne aussi bien que l'original.

Le code est commenté, lisible, merci beaucoup !

Commentaire de twisteurwin le 21/08/2010 11:22:12

niquel la class qui peut se décliner pour minimiser le js :)

Commentaire de Azura83 le 22/08/2010 15:21:32

Une source intéressante, merci ;)

Commentaire de qisbug le 23/08/2010 08:29:27

Bonjour, bonne idée ce code.

Ca y est, j'ai réussi à récupérer le fichier, je l'ai nommé css.php

Mais qu'est-ce que j'en fais après ? comment s'en servir ?

Merci

Commentaire de shevabam le 23/08/2010 10:29:59

Merci à vous ;)

@qisbug : j'ai rajouté un zip contenant un exemple complet !

Commentaire de kirk57 le 23/08/2010 10:33:05 10/10

Salut,

Très bonne idée que cette source.
Je n'ai pas encore testé mais après l'avoir parcouru, je n'ai vu aucuns problèmes donc ça devrait fonctionner correctement.

@qisbug => je pense que l'idée principale est de minimiser les fichiers css sur le serveur en production. En local, tu peux prendre tes aises mais en production c'est nécessaire. Donc il ne faut pas l'utiliser sur la machine de développement mais seulement après avoir transféré les fichiers sur la production.

@shevabam => effectivement, on pourrait également étendre cette classe, ou plutôt faire une classe mère qui reprends le code fonctionnel et créer des classes filles pour les différents type de fichiers (css, js, voire html) avec leurs paramètres distincts.

Je pense que je vais utiliser/améliorer cette classe pour l'intégrer à mon projet de framework PHP.

Continue comme ça :)

Commentaire de kirk57 le 23/08/2010 10:38:55

@qisbug => autant pour moi, je n'avais pas vu que la classe rajoute ".min" avant l'extension du fichier, donc on peut l'utiliser en développement également vu que l'original est préservée.

Commentaire de qisbug le 23/08/2010 11:43:28

Désolée, mais je n'ai toujours pas compris ! je sais ce qu'est un fichier css compressé (minimisé)
mais je ne comprends pas ce que veut dire "utiliser cette classe". Je l'envoie par FTP dans mon dossier "styles" ou quoi ??

Elle a un nom cette classe ? Et ça marche comment ?  
Désolée mais il me manque un mode d'emploi (pas un exemple) du genre
- vous faites votre fichier Css
- vous l'envoyez par FTP sur le site en production, dans le dossier "styles" par exemple
- vous téléchargez la classe que je vous donne (et vous la nommez "comme ça"
- et vous l'envoyez par FTP ... je ne sais où ...

Tout le monde n'est pas informaticien ici. Pour les béotiens comme moi il faut un "pas à pas"
J'ai déjà eu ce problème avec Codes-Sources, avec un fichier php pour lequel personne n'a su me dire ce qu'il fallait en faire !
Merci de tenir compte des débutants comme moi.

Commentaire de kirk57 le 23/08/2010 12:47:07

@qisbug => L'auteur a rajouté un fichier exemple qui contient tout ce que tu as besoin.
Pour le fait que tu ne soit pas informaticien, je ne penses pas que ce soit la bonne approche que de s'attaquer à un langage de programmation quelconque sans en apprendre les bases. Des livres existent et des sites aussi pour apprendre les bases, comme les inclusions de fichiers par exemple.
Ce n'est pas une critique mais un conseil car je remarque que beaucoup de personnes font la même remarque que toi sur diverses sources.
Par exemple, ça ne me viendrais pas à l'esprit de demander comment fonctionne le coeur d'un processeur en ne connaissant strictement rien à l'électronique. Je ferais perdre leur temps à ceux qui me renseigneront car ils vont devoir trouver une manière d'expliquer des choses compliquées à un néophyte qui n'aura pas les notions nécessaires à la bonne compréhension.
J'ai débuté également un jour et je comprends ta frustration mais ça ne tombera pas toujours tout cuit dans ton bec, il faut que tu y mettes du tien.
Renseignes toi, intéresses toi, apprends par toi même ou fait toi aider via des forums dédié à l'apprentissage des langages informatique.
J'espère ne pas avoir été trop dur avec toi.

Commentaire de qisbug le 23/08/2010 13:47:53

Trop dur ? Non ça m'amuse ! Tu es sans doute jeune, moi j'ai bientôt 69 ans. L'âge n'excuse rien, il explique un peu.

"Renseignes toi, intéresses toi, apprends par toi même ou fait toi aider via des forums dédié à l'apprentissage des langages informatique" je ne fais que ça et je croyais que ce forum servait à ça, mais si tu estimes que tu perds ton temps ... ne réponds pas !

Donc, reprenons ... quand même.

1) j'ai compris que le fichier s'appelle  CSSSkrinker class.php, je ne sais toujours pas quoi en faire. J'ai essayé de le mettre, par FTP, dans le même dossier que habillage.css  (car je n'ai pas de fichier style.css)

2) Dans mon fichier sommaire.html j'ai mis ceci :
<?php
require_once('CSSSkrinker.class.php');
$oCSSShrinker = new CSSShrinker('style.css');
?>
avant <!DOCTYPE ..... Dois-je en faire autant avec article.html, rubrique.html, breve.html, etc ?

Fallait peut-être emplacer style.css par habillage.css ??

3) Entre <head> et </head> j'ai mis ceci :
<link href="<?php echo $oCSSShrinker->getMinimizedFilename(); ?>" rel="stylesheet" type="text/css" />
Dois-je en faire autant avec article.html, rubrique.html, breve.html, etc ?

Et pour l'instant, en local, je n'ouvre plus rien du tout.
Donc il y a quelque chose qui me manque.
Merci à ceux qui prendront le temps de me répondre.
C'est en expliquant aux autres qu'on progresse soi-même.

Mais si nul n'a le temps, tant pis. Je trouverai bien un jour.
Dommage seulement pour la personne qui a fait cet utilitaire ... dont je ne pourrai pas me servir.

Cordialement
Qis

Commentaire de kirk57 le 23/08/2010 15:32:41

@qisbug => effectivement, l'âge n'excuse rien. L'expérience due à votre âge devrait vous faire comprendre qu'il faut une base minimum pour comprendre certaines choses.
Maintenant, je vous tire mon chapeau car je n'aurais jamais pensé que l'informatique et à fortiori la programmation pourrait intéresser quelqu'un de votre âge. Mais comme on dit, il n'y a pas d'âge pour apprendre.
Quand au fait de perdre son temps, j'ai dû mal m'exprimer et je m'en excuse.
Bref, vous y êtes presque arrivé !
Là où ça coince c'est au niveau du chemin de l'inclusion de la classe.
Vous avez 2 possibilités, soit vous déplacez cette classe à la racine de votre site et vous ne changez rien à votre code, soit vous mettez le chemin relatif complet vers cette classe.
Effectivement, il faut que vous changiez aussi le nom du fichier CSS cible car style.css c'est pour l'exemple.
Par contre, j'ai remarqué que vous utilisiez des fichier ".html" pour coder du PHP? Vos fichiers devraient avoir l'extension ".php" sinon il ne sont pas reconnu par votre serveur comme étant des scripts à exécuter.
De plus, une bonne manière de coder est de séparer le code commun à toutes les pages du site dans des fichiers séparés et de les inclure si besoin est.
Par exemple, je suppose que toutes vos pages ont le même en-tête et le même pied de page, donc vous devriez avoir 2 fichiers "_header.php" et "_footer.php".
Il se peut que vous ayez également un menu sur chacune de vos pages, et hop un fichier "_menu.php".
Ensuite, vous les incluez à l'intérieur de vos pages (articles.php, rubrique.php, etc), au bon endroit.
Ceci est plus facile à entretenir car si vous avez une erreur dans votre en-tête par exemple, vous n'avez qu'un seul fichier à modifier.
Voici un lien qui permettra de comprendre un peu tout cela.
http://www.siteduzero.com/tutoriel-3-14668-concevez-votre-site-web-avec-php-et-mysql.html#part_14667
J'espère vous avoir un peu aidé.

Commentaire de qisbug le 23/08/2010 18:11:57

On va finir par se comprendre !

1) la classe CSSSkrinker class.php est sans doute réservée aux sites simples qui fonctionnent en php . Il faut donc le dire.
2) moi j'ai un site (des sites, car j'adore la programmation à laquelle je me suis mise il y a 7 ans, sans aucune connaissance de base, comme quoi on peut apprendre !), j'ai donc des sites en .html, avec des inclusions en .html aussi. C'est donc le même principe qu'avec les php. Ces inclusions concernent le head, le footer, le corps, la navigation, etc.
3) j'ai bien une séparation entre les pages du site et les fichiers css. Mais où ça se complique, c'est que j'ai trois fichiers css : habillage.css, impression.css et perso.css - donc je me demande comment faire pour utiliser CSSSkrinker class.php . Peut-être avec CSSSkrinker classhabillage.php, CSSSkrinker classimpression.php, CSSSkrinker classperso.php. Faut voir
4)Vous m'avez dit de mettre CSSSkrinker class.php à la racine. OK, c'est bon, c'est la seule chose qui me manquait maintenant.

Il me reste maintenant à y passer le temps nécessaire pour faire des essais.

Donc, en résumé, ce qui me manquait :
1) le nom du fichier. Maintenant je sais : CSSSkrinker class.php
2) le dossier où le mettre . Maintenant je sais : à la racine
2) les indications à mettre dans les pages : je crois savoir (voir un message précédent): avant !DOCTYPE pour une partie et entre <head> et </head> pour une autre partie.

Seule question de fond, qui demeure : le fichier CSSSkrinker class.php est-il compatible avec un site en html (et pas en php) ? Reste à voir aussi s'il n'est pas possible de compresser manuellement un fichier css en supprimant les espaces inutiles, par exemple avec un logiciel du type PSPAD ? Auquel cas on n'a plus besoin de CSSSkrinker class.php quand on a plusieurs fichiers css comme moi.

Merci à shevabam, merci à vous. J'ai au moins appris qu'il est important de compresser les fichiers CSS.

Et, au revoir ! Je consulte Codes-Sources toutes les semaines pour y grappiller ce qui peut m'intéresser.

Commentaire de qisbug le 23/08/2010 18:15:32

Dernière chose
Je viens de comprendre que Codes-Sources ne concerne que le PHP ...
Désolée, je n'y reviendrai pas !

Commentaire de cirec le 24/08/2010 08:18:01 administrateur CS

@qisbug:
"Je viens de comprendre que Codes-Sources ne concerne que le PHP ...
Désolée, je n'y reviendrai pas !"

non non c'est pas vrai .. CodeS-Sources concerne plus de 21 langages différents ;)

En haut de toutes les pages de CS, dans la bande noir, on y trouve la liste ;)

Commentaire de kertimanoff le 24/08/2010 10:19:29

Moi je ne suis actuellement pas d'accord avec l'interrait de cette source. ok ça allége de quelque misérable kilo octet un fichier css en échange de faire des opérations php qui je trouve sont plus couteuses que transférer un fichier css a peine plus gros, d'autant pluss qu'allégé le fichier css n'a d'interrait que pour la quantité de donné à transférer au client (3000 ko au lieu de 3100 ko de donné downloadé ?)
ou bien d'aléger les ressources du client lorsque sont navigateur interpréte le style de la page... c'est un peu tiré par les cheuveu non?

d'autant plus qu'aujourd'hui l'optimisation, c'est justement de délégué un maximum de taf au client (pas trop quand meme évidément) et en faire le moins possible (nous, le serveur)
mieux vaut que 1000 personne fasse mille fois une opération, plutôt que le serveur seul les fasse pour chacun right ?

donc je ne demande qu'a être éclairci sur ce sujet :)
cordialemetn

Commentaire de legral le 24/08/2010 12:55:48

Réaction du commentaire de Kertimanoff
Il est vrai qu'allégé le serveur aux clients souvent inexploité car surpuissant pour leurs usages est préférable.
Cependant quand on aime bien faire les choses compresser fait partie de cette efficacité. Cependant elle va au détriment de l'esprit open source pour celui qui veut faire son auto-formation en apprenant le fonctionnement par lecture du code.
-"ça allège de quelque misérable kilo octet":
oui mais tous le monde n'a pas le haut débit. Et dans cette société de profusion un peu d'optimisation ne fait pas de mal.
- "mieux vaut que 1000 personne fasse mille fois une opération, plutôt que le serveur seul les fasse pour chacun right"
oui sauf que le serveur ne le fait qu'une fois et pour les librairies personnelles (js) cela devient vite rentable. pourquoi demander à tous les clients de faire à chaque consultation ce que le serveur peut faire une fois pour toute?

Concernant la class, j'en cherchais une justement pour compresser les lib js. J'attends avec impatience cette addons.
Merci à l'auteur pour la contrib

Commentaire de twisteurwin le 24/08/2010 13:15:43

Bonjour à tous :)

kertimanoff > l'intérêt c'est l'optimisation ! au contraire, minimiser "en production" à une date N puisque ca ne sera réalisée qu'une seule fois par version up. Je suis d'accord sur le fait que l"opération peut être faite en local, avec Yslow (module FF par ex), c'est sûr, mais l'idée de minimiser s'adapte aussi au js, code source, img etc je pense que tu le sais déjà.
Sans compter qu'en local tu dois encore classer les fichiers css normaux et les minimisés a part (par version) et là on parle du css mais y a le js etc...

Donc l'idée d'avoir une méga classe qui te fait toutes ses opérations automatisées une seule fois en production nous y sommes gain de temps, d'énergie, de ressources pour le serveur et ses jours futurs puisque moins sollicité

Pour des portails, sites de blogs l'intérêt de la source tu l'a vois rapidement...

Voilà ca n'engage que moi ciao




Commentaire de kertimanoff le 24/08/2010 18:47:47

Je vous remercie pour ces explication, j'avais pas compris que l'opération été faite une fois pour toute. Je conçois à présent l'utilité, mais
faire ce genre d'optimisation, c'est vraiment lorsqu'on c'est cassé les fesses a produire des pages de taille trés faible (pour nos amis 56k), je reste tout de même a penser que c'est un peu tiré par les cheveux, mais bon je respect parfaitement.

aprés voila je suis pas un expert en php, mais j'ai regardé le code et j'ai vu cela:
$content = str_replace('; ' , ';' , $content);
$content = str_replace(': ' , ':' , $content);
$content = str_replace(' {' , '{' , $content);
$content = str_replace('{ ' , '{' , $content);
$content = str_replace(', ' , ',' , $content);
$content = str_replace('} ' , '}' , $content);

donc la j'aimerais qu'on explique pourquoi shevabam n'a pas tout simplement écrit :
$content = str_replace(' ' , '' , $content);
car dans un fichier CSS il est syntaxiquement possible de n'avoir aucun espace, donc tous ces str_replace me semble trés absurde.

Commentaire de twisteurwin le 24/08/2010 19:06:06

Bien vu kertimanoff il faudrait utiliser les regex pour celà et virer les espaces

Commentaire de kertimanoff le 24/08/2010 19:17:30

merci, en l'ocurence le regex est deja (mal) utilisé:
il faut remplacer ça:
$content = preg_replace('#\s+#', ' ', $content); // Removes spaces
par:
$content = preg_replace('#\s#', '', $content);

et là, la batterie de str_replace n'a plus aucune utilité

Commentaire de kohntark le 25/08/2010 10:15:00

Salut,


Je n'ai que parcouru (donc je peux dire des bêtises dans ce qui suit)

Il y a sans doute plusieurs bugs dans ta classe.
Par exemple que se passe t-il avec cette propriété :
color : rgb(100%, 64%, 0%);
Le '%' du '0%' va être supprimé, ce qui n'est pas valide.

Que se passe t-il si je renseigne $file_original mais que ce n'est pas un fichier valide ?
Que se passe t-il si j'ai une classe nommée .machin0em{...} ?
...

"return trim(eregi_replace('([^0-9])0(px|em|\%)', '\\10', ' '.$str));"
eregi_replace() est dépréciée et génère une alerte, utilise preg_replace() comme tu le fait ailleurs

Un truc comme ça peut être :
preg_replace('`[^\d.]0(px|em|%)`i', '0', $str);


Puisque tu cherches 'la petite bête' :) en tentant de gagner quelques octets par ci par là :
- tu devrais prendre en charge les différentes notations de couleurs et retenir celle qui prends le moins de place :
par exemple :
rgb(254,163,0) => #FEA300
#FEA300        => red

Valider automatiquement le fichier CSS avant et après son traitement serait un plus
Eventuellement parser une page HTML à la recherche de styles intégrés et leurs appliquer la même "punition"


Cordialement,

KOhntark-

Commentaire de jparia le 30/08/2010 13:09:27

Merci pour cette classe,

pour info, j'utilise la fonction JavaScript toute faite du site http://fmarcia.info/jsmin/test.html

http://fmarcia.info/jsmin/fulljsmin.js

qui permet de compresser sur 3 niveaux (minimum, conservateur et agressif) un code CSS ou JS

Commentaire de marcelolipi le 31/01/2011 10:57:14

@->kohntark  
j'aimerais s-t-p que t'apportes tes propositions de modification au lieu de juste critiquer .
Bref les critiques se doivent d'etre constructives sur site.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

A propos des style CSS [ par adess00 ] SalutBon voila j ai creer un style CSS et je voudrai savoir sai je doit remettre&lt;link href="theme\style.css" rel="stylesheet" type="text/css"/&gt; Probleme de css [ par alex21 ] &nbsp;&nbsp;&nbsp;Bonjour,G un petit probleme avec l'utilisation des feuilles de style. Mon site comporte une feuille de style qui definit les couleur CSS et selecteur avec des chiffres [ par Marion0904 ] Bonjour, J'ai fais un joli site en php avec une jolie feuille de style, je cherche maintenant &#224; valider ma CSS.Le probl&#232;me, c'est que je me Style de menu css [ par CCJ ] bonjour voila j'ai un petit probleme je veu que dans mon site dans une cellule d'un tableau il y ait une image et que quand je passe dessus l'image ch Style CSS [ par CCJ ] Bonjour je developpe actuellement un site et j'ai uun bleme voila la partie de ma source css foireuse: td.Menu { background-image: url("Images/MenuNeu CSS paramétrable? [ par LaTatadu91 ] Bonjour a tous, Voila je me pose une petite question pour faire &#233;voluer mon "site" j'aimerais rendre ma feuille de style externe param&#233;trab CSS et format paysage [ par sidf ] salut &#224; tousje commence &#224; m'interesser aux feuilles de style (il est temps)et la ligne suivante ne fonctionne pas (la feuille de style est b problème CSS ! [ par zut69 ] Bonjour,Ca fait plusieurs années que je fais des sites internet, mais j'ai souvent un problème pour bien gérer les styles...Par exemple, aujourd'hui j inclure CSS dans un plug in [ par jimdano ] Bonjour, Je suis en train de créer un plug in, et j'aimerais inclure une feuille de style dans ce plug in, le probleme, c'est que je n'y arrive pas, Feuille de style CSS [ par emma1006 ] Salut !Come d'hab, j'ai un petit probl&#232;me.... mais tr&#232;s &#233;nervant.Sur les pages web que je cr&#233;&#233;, il y a entre autres des table


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales