PHP: el valor no aumentará por alguna razón

$blogDir = 'blog/';
$blogDirHandle = opendir( $blogDir );
$checkingFile = '';
$number = 0;
$codeNumber = '-'.$number.'-';
if( $blogDirHandle = opendir( 'blog/' ) )
{
    while( false !== ( $checkingFile = readdir( $blogDirHandle ) ) ) 
    {
        if( $checkingFile != '.' && $checkingFile != '..' && !is_dir( $blogDir.$checkingFile ) && false !== strpos( $checkingFile, $codeNumber ) )
        {
            $number++;
            $codeNumber = '-'.$number.'-';
        }
    }
closedir( $blogDirHandle );
}

Se supone que el código anterior verifica si $blogDir tiene un archivo que comienza con el $codeNumber actual. Si lo hace, entonces incremente $number (cambiando así $codeNumber), y luego haga un bucle en la verificación hasta que no haya más archivos que comiencen con $codeNumber. Después de esto, creo varios archivos, que se nombran con el nuevo $codeNumber.

Pero por alguna razón no funciona.

Si solo tengo un archivo en el directorio, llamado -0-filename.php, incrementa el valor, y el siguiente archivo que creo tiene -1- como prefijo. Pero después de crear el segundo archivo, no incrementará $número. Simplemente crea archivos con prefijo duplicado (es decir, -0-filename.php, -1-othername.php y -1-thirdname.php)

¿Alguna ayuda?

preguntado el 10 de marzo de 12 a las 20:03

Ha echoeditó los nombres de los archivos que salen del bucle (es decir, $checkFile)? quizás el -1- el archivo se recupera primero, mientras que $number = 0 cuales causas $number para incrementar y luego -0- se recupera el archivo y luego $checkingFile = '/blog/-0-...' y $number = 1 y por lo tanto la condición fallará y su ciclo terminará dejando $number = 1... Solo una suposición. -

¿En qué punto debo repetir $ checkFile? -

Parece que no puedo ver nada malo aquí desde el principio. ¿Qué sucede si no tienes ningún archivo dentro? blog/? ¿Crea la -0-filename.php ¿expediente? -

@Yaniro: agregué 'echo $checkingFile;' antes de la instrucción if, dentro del ciclo while, y el resultado fue: ..-1-filename.php-1-secondfilename.php.-0-(firstfileuploaded).phpimages | ATrgin - Sí lo hace. -

Como he dicho, el archivo n.° 1 aparece antes que el n.° 0, lo que hace que su programa se atasque en el n.° 1. Intente colocar todos los nombres de archivo en una matriz, ordenándolos (por los primeros 3 caracteres) y verificando la última entrada para el número más alto. -

2 Respuestas

Permítanme repetirme, de su pregunta anterior: reúne todos los archivos en una matriz y luego opera en él.

Digamos que su carpeta contiene 2 archivos:

-0-filename.txt
-1-filename.txt

Pero por alguna razón, su servidor enumera este directorio en orden inverso, por lo que en la primera iteración está verificando -0- pero el archivo actual es -1-filename.txt, no pasa nada, el número no se incrementa y readdir se está moviendo al siguiente archivo que es -0-filename.txt. Ahora tiene una coincidencia, el número se incrementa, pero no hay más archivos para leer: readdir el ciclo ha terminado y te queda el número = 1.

contestado el 23 de mayo de 17 a las 11:05

Aquí hay otra forma de hacerlo:

$lastNum = 0;

if ( ( $files = scandir( 'blog/' ) ) !== FALSE && count( $files ) > 0 )
{
    $lastNum = substr( $files[ count( $files ) - 1 ], 1, 1 );
}

scandir() devuelve una matriz ordenada de nombres de archivo extraídos de la ruta especificada. Luego, el código toma la última entrada de la matriz ordenada (que, siempre que los archivos en el directorio estén GARANTIZADOS (!) para seguir la convención mencionada anteriormente, será la que tenga el número más alto en el nombre del archivo) y luego extrae el segundo carácter de los nombres de archivo que se supone que es el indicador de número de archivo.

respondido 11 mar '12, 09:03

Lo siento, estuve fuera unos días. - ¿Dónde debo poner ese código tuyo/qué debo reemplazar? - usuario1219742

:), reemplaza todo. Se supone que este código hace exactamente lo que necesitas, juega con él y compruébalo. - Yaniro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.