Foros del Web » Programando para Internet » PHP »

funcion opendir()

Estas en el tema de funcion opendir() en el foro de PHP en Foros del Web. Hola compis. Tengo una pega. En un directorio tengo . .. 1.php (archivo) ciudades (directorio) primero.txt (archivo) segundo.txt(archivo) pues bien en el 1.php lo que ...
  #1 (permalink)  
Antiguo 19/11/2008, 05:38
overon37
Invitado
 
Mensajes: n/a
Puntos:
funcion opendir()

Hola compis. Tengo una pega.

En un directorio tengo
.
..
1.php (archivo)
ciudades (directorio)
primero.txt (archivo)
segundo.txt(archivo)

pues bien en el 1.php lo que intento es acceder a los dos txt que hay dentro de este
modo.
$dir="./ciudades";
$dire=opendir($dir);

pero nada, no da error, pero no trata los txt que hay dentro.

¿por qué? la sintaxis es correcto ¿no?

un saludo
  #2 (permalink)  
Antiguo 19/11/2008, 05:59
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: funcion opendir()

No sé si he entendido tu duda. opendir sólo te inicia un gestor de directorio. Para hacer "algo más" necesitarás otras funciones.
En el manual tienes las explicaciones y ejemplos.

Un saludo.
  #3 (permalink)  
Antiguo 19/11/2008, 06:04
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

vamos a ver, la cosa funciona perfectamente si el directorio a leer es donde esta mi php

$dir=".";
$dire=opendir($dir);

y despues el readdir y toda la pesca... asi funciona perfectamente

pero

$dir="./directorio";
$dire=opendir($dir);

esto ya no funciona, no da error porque el directorio existe, en este caso no trata los archivos que hay dentro de "./directorio".
  #4 (permalink)  
Antiguo 19/11/2008, 07:08
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: funcion opendir()

Cuando dices "no trata los archivos", ¿A qué te refieres exactamente?

Si el tema es que usas alguna función del tipo is_file o análogas y el script "no hace nada", probablemente será porque no has indicado la ruta completa para que esas funciones localicen los archivos a los que quieres apuntar.

Por ejemplo:

Código PHP:
$dir "./directorio/";
if( 
is_dir$dir ) && ( $gd opendir$dir ) ) ) {
    while( 
$archivo readdir$gd ) ) {
        if( 
is_file$dir.$archivo ) ) {
            
$ficheros[] = $archivo;
        }    
    }
    
closedir$gd );

... donde $gd es el gestor de directorio retornado por opendir() y $dir es el string que contiene la ruta del directorio (el parámetro pasado a opendir() que en este caso además termina con una barra, para que no dé problemas al concatenar con el nombre del archivo).

Un saludo.
  #5 (permalink)  
Antiguo 19/11/2008, 14:28
overon37
Invitado
 
Mensajes: n/a
Puntos:
no hay pegas con is_dir ni nada por el estilo, no es esa la cuestión. la cuestión es que no tengo pegas para leer el contenido de archivos de texto que están donde está el script en php, pero si cuando cambio el directorio, como puse antes
cuando el directorio es "." sin pegas
pero si pongo "./directorio" ya no funciona el script no lee el contenido de los archivos de texto, no hay pegas con el resto de instrucciones. no es ese el caso, el caso es que cuando la ruta es un directorio distinto de donde este el script en php no detecta archivos, y si existen.

es eso, nada de is_dir, readdir, todo eso está implementado ya y como funciona con "." como directorio, pero no con, por ejemplo "./diectorio".... pues esa es mi pregunta

alguien que sepa como solucionar esto o me indique otro foro donde pueda consultar? gracias

Última edición por GatorV; 19/11/2008 a las 15:37
  #6 (permalink)  
Antiguo 19/11/2008, 15:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Entonces tu problema es la ruta, si tu usas ./directorio significa que desde donde estas parado vas a leer directorio, si no existe obviamente no lo puedes leer, en ese caso lo más recomendable es usar una ruta absoluta.

Saludos
  #7 (permalink)  
Antiguo 19/11/2008, 18:02
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

a ver,
1 el directorio exite
2 el directorio tiene archivos (para ser leidos)
3 la cuestión es:

si el script está en el directorio en cuestión sin pegas,
si el script está en otro directorio, en este caso en el superior nada, no "ve" los archivos, eso es todo el misterio

