Le langage PHP dispose de nombreuses fonctions relatives au système de fichiers, permettant de manipuler aisément tout élément d'une arborescence.
Un répertoire peut être ouvert par l'intermédiaire de la fonction opendir() délivrant une ressource à partir de laquelle, il sera possible de lire ou écrire des fichiers.
$repertoire = "repertoire/"; $dossier = opendir($repertoire);
La fonction readdir() permet de lire une entrée d'un dossier, soit le fichier sur lequel est disposé le pointeur de dossier.
<? $repertoire = "un_repertoire"; $id_dossier = opendir($repertoire); while ($fichier = readdir($id_dossier)) { $id_fichier = $repertoire.$fichier; if(is_file($id_fichier)) { echo "<table border="1"><tr><th>Nom</th><td>".$fichier; echo "</td></tr><tr><th>Type</th><td>" .filetype($id_fichier); echo "</td></tr><tr><th>Taille</th><td>" .filesize($id_fichier)." octets"; echo "</td></tr><tr><th>Création</th><td>" .date("d/m/Y H:i:s ", filectime($id_fichier)); echo "</td></tr><tr><th>Modification</th><td>" .date("d/m/Y H:i:s ", filemtime($id_fichier)); echo "</td></tr><tr><th>Dernier accès</th><td>" .date("d/m/Y H:i:s ", fileatime($id_fichier)); echo "</td></tr><tr><th>ID Propriétaire</th><td>" .fileowner($id_fichier); echo "</td></tr><tr><th>Permission</th><td>" .fileperms($id_fichier); echo "</td></tr></table>"; } } closedir($id_dossier); ?>
La fonction readdir() retourne les éléments dans n'importe quel ordre. De plus, tous les dossiers sont retournés, y compris "." et "..".
while ($fichier = readdir($dossier)) { // Cette instruction permet d'éviter de lister // les deux éléments "." et ".." if ($id_fichier != "." && $id_fichier != ".."){ ... } }
La création d'un nouveau dossier peut être réalisée par le biais de la fonction mkdir().
<?php $id_dossier = mkdir("chemin/dossier", 0700); ?>
La fonction is_dir() retourne le booléen true si l'élément entré en argument est un véritable dossier, dans le cas contraire, elle retourne false.
true | false = is_dir(string dossier);
Il est possible de parcourir les entrées d'un dossier en utilisant une boucle while, dont la condition peut être la lecture d'un dossier par la fonction readdir() renvoyant lorsque la fin est atteinte, la valeur booléenne false.
<?php $i = 0; $dir = "C:\Inetpub\wwwroot\laltruiste\coursphp\"; $dossier = opendir($dir); while ($entree = readdir($dossier)) { $i++; echo $i . ' : <a href="cousphp/' . $entree . '">' . $entree . '</a><br>'; } closedir($dossier); ?>
D'autre part, le pointeur de fichier se place directement au début, soit à l'octet 0 d'un fichier lors de l'ouverture de ce dernier. La fonction fseek() est capable de modifier la position du pointeur d'un certain nombre d'octets. Tandis que ftell() retourne cette position. Quant à rewind(), il le ramène à la position initiale du fichier.
<?php $chemin = "c:\autoexec.bat"; $id_fichier = fopen($chemin, "r"); echo "Position initiale : " . ftell($id_fichier) . "<br>"; fseek($id_fichier, filesize($chemin)); echo "Position de fin : " . ftell($id_fichier) . "<br>"; rewind($id_fichier); echo "Position de retour : " . ftell($id_fichier) . "<br>"; fclose($id_fichier); ?>
La fermeture d'un dossier s'opère par la fonction closedir().
closedir($id_dossier);
La suppression d'un dossier s'effectue par la fonction rmdir(), mais les éléments contenus par ce dossier doivent être auparavant effacés. C'est-pourquoi, il est nécessaire de recourir à une fonction récursive pour supprimer un dossier non vide.
function effacer($fichier) { if (file_exists($fichier)) { chmod($fichier,0777); if (is_dir($fichier)) { $id_dossier = opendir($fichier); while($element = readdir($id_dossier)) { if ($element != "." && $element != "..") delete($fichier."/".$element); } closedir($id_dossier); rmdir($fichier); } else unlink($fichier); } } $repertoire = "c:\un_repertoire_inutile\"; effacer($repertoire);