2009-02-12 18 views
15

estoy leyendo a través de un directorio con algunas fotos y tal usando una aplicación bastante simple de readdir() como el siguiente:PHP readdir() no devolver los archivos en orden alfabético

if ($handle = opendir($path)) { 
    while (false !== ($szFilename = readdir($handle))) { 
    if ($szFilename[0] !== '.') { 
     if (is_file($path.$szFilename)) { 
       // do stuff 
      } 
     } 
    } 
} 

El problema que estoy teniendo es que los archivos no se leen en orden alfabético como la documentación para el estado readdir():

Devuelve el nombre del siguiente archivo del directorio. Los nombres de archivo son devueltos en el orden en que son almacenados por el sistema de archivos.

Otra cosa extraña es que, en el servidor de prueba local, el mismo código funciona muy bien. Esto se ejecuta en un servidor utilizando la pila LAMP en ambos casos.

Sé que puedo construir una matriz y simplemente ordenarla, pero me preguntaba si me estaba perdiendo algo de lo que estaba haciendo.

Respuesta

28

orden alfabético :: creo que el fragmento leído mal ... usted ha citado

Devuelve el nombre del siguiente archivo del directorio. Los nombres de archivo se devuelven en el orden en que el sistema de archivos los almacena.

El hecho de que 'ls' muestre los archivos en orden alfabético (normalmente) no significa que así sea como se almacenan en el sistema de archivos. PHP se está comportando como una especificación, me temo.

Es posible que desee considerar el uso de scandir como la base de sus esfuerzos, si la ordenación alfabética es una necesidad.:)

+2

/me slaps frente scandir() es lo que estaba buscando. ¡Gracias! – Buggabill

+1

BTW: ls -U enumera los archivos en el orden en que se almacenan las entradas de directorio en el directorio. –

+0

La función 'glob()' también puede ayudar aquí. http://php.net/glob Por defecto, devuelve archivos ordenados alfabéticamente. –

4

supongo que los documentos son bastante claros aquí.

orden en el que se almacenan en el sistema de archivos

no es el mismo que el orden alfabético

+0

mayb e almacenó las imágenes en su servidor de pruebas en orden alfabético, por lo que el orden almacenado es igual al orden alfabético – Jacco

+0

no se garantiza que el orden sea alfabético. eso es lo que dicen los doctores. – SilentGhost

+0

Los documentos no dicen que no se garantiza que el orden sea alfabético. No diría que son "bastante claros" acerca de que el orden del sistema de archivos es diferente del orden alfabético. Los documentos no dicen nada sobre alfabético. Podrían ser más claros acerca de la diferencia. –

1

Estás leyendo mal la documentación:

Los nombres de archivo se devuelven en el orden en que son almacenados por el sistema de archivos.

significa que los archivos se devuelven en el orden en que se crearon.

+1

nitpick: _probably_ significa el orden en que fueron creados =) es posible crear un sistema de archivos que devuelva los archivos en algún otro orden, me imagino. – gnud

12

Se puede copiar todos los nombres de archivo en una matriz y luego usar

<?php 
sort($filesArray); 
?> 
-1

Hay un par que puede utilizar:

clasificación alfabética:

<?php 
sort($handle); 
?> 

inversa de clasificación alfabética :

<?php 
rsort($handle); 
?> 
+0

'$ handle' en el OP es un [' resource'] (http://php.net/manual/en/language.types.resource.php), que tampoco ['sort'] (http: // php .net/manual/es/function.sort.php) ni ['rsort'] (http://php.net/manual/en/function.rsort.php) accept. Uno necesitaría tirar toda la matriz a la memoria y luego llamar a 'sort()' o 'rsort()'. Si uno se molesta en hacer eso, uno también podría usar 'scandir' en todas las implementaciones modernas de PHP. – bishop

Cuestiones relacionadas