Foros del Web » Programando para Internet » PHP »

Como conseguir que count me devuelva 0 si el directorio esta vacío??

Estas en el tema de Como conseguir que count me devuelva 0 si el directorio esta vacío?? en el foro de PHP en Foros del Web. Buenos días compañeros!! Me ha surgido un problema y me gustaría que me asesoraseis (Si es posible ) Estoy intentando crear un "if" para que ...
  #1 (permalink)  
Antiguo 11/02/2012, 04:09
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Como conseguir que count me devuelva 0 si el directorio esta vacío??

Buenos días compañeros!!

Me ha surgido un problema y me gustaría que me asesoraseis (Si es posible)

Estoy intentando crear un "if" para que muestre una imagen por defecto si el directorio esta vacio. Para comprobar si el directorio esta vacío de imagenes, he realizado el siguiente código:

Código PHP:
$directory='ruta del directorio';
$total_imagenes count(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));
echo 
"total_imagenes = ".$total_imagenes
El código me funciona de maravilla si hay imagenes en el directorio, es decir, si hay 5 fotos, en "total_imagenes" me muestra "5", si hay 1, me muestra "1".... Pero si no hay ninguna foto me muestra "1" igual.
He intentado lo siguiente:
Código PHP:
$total=$total_imagenes -1
Con eso soluciono el 1 por defecto que me devuelve si la carpeta esta vacía, pero entonces me encuentro con otro problema, que si en el directorio hay una sola imagen me devuelve 1 y al restarle 1 evidentemente se queda en 0.

Entonces... ¿que debo hacer para que me muestre 0 si en el directorio no hay ninguna imagen y 1 si hay una?

Os agradezco vuestra ayuda de antemano! un saludo muy grande
  #2 (permalink)  
Antiguo 11/02/2012, 04:35
Avatar de jesus1975  
Fecha de Ingreso: febrero-2012
Ubicación: Valencia
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Yo lo intentaria en vez de verificar si hay archivos o no contandolos, lo haria para que me devolviera un true o false, es decir, si hay algun archivo es true y por lo contrario seria false.
  #3 (permalink)  
Antiguo 11/02/2012, 04:47
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Hola "jesus1975"! muchas gracias por tu respuesta.

No es mala idea lo que dices, pero la única complicación que veo es que mi idea es que verifique si hay o no imágenes solamente, ya que puede contener más directorios en el interior, por lo tanto, ¿Hay forma de verificar mediante True/False si hay o no imágenes solamente?

Un saludo!!1 y gracias nuevamente por las respuesta!

P.D. Mi intención no es saber si esta vacío o no el directorio, sino saber si contiene imágenes.

Última edición por sidneyendis; 11/02/2012 a las 04:49 Razón: Falta de datos
  #4 (permalink)  
Antiguo 11/02/2012, 06:09
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Probá con
Código PHP:
Ver original
  1. <?php
  2. $archivos = glob("{dir/*.jpg,dir/*.gif,dir/*.png}",GLOB_BRACE);
  3. if(count($archivos) > 0){
  4.      foreach($archivos as $archivo){
  5.      $coincidencias ="si";
  6.      }
  7.      
  8.    }else{
  9.      $coincidencias = "no";
  10.     }
  11.     echo $coincidencias;
  12. ?>

Aunque según creo GLOB_BRACE no trabaja bien en cualquier sistemas. Yo usaría readdir();

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 11/02/2012, 11:21
 
Fecha de Ingreso: enero-2010
Mensajes: 9
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

no recuerdo cómo... pero hay una forma de abrir un file e iterar los elementos que estan dentro... taLvez iterando cada elemento (archivo) podrias acumular un contador y asi saber cuantos archivos existen...
  #6 (permalink)  
Antiguo 11/02/2012, 18:06
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Es raro que no habiendo ficheros que cumplan con el patron el array posea 1 elemento.

comprueba el contendio del array cuando no hay imagenes

