English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderás a manejar directorios o carpetas con PHP.
En el capítulo anterior, aprendiste cómo usar archivos en PHP. Del mismo modo, PHP también te permite usar directorios en el sistema de archivos, por ejemplo, puedes abrir directorios y leer su contenido, crear o eliminar directorios, listar todos los archivos en el directorio, etc.
您可以通过 mkdir() 使用要创建的目录的路径和名称来调用 PHP 函数来创建一个新的空目录,如下例所示:
<?php //目录路径 $dir = "testdir"; // Verificar si el directorio existe if(!file_exists($dir)){ //尝试创建目录 if(mkdir($dir)){ echo "目录创建成功。"; } else { echo "错误:无法创建目录。"; } } else { echo "错误:目录已存在。"; } ?>
为了使 mkdir() 函数工作,已经存在于参数的目录路径的父目录,例如,如果你指定的目录路径 testdir/subdir 比 testdir 以其他方式存在PHP将产生一个错误。
您可以通过调用PHP copy()函数并将文件的源路径和目标路径作为参数来将文件从一个位置复制到另一位置。如果目标文件已经存在,它将被覆盖。这是一个在备份文件夹中创建“example.txt”文件副本的示例。
<?php //源文件路径 $file = "example.txt"; //目标文件路径 $newfile = "backup/example.txt"; // 检查文件是否存在 if(file_exists($file)){ //尝试复制文件 if(copy($file, $newfile)){ echo "文件复制成功。"; } else { echo "错误:无法复制文件。"; } } else { echo "错误:文件不存在。"; } ?>
为了使该示例生效,必须已经存在备份目标目录和源文件“example.txt”。否则,PHP将产生错误。
您可以使用PHP scandir()函数列出指定路径内的文件和目录。
现在,我们将创建一个自定义函数,该函数将使用PHP递归列出目录中的所有文件。如果您正在使用深度嵌套的目录结构,则此脚本将很有帮助。
<?php //定义一个函数以输出目录中的文件 function outputFiles($path){ //Verificar si el directorio existe if(file_exists($path) && is_dir($path)){ //扫描此目录中的文件 $result = scandir($path); // 过滤掉当前的(.)和父目录(..) $files = array_diff($result, array('.', '..')); if(count($files) > 0){ //循环遍历重新调谐的数组 foreach($files as $file){ if(is_file("$path")/$file")){ //Mostrar el nombre del archivo echo $file . "<br>"; } else if(is_dir("$path/$file")){ //Si se encuentra el directorio, se llama recursivamente a esta función outputFiles("$path/$file"); } } } else { echo "Error: No se encontró el archivo en el directorio."; } } else { echo "Error: El directorio no existe."; } } //Llamar a la función outputFiles("mydir"); ?>
Al manejar la estructura de directorios y archivos, a veces es necesario buscar ciertos tipos de archivos en un directorio, como solo listar archivos .text o .png, etc. Puede hacerlo fácilmente con la función glob() de PHP, que coincide con los archivos según el patrón.
El siguiente ejemplo de código PHP buscará documents Directorio y lista todos los archivos con la extensión .text. No busca en los subdirectorios.
<?php /* */ foreach(glob("documents/*.txt") as $file){ echo basename($file) . " (tamaño: " . filesize($file) . " bytes)" . "<br>"; } ?>
La función glob() también se puede usar para buscar todos los archivos en un directorio o sus subdirectorios. En el siguiente ejemplo, se define una función que lista recursivamente todos los archivos en un directorio, al igual que lo que se hizo en el ejemplo anterior con la función scandir().
<?php //Definir una función para mostrar los archivos en el directorio function outputFiles($path){ //Verificar si el directorio existe if(file_exists($path) && is_dir($path)){ // Buscar archivos en este directorio $files = glob($path ."/*); if(count($files) > 0){ //Recorrer el array reajustado foreach($files as $file){ if(is_file("$file")){ //Mostrar solo el nombre del archivo echo basename($file) . "<br>"; } else if(is_dir("$file")){ //Si se encuentra el directorio, se llama recursivamente a esta función outputFiles("$file"); } } } else { echo "Error: No se encontró este tipo de archivo en el directorio."; } } else { echo "Error: El directorio no existe."; } } //Llamar a la función outputFiles("mydir"); ?>