pongo el código para ver si así
---------------------------------------------------------
$dir=".";
$dire=opendir($dir);
$total=0;
echo '<div style="position:absolute; width:98%; left:10%;">';
echo '<p style="text-align:center;"><img src="../iconos/titulo.png" alt="logo" title="logo" /></p>';
while ($archivo=readdir($dire)){
$dividir=explode(".",$archivo);
if (is_file($archivo) and $dividir[1]=="txt" or $dividir[1]=="TXT"){
$total++;
$fichero=fopen($archivo,"r");
$negocio=fgets($fichero);
$localidad=fgets($fichero);
$direccion=fgets($fichero);
$telefono=fgets($fichero);
$web=fgets($fichero);
echo '<div style="position:relative; float:left; width:31%; border: 5px solid #FFF;">';
echo '<p class="cuerpo_noticia"><img src="../iconos/localidad.jpg" alt="Localidad" title="Localidad" /><span class="titulo_noticia"> '.$negocio.'</span><br />';
echo '<img src="../iconos/negocio.jpg" alt="Negocio" title="Negocio" /> '.$localidad.'<br />';
echo '<img src="../iconos/direccion.jpg" alt="Dirección" title="Dirección" /> '.$direccion.'<br />';
if (eregi("http",$web)){
echo '<img src="../iconos/web.jpg" alt="Web" title="Web" /><a href='.$web.'>'.$web.'</a><br />';
}
else {
echo '<img src="../iconos/web.jpg" alt="Web" title="Web" /> '.$web.'<br />';
}
echo '<img src="../iconos/telefono.jpg" alt="Teléfono" title="Teléfono" /> '.$telefono.'</p>';
echo "</div>";
if ($total==3){
$total=0;
echo '<div style="clear:left;"></div>';
echo "<br /><br />";
}
}
}
echo "</div>";
echo '<a href="1.php" title="Volver a Seleccionar provincia">Volver...</a>';
------------------------------------
si $dir pasa a tener por ejemplo "./directorio" (que si existe y si tiene archivos) nada de nada
  #8 (permalink)  
Antiguo 19/11/2008, 20:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Como te comento el problema es la ruta, tienes que pasar la ruta correcta ./directorio estas haciendo referencia al directorio actual, usa la ruta absoluta.

Saludos
  #9 (permalink)  
Antiguo 19/11/2008, 21:26
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: funcion opendir()

Cita:
Iniciado por overon37 Ver Mensaje
(..) si $dir pasa a tener por ejemplo "./directorio" (que si existe y si tiene archivos) nada de nada (..)
Me remito de nuevo a la respuesta que te di hace 14 horas.

Un saludo.

PD/ Revisa el parámetro que pasas a is_file.
PD2/ Cuando puedas, me explicas qué te ha molestado de mis respuestas.

Última edición por Deschamps; 19/11/2008 a las 21:55
  #10 (permalink)  
Antiguo 20/11/2008, 05:53
overon37
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo Respuesta: funcion opendir()

Cita:
Iniciado por Deschamps Ver Mensaje
Me remito de nuevo a la respuesta que te di hace 14 horas.

Un saludo.

PD/ Revisa el parámetro que pasas a is_file.
PD2/ Cuando puedas, me explicas qué te ha molestado de mis respuestas.


no me ha molestado nada de la respuesta, pero la cosa es que si con la ruta "." nop hay pegas, y con "./directorio" si las tiene. Pues evidentemente el problema no esta en is_file, en readdir().... ni nada de eso.
el problema evidentemente está en la ruta, y no se hasta que punto ya que no da error y por otro lado con solo while que lee los archivos no da error ¿?¿?¿??¿
Por otro lado, como usar una ruta absoluta en un servidor??? eso no lo entiendo, deberé usar la ruta relativa desde donde esté mi script en php, ¿no?

osea, que hacer referencia a is_file, readdir, opendir.... no tiene mucho sentido cuando funciona perfectamente cuando el script lee los archivos que están al mismo nivel, pero no con los archivos que están dentro de un directorio que cuelga de ese script, y que por ende el directorio claro que existe....


un saludo
  #11 (permalink)  
Antiguo 20/11/2008, 10:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Una ruta absoluta: /var/www/usuario/carpeta/etc. ruta relativa ./dir o ../dir.

Saludos
  #12 (permalink)  
Antiguo 20/11/2008, 11:55
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

Cita:
Iniciado por GatorV Ver Mensaje
Una ruta absoluta: /var/www/usuario/carpeta/etc. ruta relativa ./dir o ../dir.

Saludos
Código PHP:
<?php
    $dir
="./cadiz/";
    if (
is_dir($dir) && ($directorio=opendir($dir))){
      while (
$archivo=readdir($directorio)){
            echo 
$archivo."<br />";
      }
    }
?>
esto funciona, muestra los archivos que están en el directorio cadiz, pero cuando intento abrir alguno de esos archivos salta el error diciendo que no tengo permisos y soy el propietario del directorio. ?¿?¿?¿?¿?
  #13 (permalink)  
Antiguo 20/11/2008, 12:06
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

ESto ya da error, lo anterior no........

en cada archivo, incluso en los
.
..

dice que no tengo permisos, y no es el caso

Código PHP:
<?php
    $dir
