Subversion Repositories Applications.framework

Rev

Rev 220 | Rev 273 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe fournissant des méthodes statiques de manipulation des fichiers.
 *
 * @category    PHP 5.2
 * @package     Utilitaire
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
 * @version     $Id$
 * @link                /doc/framework/
 */
class Fichier {
        /** 
         * Créer et stocke du contenu dans un fichier.
         * 
         * @param string le chemin et le nom du fichier.
         * @param string le contenu à stocker dans le fichier.
         * @return string true en cas de succès sinon false.
         */
        public static function creerFichier($fichier, $contenu) {
                $erreur = null;
                
                // Début de l'écriture du fichier
                if ($resource = fopen($fichier, 'w')) {
                        if (!fwrite($resource, $contenu)) {
                                if (!fclose($resource)) {
                                        $erreur = "Le fichier '$fichier' n'a pas pu être fermé.";
                                }
                        } else {
                                $erreur = "Le contenu texte n'a pas pu être écrit dans le fichier '$fichier'.";
                        }
                } else {
                        $erreur = "Le fichier '$fichier' n'a pas pu être ouvert.";
                }

                // Gestion des erreurs et du retour
                if (is_null($erreur)) {
                        return true;
                } else {
                        trigger_error($erreur, E_USER_WARNING);
                        return false;
                }
        }
        
        /** 
         * Créer et stocke du contenu dans un fichier compressé en Gzip.
         * 
         * @param string le chemin et le nom du fichier.
         * @param string le contenu à stocker dans le fichier.
         * @return string true en cas de succès sinon false.
         */
        public static function creerFichierGzip($fichier, $contenu) {
                $erreur = null;
                
                // Ajout de l'extension gz
                if (substr($fichier, -3) != '.gz') {
                        $fichier = $fichier.'.gz';
                }
                
                // Début de l'écriture du fichier compressé
                if ($resource = gzopen($fichier, 'w9')) {
                        if (gzwrite($resource, $contenu)) {
                                if (!gzclose($resource)) {
                                        $erreur = "Le fichier compressé '$fichier' n'a pas pu être fermé.";
                                }
                        } else {
                                $erreur = "Le contenu texte n'a pas pu être écrit dans le fichier compressé '$fichier'.";
                        }
                } else {
                        $erreur = "Le fichier compressé '$fichier' n'a pas pu être ouvert.";
                }
                
                // Gestion des erreurs et du retour
                if (is_null($erreur)) {
                        return true;
                } else {
                        trigger_error($erreur, E_USER_WARNING);
                        return false;
                }
        }
        
        /**
         * Supprime récursivement un dossier et tout son contenu.
         * 
         * @param string $dossier le chemin vers le dossier à supprimer.
         * @return void
         */
        public static function supprimerDossier($dossier) {
                if (is_dir($dossier)) {
                        $objets = scandir($dossier);
                        foreach ($objets as $objet) {
                                if ($objet != '.' && $objet != '..') {
                                        $chemin = $dossier.'/'.$objet;
                                        if (filetype($chemin) == 'dir') {
                                                $this->supprimerDossier($chemin);
                                        } else {
                                                unlink($chemin);
                                        }
                                }
                        }
                        reset($objets);
                        rmdir($dossier);
                }
        }
        
        /**
         * Convertion d'un nombre d'octet en kB, MB, GB.
         * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
         * @param integer $taille la taille en octet à convertir
         * 
         * @return string la chaine représentant la taille en octets.
         */
        public static function convertirTaille($taille) {
        $unite = array('B', 'kB', 'MB', 'GB');
        return @round($taille / pow(1024, ($i = floor(log($taille,1024)))), 2).' '.$unite[$i];
        }
}
?>