Tengo un directorio con 1.3 millones de archivos que necesito mover a una base de datos. Solo necesito tomar un solo nombre de archivo del directorio SIN escanear todo el directorio. No importa qué archivo capture, lo eliminaré cuando haya terminado y luego pasaré al siguiente. es posible? Todos los ejemplos que puedo encontrar parecen escanear toda la lista de directorios en una matriz. Solo necesito tomar uno a la vez para procesar ... no 1.3 millones cada vez.PHP: ¿Cómo puedo tomar un solo archivo de un directorio sin escanear todo el directorio?
Respuesta
Esto debe hacerlo:
<?php
$h = opendir('./'); //Open the current directory
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..') { //Skips over . and ..
echo $entry; //Do whatever you need to do with the file
break; //Exit the loop so no more files are read
}
}
?>
Devuelve el nombre de la siguiente entrada en el directorio. Las entradas se devuelven en el orden en que el sistema de archivos las almacena.
Prefiero insertar '.' Y '..' en la base de datos que hacer el control 1.3M veces. –
@SamyDindane, esa comprobación no tardará mucho, especialmente si se compara con la lectura del archivo del disco y su almacenamiento en una base de datos ... – Zombaya
Aún así, la sobrecarga podría evitarse (todo ayuda) ejecutando simplemente dos llamadas a 'readdir' antes del bucle, ya que' .' y '..' son siempre las primeras entradas. – connec
readdir hará el truco. Compruebe el ejemplo en esa página, pero en lugar de hacer la llamada readdir en el bucle, simplemente hágalo una vez. Obtendrá el primer archivo en el directorio.
Nota: es posible que obtenga ".", ".." y otras respuestas similares según el servidor, por lo que le recomendamos al menos un bucle hasta que obtenga un archivo válido.
Sólo obtener el iterador directorios y buscar la primera entrada que es un archivo:
foreach(new DirectoryIterator('.') as $file)
{
if ($file->isFile()) {
echo $file, "\n";
break;
}
}
Esto también asegura que el código se ejecuta en algún otro comportamiento del sistema de archivos que la que se esperaba.
Ver DirectoryIterator
y SplFileInfo
.
¿No carga esto los contenidos completos del directorio en una matriz? Eso es lo que el Kyle está tratando de evitar.Eso podría marcar la diferencia cuando tenga miles de archivos en la carpeta. – skibulk
@skibulk: No, no itera sobre el ** DirectoryIterator ** que no es una matriz, sino un objeto. Esto efectivamente previene lo que temes: una matriz. – hakre
Cool. Estoy acostumbrado a 'foreach'ing arrays. Entonces, cuando 'foreach' accede al siguiente índice del' DirectoryIterator', en realidad está invocando un método (IE getNextFile()) en su lugar? Extraño. – skibulk
¿Desea devolver el primer directorio O el primer archivo? ¿ambos? utilizar esto:
crear la función "PICKFIRST" con 2 argumento
function pickfirst($address,$file) { // $file=false >> pick first dir , $file=true >> pick first file
$h = opendir($address);
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..' && (($file==false && !is_file($address.$entry)) || ($file==true && is_file($address.$entry))) )
{ return $entry; break; }
} // end while
} // end function
si desea recoger primer directorio en su dirección fija $file
en false y si quieres recoger primero (dirección y modo dir o archivo?) archivo en su dirección establece $file
en verdadero.
buena suerte :)
- 1. php eliminar un solo archivo en el directorio
- 2. Comprimir un directorio de archivos con PHP
- 3. ¿Cómo identifico un directorio sin conservar la estructura del directorio?
- 4. Python: ¿Cómo obtener archivos en un archivo sin el directorio?
- 5. Redirigir 301 de un directorio a un solo archivo
- 6. Eliminar todo en un directorio excepto un archivo en C#
- 7. ¿Mira solo un directorio de mercurial?
- 8. ¿Cómo puedo contar un archivo desde el directorio en Python?
- 9. PHP borrar el contenido de un directorio
- 10. Cargar todo el directorio a través de PHP FTP
- 11. Extraer solo un directorio de tar
- 12. ¿Puedo importar un parche sin tocar el directorio de trabajo?
- 13. ¿cómo puedo señalar PHP glob a un directorio específico?
- 14. Copie el archivo a un directorio diferente
- 15. ¿Cómo puedo usar un solo comando para descomprimir todos los archivos en un directorio, en un nuevo directorio único con el mismo nombre que el archivo
- 16. WGET solo los nombres de archivo en un directorio FTP
- 17. Copie todo el contenido de un directorio en C#
- 18. ¿Cómo puedo ver un solo archivo de GitHub sin clonar todo el repositorio?
- 19. ¿Cómo "mirar" solo un directorio en un repositorio de GitHub?
- 20. Objetivo c: Cómo eliminar solo todos los archivos de un directorio pero conservar el directorio
- 21. ¿Cómo puedo limitar git-diff a un solo directorio, sin sus hijos?
- 22. ¿Cómo puedo comprimir un directorio con .NET?
- 23. Cómo git commit un único archivo/directorio
- 24. Cómo comprimir un directorio en un archivo comprimido programáticamente
- 25. Copia de archivos desde un directorio en un directorio existente
- 26. Sacando solo un directorio de un git repo
- 27. Guarde el archivo matplotlib en un directorio
- 28. NSOpenPanel elegir un directorio (no un archivo)
- 29. ¿Cómo puedo saber cuántos archivos hay en un directorio?
- 30. Listando el contenido de un archivo tar o un directorio solo hasta algún nivel
@JonathanSampson I duda que le importe el nombre de archivo. Él quiere tomar cualquier archivo, ponerlo en la base de datos y pasar al siguiente. –