Twitter feed

    Imagens Aleatórias com PHP

    Enviado em 12 de Fevereiro de 2011 por Miguel Borges com 2 Comentários

    Os iniciantes em Web Design vêem-se muitas vezes com esta dúvida: como mostrar imagens de forma aleatória.

    Existem muitas formas para resolver este problema, mas todos eles andam à volta da função rand(). Vou em seguida mostrar uma forma para resolver este problema de forma estruturada.

    É comum que todos os sites tenham uma ou mais páginas de só com funções, ou seja, o único código que estas contem-em são funções em PHP. É num destes ficheiros, que colocaremos a nossa função “displayRandomImage()“. Se não tem nenhum deste tipo de ficheiros, crie-o e coloque a função no fim do ficheiro (antes da tag “?>”).

    /**
     * Mostra uma imagem aleatória, em base num array passado por parâmetro.
     * Se a imagem seleccionada não existir, é mostrada a imagem padrão.
     *
     * A imagem pode conter uma hiperligação http.
     *
     * @author Miguel Borges <miguelborges@miguelborges.com>
     * @param array $images Array que contém as imagens.
     * @param int $default Posição da imagem padrão.
     * @param bool $display Opcional. O defeito é true. Se imprime (true) ou retorna (false).
     * @return string Código (x)HTML de uma imagem ou void.
     * @throws Exception
     */
    function displayRandomImage(array $images, $default = 0, $display = true) {
    	$index = rand(0, count($images) - 1);
    
    	if(is_array($images[$index])) :
    		if(isset($images[$index][1]) and !empty($images[$index][1])) :
    			$image = array($images[$index][0], $images[$index][1]);
    		else :
    			$image = array($images[$index][0]);
    		endif;
    	else :
    		$image = array($images[$index]);
    	endif;
    
    	// testa se a imagem seleccionada existe/está disponível
    	if(!imageExist($image[0])) :
    		if(!is_numeric($default)) throw new Exception('Parameter $default must be a numeric type.');
    
    		// verifica se a imagem padrão é válida
    		if($default < 0 or $default > count($images)) throw new Exception('Invalid default image.');
    
    		$image = (array) $images[$default];
    
    		// testa se a imagem por defeito existe/está disponível
    		if(!imageExist($image[0])) throw new Exception('Default image don\'t exist.');
    	endif;
    
    	if(isset($image[1])) :
    		$htmlCode = '<a href="' . $image[1] .'"><img src="' . $image[0] . '" /></a>';
    	else :
    		$htmlCode = '<img src="' . $image[0] . '" />';
    	endif;
    
    	if(!$display)
    		return $htmlCode;
    
    	echo $htmlCode;
    	return;
    }
    
    /**
     * Verifica se uma imagem está acessível.
     *
     * @author Miguel Borges <miguelborges@miguelborges.com>
     * @param string $image Endereço da imagem.
     * @return bool True em caso de estar acessível, ou false caso contrário.
     */
    function imageExist($image) {
    	return @fopen($image,'r') === FALSE ? false : true;
    }

    A função recebe um array que deve conter os endereços http das imagens que queremos mostrar, a posição da imagem padrão (para o caso de uma das outras não estar disponível, começando em 0 [opcional]) e um booleano (opcional), onde se informa, se o resultado da função é para imprimir o resultada da função na página, ou se é para o retornar. A função também pode lançar excepções, caso seja encontrado algum erro.

    Na linha 15 é gerado um número aleatório entre 0 ao tamanho do array “$images”, que será a posição do array a ser mostrada.
    Nas linha 17 a 25 é testado se a posição gerada anteriormente, se existe um array (pois é possível ter numa posição do array passado por parâmetro, outro array, em que na posição “0″ se encontra o endereço da imagem, e na posição “1″ o endereço da hiperligação da imagem). Isto é útil para mostrar publicidade num site, em que cada imagem, redirecciona para uma página diferente.
    Nas linha 27 a 38 é testado se a imagem seleccionada está disponível, e se não estiver, utiliza a imagem padrão, fazendo as respectivas validações.
    Nas linhas seguintes é construído o código HTML da imagem/hiperligação, e em seguida mostrada ou retornada (conforme o valor de “$display”).

    A função “imageExist()” é uma função auxiliar da anterior, que verifica se uma imagem está disponível ou não;

    Agora que já temos a nossa função feita, é necessário criar um array, com os endereços das imagem a mostrar. Também é de boas práticas haver sempre um ficheiro de configuração em todos os sites. Este ficheiro geralmente contém as credenciais de acesso à base de dados entre outras configurações. É neste ficheiro que iremos criar o nosso array (se não tem nenhum deste tipo de ficheiros, crie-o).

    $images = array(
    	'http://www.omeusite.com/images/image1.jpg',
    	'http://www.omeusite.com/images/image2.jpg',
    	'http://www.omeusite.com/images/image3.jpg',
    	array('http://www.omeusite.com/images/image4.jpg', 'http://www.omeusite.com/pagina1.html'),
    	array('http://www.omeusite.com/images/image5.jpg', 'http://www.omeusite.com/pagina2.html'),
    	array('http://www.omeusite.com/images/image6.jpg', 'http://www.omeusite.com/pagina3.html'),
    	array('http://www.omeusite.com/images/image7.jpg', ''),
    	array('http://www.omeusite.com/images/image8.jpg', ''),
    	array('http://www.omeusite.com/images/image9.jpg'),
    	array('http://www.omeusite.com/images/image10.jpg'),
    	array('http://www.omeusite.com/images/image11.jpg'),
    );
    

    As linhas 2, 3 e 4, conte-em os endereços das imagens as mostrar.
    Da linha 8 a 12, também conte-em os endereços das imagens as mostrar, mas de uma maneira diferente.
    As linhas 5, 6 e 7, para além dos endereços das imagens as mostrar, também defines os endereços para onde as imagem redireccionam.

    Agora já temos o que é necessário, bastando fazer uma chamada à nossa função, na página onde for necessário, incluindo os ficheiros criados anteriormente.

    <?php include "config.php"; ?>
    <?php include "includes/functions.php"; ?>
    
    <?php displayRandomImage($images); ?>
    <?php displayRandomImage($images, 0, true); ?>
    <?php echo displayRandomImage($images, 3, false); ?>
    

    Espero que tenham entendido e gostado desse script!
    Abraços

    2 Respostas a “Imagens Aleatórias com PHP”

    1. Paulo Proença 13 de Fevereiro de 2011

      O seu script está muito bem pensado. No entanto penso que devia proteger o facto de não ser possivel aceder à imagem. Isso pode ser feito por exemplo com o fopen.

      if(fopen($images[$index],”r”))
      // apresenta imagem pretendida com ou sem link
      else
      //apresenta imagem por defeito

      Responder

      • mapb_1990 13 de Fevereiro de 2011

        obrigado pelo seu comentário e pela sua dica.
        actualizei o código acima, levando em consideração a verificação que sugeriu.

        Responder

    Deixe o seu comentário

    Notifique-me de novos comentários via e-mail. Também pode se inscrever sem comentar.