Overview

Packages

  • Framework
  • None
  • PHP
  • Utilitaire

Classes

  • Chaine
  • Encodage
  • Fichier
  • Pattern
  • Tableau
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: // declare(encoding='UTF-8');
  3: /**
  4:  * Classe fournissant des méthodes statiques de manipulation des fichiers.
  5:  *
  6:  * @category    PHP 5.2
  7:  * @package Utilitaire
  8:  * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
  9:  * @copyright   Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
 10:  * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 11:  * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
 12:  * @version $Id: Fichier.php 352 2011-07-21 10:25:56Z jpm $
 13:  * @link        /doc/framework/
 14:  */
 15: class Fichier {
 16:     /** 
 17:      * Créer et stocke du contenu dans un fichier.
 18:      * 
 19:      * @param string le chemin et le nom du fichier.
 20:      * @param string le contenu à stocker dans le fichier.
 21:      * @return string true en cas de succès sinon false.
 22:      */
 23:     public static function creerFichier($fichier, $contenu) {
 24:         $erreur = null;
 25:         
 26:         // Début de l'écriture du fichier
 27:         if ($resource = fopen($fichier, 'w')) {
 28:             if (!fwrite($resource, $contenu)) {
 29:                 if (!fclose($resource)) {
 30:                     $erreur = "Le fichier '$fichier' n'a pas pu être fermé.";
 31:                 }
 32:             } else {
 33:                 $erreur = "Le contenu texte n'a pas pu être écrit dans le fichier '$fichier'.";
 34:             }
 35:         } else {
 36:             $erreur = "Le fichier '$fichier' n'a pas pu être ouvert.";
 37:         }
 38: 
 39:         // Gestion des erreurs et du retour
 40:         if (is_null($erreur)) {
 41:             return true;
 42:         } else {
 43:             trigger_error($erreur, E_USER_WARNING);
 44:             return false;
 45:         }
 46:     }
 47:     
 48:     /** 
 49:      * Créer et stocke du contenu dans un fichier compressé en Gzip.
 50:      * 
 51:      * @param string le chemin et le nom du fichier.
 52:      * @param string le contenu à stocker dans le fichier.
 53:      * @return string true en cas de succès sinon false.
 54:      */
 55:     public static function creerFichierGzip($fichier, $contenu) {
 56:         $erreur = null;
 57:         
 58:         // Ajout de l'extension gz
 59:         if (substr($fichier, -3) != '.gz') {
 60:             $fichier = $fichier.'.gz';
 61:         }
 62:         
 63:         // Début de l'écriture du fichier compressé
 64:         if ($resource = gzopen($fichier, 'w9')) {
 65:             if (gzwrite($resource, $contenu)) {
 66:                 if (!gzclose($resource)) {
 67:                     $erreur = "Le fichier compressé '$fichier' n'a pas pu être fermé.";
 68:                 }
 69:             } else {
 70:                 $erreur = "Le contenu texte n'a pas pu être écrit dans le fichier compressé '$fichier'.";
 71:             }
 72:         } else {
 73:             $erreur = "Le fichier compressé '$fichier' n'a pas pu être ouvert.";
 74:         }
 75:         
 76:         // Gestion des erreurs et du retour
 77:         if (is_null($erreur)) {
 78:             return true;
 79:         } else {
 80:             trigger_error($erreur, E_USER_WARNING);
 81:             return false;
 82:         }
 83:     }
 84:     
 85:     /**
 86:      * Supprime récursivement un dossier et tout son contenu.
 87:      * 
 88:      * @param string $dossier le chemin vers le dossier à supprimer.
 89:      * @return void
 90:      */
 91:     public static function supprimerDossier($dossier) {
 92:         if (is_dir($dossier)) {
 93:             $objets = scandir($dossier);
 94:             foreach ($objets as $objet) {
 95:                 if ($objet != '.' && $objet != '..') {
 96:                     $chemin = $dossier.'/'.$objet;
 97:                     if (filetype($chemin) == 'dir') {
 98:                         $this->supprimerDossier($chemin);
 99:                     } else {
100:                         unlink($chemin);
101:                     }
102:                 }
103:             }
104:             reset($objets);
105:             rmdir($dossier);
106:         }
107:     }
108:     
109:     /**
110:      * Convertion d'un nombre d'octet en kB, MB, GB.
111:      * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
112:      * @param integer $taille la taille en octet à convertir
113:      * 
114:      * @return string la chaine représentant la taille en octets.
115:      */
116:     public static function convertirTaille($taille) {
117:         $unite = array('B', 'kB', 'MB', 'GB');
118:         return @round($taille / pow(1024, ($i = floor(log($taille,1024)))), 2).' '.$unite[$i];
119:     }
120:     
121:     /**
122:      * Détermine le dossier système temporaire et détecte si nous y avons accès en lecture et écriture.
123:      *
124:      * Inspiré de Zend_File_Transfer_Adapter_Abstract & Zend_Cache
125:      *
126:      * @return string|false le chemine vers le dossier temporaire ou false en cas d'échec.
127:      */
128:     public static function getDossierTmp() {
129:         $dossier_tmp = false;
130:         foreach (array($_ENV, $_SERVER) as $environnement) {
131:             foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $cle) {
132:                 if (isset($environnement[$cle])) {
133:                     if (($cle == 'windir') or ($cle == 'SystemRoot')) {
134:                         $dossier = realpath($environnement[$cle] . '\\temp');
135:                     } else {
136:                         $dossier = realpath($environnement[$cle]);
137:                     }
138:                     if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
139:                         $dossier_tmp = $dossier;
140:                         break 2;
141:                     }
142:                 }
143:             }
144:         }
145:         
146:         if ( ! $dossier_tmp) {
147:             $dossier_televersement_tmp = ini_get('upload_tmp_dir');
148:             if ($dossier_televersement_tmp) {
149:                 $dossier = realpath($dossier_televersement_tmp);
150:                 if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
151:                     $dossier_tmp = $dossier;
152:                 }
153:             }
154:         }
155:         
156:         if ( ! $dossier_tmp) {
157:             if (function_exists('sys_get_temp_dir')) {
158:                 $dossier = sys_get_temp_dir();
159:                 if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
160:                     $dossier_tmp = $dossier;
161:                 }
162:             }
163:         }
164:         
165:         if ( ! $dossier_tmp) {
166:             // Tentative de création d'un fichier temporaire dans le dossier courrant
167:             $fichier_tmp = @tempnam(md5(uniqid(rand(), TRUE)), '');
168:             if ($fichier_tmp) {
169:                 $dossier = @realpath(dirname($fichier_tmp));
170:                 @unlink($fichier_tmp);
171:                 if (self::etreAccessibleEnLectureEtEcriture($dossier)) {
172:                     $dossier_tmp = $dossier;
173:                 }
174:             }
175:         }
176:         
177:         if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('/tmp')) {
178:             $dossier_tmp = '/tmp';
179:         }
180:         
181:         if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('\\temp')) {
182:             $dossier_tmp = '\\temp';
183:         }
184:         
185:         return $dossier_tmp;
186:     }
187:     
188:     /**
189:      * Vérifie si le fichier ou dossier est accessible en lecture et écriture.
190:      *
191:      * @param $ressource chemin vers le dossier ou fichier à tester
192:      * @return boolean true si la ressource est accessible en lecture et écriture.
193:      */
194:     protected static function etreAccessibleEnLectureEtEcriture($ressource){
195:         $accessible = false;
196:         if (is_readable($ressource) && is_writable($ressource)) {
197:             $accessible = true;
198:         }
199:         return $accessible;
200:     }
201: }
202: ?>
API documentation generated by ApiGen 2.8.0