entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

filtrar el contenido de una carpeta

hola muchachos estoy tratando de filtrar los archivos que terminen en jpg el problema es que por algun extraño error no puedo visualizar el contenido de mis otras carpetas
tengo las siguientes carpetas al mismo nivel de mi script

  • clothes
    -madone2012
    -verano2012
    -script.php

en mi documento html tengo una lista con el nombre de estas carpetas

    <ul id="items-links">
    <img src="iconos/menu/nav-icon.png" id="icono-menu">
    <div id="items" id="elementos">
        <li>clothes</li>
        <li>madone2012</li>
        <li>verano2012</li>
        </div>
    </ul>

a cada elemento li esta asociado un listener, cada vez que presiono en uno de ellos este devuelve su valor por consola y luego es enviado al servidor que se encarga de mostrar todo el contenido de la carpeta

<?php 
$peticion = $_GET['consulta'];
$directorio = opendir($peticion);

foreach(glob("$peticion/*.jpg") as $filename){
 echo $filename;
}

echo $peticion."<br>";

el problema es que solo me muestra el contenido de mi carpeta clothes, en las demas carpetas no me muestra ningun resultado, ambas carpetas contienen imagenes en formato jpg, en mi carpeta madone2012 los tengo guardado con el nombre que le asigna el dispositivo , p1010101.jpg, no creo que esto sea el problema.

por el momento no puedo ver las imagenes de mi otra carpeta

0voto

Peter comentado

Por favor no pongas descripciones como etiquetas, para eso se usa un título correcto y se describe la pregunta completa en el contenido.

Gracias.

0voto

carlossevi comentado

No nos pones el código de cómo generas la petición, así que un posible problema puede ser que en la variable GET no estás pasando el valor correcto. Prueba a hacer un echo de $peticion para comprobarlo.

Por otro lado ¿has comprobado que los permisos de los tres directorios son iguales?

0voto

steven comentado

tengo mi servidor local xamp en un sistema windows esto significa no hay problemas con los permisos, la peticion lo hago con ajax y no hay ningun problema con eso, por seguridad te pongo el codigo completo
cada elemento li hace referencia al nombre de una carpeta, cada vez que pulso en uno de ellos, este nombre se guarda en una variable y luego se envia al servidor por get, este valor coinciede con el nombre de mi carpeta y hago un recorrido para mostrar todo el contenido de mi carpeta seleccionada, esto funciona con clothes pero no en madone2012, no puedo entender cual es el problema, ambas carpetas contienen imagenes en formato jpg

    <ul id="items-links">
        <li>clothes</li>
        <li>madone2012</li>
        <li>verano2012</li>

    </ul>

 <div id="seccion-datos"></div>
 <script type="text/javascript">
    ajax = new XMLHttpRequest()
    links = document.getElementById("items-links");
    links.addEventListener("click", function(e){
    console.log(e.target.innerText);
    consulta = e.target.innerText;

        ajax.open("get", "sistema.php?consulta="+consulta, true);
        ajax.setRequestHeader("contentType", "application/x-www-form-urlencoded");

        ajax.send();

        ajax.onreadystatechange=function() {  
         if (ajax.readyState==4 && ajax.status==200) {
          texto=ajax.responseText;
          seccionDatos.innerHTML= texto;

          } 
       }
    }, false)

seccionDatos = document.getElementById('seccion-datos');
 </script>
<?php 
$peticion = $_GET['consulta'];
// $directorio = opendir($peticion);

foreach(glob("$peticion/*.jpg") as $filename){
 echo "<img src='$filename' class='responsive'>";
}

echo $peticion;

cuando pulso en el elemento <li>clothes</li> me devuelve todo el contenido de mi carpeta que son imagenes y tambien el nombre de mi elemento clothes que fue pasado por get desde ajax
es decir en mi pagina recibo todas las imagenes + el nombre de mi elemento (referencia a mi carpeta) y en consola recibo lo mismo

en cambio cuando pulso en el otro elemento <li>madone2012</li>, me devuelve correctamente el valor de mi variable que fue enviada al servidor pero el contenido no se carga, osea recibo solo el nombre de mi carpeta madone2012
en este caso en la pagina y en consola recibo el nombre de mi elemento pero sin el contenido

0voto

carlossevi comentado

¿Has comprobado que los permisos de los tres directorios son iguales?

-1voto

steven comentado

si te repito que estoy en windows y por defecto lo tengo con permisos de lectura,
la verda que es algo extremadamente anomalo, si te animas podemos tener una sesion por teamview, te paso las credenciales por privado ok

0voto

carlossevi comentado

¿Qué resultado te devuelve la petición sistema.php?consulta=madone2012 si la escribes directamente en el navegador? Tienes que intentar saber en qué lado está el problema, si en que la solicitud no se hace correctamente o que no se devuelve lo esperado.

0voto

steven comentado

acabo de descubrir el problema, tenia todas mis imagenes de mi carpeta madone2012 con la extension JPG en mayusculas y en mi condional los pase por minusculas, fue un error tonto, ahora tengo otro problema, de que mandera podria cambiar masivamente la extension de mis archivos en minusculas

acabo de probar lo siguiente pero no funciona

<?php 
$peticion = $_GET['consulta'];
// $directorio = opendir($peticion);

foreach(glob("$peticion/*.jpg" or "$peticion/*JPG") as $filename){
 echo "<img src='$filename' class='responsive'>";
}

echo $peticion;

ahora tengo pocas imagenes, pero si no fuera asi deberia de hacerlo manualmente

1 Respuesta

3votos

carlossevi Puntos63580

Bueno, como tu mismo has dicho en los comentarios, el problema es que la extensión de tus ficheros estaba en mayúscula.

Puedes renombrar todos los ficheros ejecutando un pequeño script previa copia de seguridad.

foreach(glob("rutacarpeta/*.JPG") as $filename) {
    $newfilename = str_replace(".JPG",".jpg",$filename);
    rename($filename,$newfilename);
}

La otra opción es hacer que glob() encuentre los ficheros independientemente de si la extensión está en mayúsculas o no, es decir, hacerlo case insensitive. Para ello:

glob("$peticion/*.[jJ][pP][gG]")

0voto

steven comentado

lo renombrare manualmente ya que se tratan de pocos archivos, creo que un script en bat o python podria ahorrarme todo ese trabajo, eventualmente publicare una pregunta para ese tema, hasta la proxima.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta