PHP: el valor no aumentará por alguna razón
Frecuentes
Visto 175 veces
1
$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?
2 Respuestas
1
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
0
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 php or haz tu propia pregunta.
Ha
echo
editó 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. - Yaniro¿En qué punto debo repetir $ checkFile? - user1219742
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? - rgin@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. - user1219742
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. - Yaniro