Foros del Web » Programando para Internet » PHP »

Problema al leer archivos de directorio

Estas en el tema de Problema al leer archivos de directorio en el foro de PHP en Foros del Web. Hola, no consigo saber q es lo q pasa aqui, por pantalla me sale: FILE:1 FILE:1 FILE:1 Efectivamente, el primer file por el ".", el ...
  #1 (permalink)  
Antiguo 26/07/2003, 14:47
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 8 meses
Puntos: 0
Problema al leer archivos de directorio

Hola, no consigo saber q es lo q pasa aqui, por pantalla me sale:


FILE:1
FILE:1
FILE:1

Efectivamente, el primer file por el ".", el segundo por ".." y el tercero por un archivo q tengo q quiero q me borre si cumple la condición.

Pero la salida debe ser:

FILE: .
FILE: ..
FILE: archivo.txt (archivo q tengo almacenado en el directorio)

no??

El directorio se llama "listado" y está al mismo nivel q el archivo q contiene este código:

$enc=false;
$dir=opendir ("listado ");

while($file=readdir ($dir) && !$enc)
{
echo "FILE: " . $file. "<br>";
if ($file != "." && $file != "..")
{

$res=explode (".", $file);//Divide la palabra en dos partes
//utilizando como separados el "." y mete el resultado en una posición del array
if(condicion)
{
unlink ($file);
$enc=true;
}
}
}
closedir ($dir);
  #2 (permalink)  
Antiguo 26/07/2003, 16:53
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 8 meses
Puntos: 1
Hola,

Me parece que el problema que tienes se debe a la prioridad del operador lógico `&&' en el interior del `while'. Tal y como lo has escrito, esa expresión lo que hace es asignarle a la variable $file el valor de la comparación lógica ``readdir ($dir)) && !$enc''. Puedes resolver esto definiendo explícitamente la prioridad de las expresiones mediante paréntesis. Por ejemplo, quizás quieras probar algo como:

Código:
<?php

$enc = false;
$dir = opendir ('listado');

while (($file = readdir ($dir)) && ! $enc) {

    echo "FILE: " . $file. "<br>";

    if ($file != "." && $file != "..") {

        // Divide la palabra en dos partes utilizando como separados
        // el "." y mete el resultado en una posicion del array
        $res = explode (".", $file);

/*** Segmento comentado por el momento ***
        if(condicion) {
            unlink ($file);
            $enc=true;
        }
***/

    }
}
closedir ($dir);

?>
O incluso podrías usar el operador `and', que tiene una precedencia menor que `&&'. En tal caso, la línea del while luciría algo como:

Código:
while ($file = readdir ($dir) and ! $enc) {
Un cordial saludo
  #3 (permalink)  
Antiguo 26/07/2003, 17:09
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 8 meses
Puntos: 0
Efectivamente ese era el error , ahora me funciona a la perfeción gracias.

Ahora entiendo el porque de devolverme el uno, le estaba asignando a $file un lógico .


Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:15.