Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Obtener una imagen aleatoria, algo no funciona

Estas en el tema de Obtener una imagen aleatoria, algo no funciona en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, estoy escribiendo una clase para obtener una imagen aleatoria de un directorio especifico. El problema es que la clase no devuelve la imagen, no ...
  #1 (permalink)  
Antiguo 08/05/2007, 20:01
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Obtener una imagen aleatoria, algo no funciona

Hola, estoy escribiendo una clase para obtener una imagen aleatoria de un directorio especifico. El problema es que la clase no devuelve la imagen, no da ningun error, pero no hace lo que deberia.

La clase es esta:

Código PHP:
class ImagenAleatoria {
   private 
$directorio;
   private 
$archivos = array();
   private 
$extensiones = array("jpg""jpeg""gif""png");
   
   function 
__construct($directorio) {
      if(
is_dir($directorio)) {
         
$this->directorio $directorio;
     
$this->leerDirectorio();
      }
      else
         die(
"Debe pasarse el nombre de un directorio");
   }
   
   public function 
obtenerImagen() {
      
$cantArchivos count($this->archivos);
      
$aleatorio rand(0$cantArchivos);
      
print_r($archivos);
      return (
$directorio."/".$archivos[$aleatorio]);
   }
   
   protected function 
leerDirectorio() {
      
$d opendir($this->directorio) or die("No se pudo abrir el directorio");
      
$archivo 0;
      while ((
$f readdir($d)) != false) {
     if (
is_file($this->directorio."/".$f)) {
        
$extencion substr($f, (strpos($f".") + 1));
        
$extencion strtolower($extencion);
        if (
in_array($extencion$this->extensiones)) {
           
$this->archivos[$archivo] = $f;
           
$archivo++;
        }
     }
      }
      
closedir($d);
   }

Y este es un ejemplo de su uso:

Código PHP:
$IAleatoria = new ImagenAleatoria("directorio");
echo 
"<img src=\"".$IAleatoria->obtenerImagen()."\" />"
Seguro es un error tonto, pero la verdad no lo veo, si alguien tiene alguna idea, que por favor me lo diga

Ah, y si quieren tambien pueden criticar el diseño de la clase y dar ideas sobre como mejorarlo.

Muchas gracias
  #2 (permalink)  
Antiguo 08/05/2007, 21:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Obtener una imagen aleatoria, algo no funciona

El error aparente que veo esta aqui:
Código PHP:
 public function obtenerImagen() {
      
$cantArchivos count($this->archivos);
      
$aleatorio rand(0$cantArchivos);
      
print_r($archivos);
      return (
$directorio."/".$archivos[$aleatorio]);
   } 
Cambialo por esto:
Código PHP:
 public function obtenerImagen() {
      
$cantArchivos count($this->archivos);
      
$aleatorio rand(0$cantArchivos);
      return (
$directorio."/".$this->archivos[$aleatorio]);
   } 
Como tip, en lugar de usar die("algo"); Usa Excepciones para enviar errores.

Saludos.
  #3 (permalink)  
Antiguo 08/05/2007, 23:00
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Re: Obtener una imagen aleatoria, algo no funciona

Mil gracias GatorV, no puedo creer que era algo tan simple, tengo que ver el codigo con mas detenimiento

Tambien le hice una pequeña modificacion al codigo, la funcion obtenerImagen queda asi:

Código PHP:
   public function obtenerImagen() {
      
$cantArchivos count($this->archivos) - 1;
      
$aleatorio rand(0$cantArchivos);
      return (
$directorio."/".$this->archivos[$aleatorio]);
   } 
$cantArchivos tiene que tener uno menos ya que el array $archivos empieza en 0.

Y muchas gracias por el tip, voy a aprender a usar excepciones

Saludos
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 19:33.