systeme-fichiers.php (2744B)
1 <?php 2 3 // NOTE : Cette abstraction a l'air assez innutile à part supprimer... 4 5 class Système_fichiers { 6 public static function créer_dossier($chemin_fs) { 7 $d = dirname($chemin_fs); 8 $r = true; 9 if (!is_dir($d)) $r = self::créer_dossier($d); 10 if (!is_dir($chemin_fs)) return $r && mkdir($chemin_fs); 11 } 12 13 /*public static function créer_fichier($chemin_fs) { 14 // touch($chemin_fs) 15 }*/ 16 17 public static function supprimer($chemin_fs, $récursif) { 18 var_dump($chemin_fs); 19 if (is_link($chemin_fs) || is_file($chemin_fs)) { 20 unlink($chemin_fs); 21 } else if ($récursif && is_dir($chemin_fs)) { 22 $d = dir($chemin_fs); 23 while (false !== ($entrée = $d->read())) { 24 if ($entrée == '.') continue; // TODO : gérer correctement les boucles dans le système de fichiers (liens durs, ...) 25 if ($entrée == '..') continue; 26 self::supprimer($chemin_fs . '/' . $entrée, $récursif); 27 } 28 $d->close(); 29 rmdir($chemin_fs); 30 } else if (is_dir($chemin_fs)) { 31 rmdir($chemin_fs); 32 } 33 } 34 35 public static function lire($chemin_fs) { 36 if (!file_exists($chemin_fs)) return Erreur::lecture("Ne peut lire le fichier " . $chemin_fs); 37 return file_get_contents($chemin_fs); 38 } 39 40 public static function écrire($chemin_fs, $données) { 41 $d = dirname($chemin_fs); 42 if (!is_dir($d) && !self::créer_dossier($d)) { 43 return Erreur::écriture("Impossible d'écrire dans $chemin_fs : le dossier $d n'existe pas"); 44 } 45 return file_put_contents($chemin_fs, $données); 46 } 47 48 public static function liste_fichiers($chemin_fs) { 49 if (!is_dir($chemin_fs)) return false; 50 return scandir($chemin_fs); 51 } 52 53 public static function déplacer($chemin_fs_de, $chemin_fs_vers) { 54 rename($chemin_fs_de, $chemin_fs_vers); 55 } 56 57 public static function déplacer_fichier_téléchargé($chemin_fs_de, $chemin_fs_vers) { 58 return move_uploaded_file($chemin_fs_de, $chemin_fs_vers); 59 } 60 61 public static function envoyer_fichier_directement($chemin_fs) { 62 // TODO : utiliser http://www.php.net/manual/en/function.readfile.php#86244 pour les téléchargements partiels 63 // TODO : utiliser http://www.php.net/manual/en/function.readfile.php#52722 pour les types mimes 64 // TODO : ou bien http://www.php.net/manual/en/function.header.php#48538 pour les types mimes 65 // (ou mieux, l'utiliser au cas où on ne trouve pas dans le fichier d'apache). 66 // TODO : stocker le type mime dans $chemin_fs . '__mime' et utiliser celui-là si possible, sinon les méthodes ci-dessus. 67 // Licence des bouts de code du manuel PHP : CC-Attribution http://php.net/manual/en/about.notes.php 68 header("Content-Type: image/jpg"); 69 return readfile($chemin_fs); 70 } 71 } 72 73 ?>