="./cadiz/";
    if (
is_dir($dir) && ($directorio=opendir($dir))){
      while (
$archivo=readdir($directorio)){
            echo 
$archivo."<br />";
            
$abrir=fopen($archivo,"r");
            
$leer=file_get_contents($archivo,filesize($archivo));
      }
    }
?>
  #14 (permalink)  
Antiguo 20/11/2008, 12:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Estas seguro que no es el caso? Recuerda que si PHP esta como CGI, son usuarios diferentes los de Apache, PHP y los de tu cuenta por lo que si esta safe_mode activado te va a decir que no tienes permisos para escribir en el.

Saludos.
  #15 (permalink)  
Antiguo 20/11/2008, 12:27
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

Código PHP:
<?php
    $dir
="./cadiz/";
    if (
is_dir($dir) && ($directorio=opendir($dir))){
      while (
$archivo=readdir($directorio)){
            if (
is_file($archivo)){
                echo 
$archivo."<br />";
                
$fichero=fopen($archivo,"r");
                
$negocio=fgets($fichero);
                
$localidad=fgets($fichero);
                
$direccion=fgets($fichero);
                
$telefono=fgets($fichero);
                
$web=fgets($fichero);
                echo 
$negocio."<br />";
                echo 
$telefono."<br />";
                echo 
$direccion."<br />";
                echo 
$web."<br />";
                echo 
$localidad."<br />";
            }
      }
    }
?>
Esto funciona muestra los nombre de los "$archivo", pero no mustra el contenido de los mismos que obtengo, como se ve en el código......
Osea que la cosa no la entiendo, ve los archivos, me muestra los nombres, pero no su contenido, todos los archivos tienen la misma estructura, que es la que se lee, y la que se debe mostrar, pero no la muestra.
y lo reitero, solo pasa cuando el script, como en este caso intenta acceder a archivos que no están en el mismo directorio que el propio script, si están en el mismo directorio sin pegas
  #16 (permalink)  
Antiguo 20/11/2008, 13:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Viendo tu código veo un problema fundamental, recuerda que fopen() necesita la ruta con el archivo, si lo corres estando en el mismo dir por eso funciona pero si te sales del dir tienes que pasarle la ruta, prueba hacer un fopen($directorio .$archivo, 'r');

Saludos
  #17 (permalink)  
Antiguo 20/11/2008, 14:15
overon37
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por GatorV Ver Mensaje
Viendo tu código veo un problema fundamental, recuerda que fopen() necesita la ruta con el archivo, si lo corres estando en el mismo dir por eso funciona pero si te sales del dir tienes que pasarle la ruta, prueba hacer un fopen($directorio .$archivo, 'r');

Saludos

Hecho de ese modo da estos errores

Warning: fopen(Resource id #21 al abrir el archivo

y por cada línea del archivo que leo da

Warning: fgets(): supplied argument is not a valid stream resource.......


ufffff

Cita:
Iniciado por overon37 Ver Mensaje
Hecho de ese modo da estos errores

Warning: fopen(Resource id #21 al abrir el archivo

y por cada línea del archivo que leo da

Warning: fgets(): supplied argument is not a valid stream resource.......


ufffff


pero ya esta solucionado

no es fopen($directorio.$archivo,"r");

sino

fopen($dir.$archivo,"r");

y ya esta, sin pegas, todo solucionado

yo pense, por lo que lei que con el opendir() el puntero ya se situa en el directorio que se trata, osea que no es así, sino que hay que darle ruta completa (incluido archivo a tratar)

gracias por todo

Última edición por GatorV; 20/11/2008 a las 16:37
  #18 (permalink)  
Antiguo 20/11/2008, 16:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: funcion opendir()

Si quieres cambiar el directorio para eso tienes chdir().

Saludos.
  #19 (permalink)  
Antiguo 20/11/2008, 16:30
overon37
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: funcion opendir()

Cita:
Iniciado por GatorV Ver Mensaje
Si quieres cambiar el directorio para eso tienes chdir().

Saludos.

ahora si, con chdir() perfecto, muchas gracias
  #20 (permalink)  
Antiguo 21/11/2008, 02:05
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: funcion opendir()

Cita:
Iniciado por overon37 Ver Mensaje
(..) no hay pegas con is_dir ni nada por el estilo, no es esa la cuestión (..)
Cita:
Iniciado por overon37 Ver Mensaje
(..) osea, que hacer referencia a is_file, readdir, opendir.... no tiene mucho sentido ( ..)
... para al final...

Cita:
Iniciado por overon37 Ver Mensaje
(.. ) ya esta solucionado (..) fopen($dir.$archivo,"r"); (..)
Si te hubieses leído con algo de atención la respuesta a la que te remitía ... te habrías ahorrado un día, y habrías llegado a la misma conclusión.

En fin.
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 05:56.