Código PHP:
Ver original
  1. var_dump(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));

Comprueba también que $directory no termine con un / ya que en el patrón lo pones igual

saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #7 (permalink)  
Antiguo 12/02/2012, 02:23
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Cita:
Iniciado por laurenceHR Ver Mensaje
no recuerdo cómo... pero hay una forma de abrir un file e iterar los elementos que estan dentro... taLvez iterando cada elemento (archivo) podrias acumular un contador y asi saber cuantos archivos existen...
Puedes utilizar Scandir y luego descartar los 2 primeros elementos del array (que son . y ..) con un for.
  #8 (permalink)  
Antiguo 12/02/2012, 18:55
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Gracias a todos por vuestras respuestas!!

Vamos por orden...

1.-Ribon: Con la consulta "var_dump" me ha pasado algo curioso, si no hay imagenes me devuelve un boleano "FALSE" pero si sustituyo "var_dump" por "count" me devuelve 1, con el código lo entenderás mejor:
Código PHP:
var_dump(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));// este código me devuelve lo siguiente, bool(false)

$archivos=count(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));
echo 
$archivos//Y este me devuelve 1 
Es algo que no entiendo y que no puedo restar 1 ya que también me muestra 1 si en el directorio solo contiene una imagen....

P.d. La barra la incluyo porque en "directory" no la incluyo ya que esa variable la utilizo para más código...

2,-laurenceHR & Arkaitz; Scandir fué la primera opción que intenté ya la he utilizado... Pero la descarté ya que no sabia como implementar que solo buscase archivos con las extensiones .jpg, .png. gif.

El código que utilizaba y que me funcionaba bien aunque contaba tanto archivos y directorios es el siguiente:
Código PHP:
$fotos scandir($directory.'/'); // Extraigo todas los archivos que están en la carpeta $directory.
$cantidad count($fotos) - 2// Elimino los puntos '.' y '..'
echo $cantidad//muestro el recuento final 
Bueno... no se si os he dado alguna pista nueva para que me podáis ayudar a solucionar este dichoso problema. Como plan B había pensado dejar este código y crear un nuevo directorio dedicado exclusivamente a esas imágenes que quiero contar sin que se mezclen con directorios y por lo tanto con el último código que he publicado hacer el recuento... Pero me gustaría poder solucionar sin recurrir al plan B ya que puede que en un futuro me sirva.

Bueno espero vuestras respuestas! un saludo!
  #9 (permalink)  
Antiguo 12/02/2012, 19:29
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Ojo, si te devuelve FALSE es porque hay un error

Cita:
Iniciado por php.net
Return Values

Returns an array containing the matched files/directories, an empty array if no file matched or FALSE on error.
Nunca he usado GLOB pero tal vez haya un error en el patrón.
de todas formas puedes poner esta condición que encontré mismo en la página de PHP

Código PHP:
Ver original
  1. $archivos = glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE);
  2.  
  3. if(is_array($archivos) && count($archivos) > 0){
  4.    ....
  5. }

creo que es la mejor solución :D!

fuente: http://www.php.net/manual/en/function.glob.php#103561

saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)

Última edición por Ribon; 12/02/2012 a las 19:37
  #10 (permalink)  
Antiguo 12/02/2012, 19:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

@sidneyendis
Puede saberse que resultados te dió lo que te plantee previamente
http://www.forosdelweb.com/f18/como-...1/#post4115715

Yo lo probé y funciona, por lo menos si me remito a tu enunciado
Cita:
P.D. Mi intención no es saber si esta vacío o no el directorio, sino saber si contiene imágenes.
Demo:
http://foros.emprear.com/php/glob/

La unica duda que me queda es que no has sido muy claro en esto, la búsqueda de cierto tipo de archivos, se limita a un directorio? o necesitas que se haga en forma recursiva? De ser lo último, readdir() te serviría

sAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 13/02/2012, 03:40
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Hola compañeros!

