Você está aqui: Página Inicial - Tutoriais - PHP - Imagens Aleatórias com PHP

Blog

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
 * @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] . '" alt="" /></a>';
 else :
 $htmlCode = '<img src="' . $image[0] . '" alt="" />';
 endif;
if(!$display)
 return $htmlCode;
echo $htmlCode;
 return;
}

/**
 * Verifica se uma imagem está acessível.
 *
 * @author Miguel Borges
 * @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

Back to top