Al parecer solucionado!! Ribon ha sido tu solución, pero me gustaría agradecer la dedicación de todos.

Vamos por partes nuevamente;

1.- Ribon; Tu solución ha sido simplemente perfecta, no he tenido que modificar nada del código, pero me podrías explicar a que se debe que antes me sumase 1 si el directorio estaba vacío y porque la ultima manera que me has indicado funciona correctamente?

P.d. Te lo agradecería mucho para que pueda entender más PHP y así aprender. Un saludo!!

2.- emprear; Siento no haberte contestado antes, pero he estado probando tu código hasta hace un momento desde que lo publicaste, pero me da el siguiente error;
Código HTML:
Warning: Invalid argument supplied for foreach() in /ruta/del/archivo/donde/está/el/error/index.php on line 313
P.d. Siento si no me había explicado bien, como nadie me había discrepado falta de información, pensaba que había quedado claro lo que intentaba crear.

No obstante, explico nuevamente que quería conseguir; Quería comprobar en un directorio(En el cual no solo hay imágenes, también pueden haber archivos, más directorios...) si habían imágenes con las extensiones indicadas (jpg,gif,png), si las había, simplemente mostrarlas, y si no había imágenes, mostrar una imagen por defecto indicando que no las hay.

Nuevamente gracias por vuestro apoyo y ayuda!! muy útil como siempre!

Un gran saludo!
  #12 (permalink)  
Antiguo 13/02/2012, 04:57
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

En el enlace que publiqué te lleva directo a un post que indica que las posibles fallas a esto puede deberse a varias razones.

http://www.php.net/manual/en/function.glob.php#103561

Saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #13 (permalink)  
Antiguo 13/02/2012, 05:11
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Mille grazie!! Muy útil!
  #14 (permalink)  
Antiguo 13/02/2012, 05:13
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Como conseguir que count me devuelva 0 si el directorio esta vacío??

Cita:
Iniciado por sidneyendis Ver Mensaje
Gracias a todos por vuestras respuestas!!

Vamos por orden...

1.-Ribon: Con la consulta "var_dump" me ha pasado algo curioso, si no hay imagenes me devuelve un boleano "FALSE" pero si sustituyo "var_dump" por "count" me devuelve 1, con el código lo entenderás mejor:
Código PHP:
var_dump(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));// este código me devuelve lo siguiente, bool(false)

$archivos=count(glob($directory."/{*.jpg,*.gif,*.png}",GLOB_BRACE));
echo 
$archivos//Y este me devuelve 1 
Es algo que no entiendo y que no puedo restar 1 ya que también me muestra 1 si en el directorio solo contiene una imagen....

P.d. La barra la incluyo porque en "directory" no la incluyo ya que esa variable la utilizo para más código...

2,-laurenceHR & Arkaitz; Scandir fué la primera opción que intenté ya la he utilizado... Pero la descarté ya que no sabia como implementar que solo buscase archivos con las extensiones .jpg, .png. gif.

El código que utilizaba y que me funcionaba bien aunque contaba tanto archivos y directorios es el siguiente:
Código PHP:
$fotos scandir($directory.'/'); // Extraigo todas los archivos que están en la carpeta $directory.
$cantidad count($fotos) - 2// Elimino los puntos '.' y '..'
echo $cantidad//muestro el recuento final 
Bueno... no se si os he dado alguna pista nueva para que me podáis ayudar a solucionar este dichoso problema. Como plan B había pensado dejar este código y crear un nuevo directorio dedicado exclusivamente a esas imágenes que quiero contar sin que se mezclen con directorios y por lo tanto con el último código que he publicado hacer el recuento... Pero me gustaría poder solucionar sin recurrir al plan B ya que puede que en un futuro me sirva.

Bueno espero vuestras respuestas! un saludo!
Para saber la extensión puedes separar el array con explode y así sacar la extensión de los archivos.

Etiquetas: count, devuelve, directorio, imagenes, vacio
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 22:05.