← PHP

Colocar Header Aleatório

Lida 4215 vezes

Offline

jotix 
Membro
Mensagens 227 Gostos 10
Troféus totais: 27
Trófeus: (Ver todos)
Windows User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Ando a tentar no meu blog, o Eurito, colocar um header aleatório.
De forma que, quando alguém visitar o Eurito, seja exibido um header aleatório.

Para isso, já tenho o script, que exibe aleatoriamente um header, quando a página é carregada:


A página php do header, para exibir a imagem do header, tem uma secção, em que vai chamar uma função de style.css
Código: [Seleccione]
<div class="top">
Indo ao ficheiro style.css, a função top, tem a seguinte descrição:
Código: [Seleccione]
.top {
height:223px;
margin-top:0px;
background:url(images/header.jpg);
 background-repeat:no-repeat;

Mas ao mudar essa parte para:

Código: [Seleccione]
.top {
height:223px;
margin-top:0px;
background:url(http://eurito.net/wp-content/themes/nap/imagem-header.php);
 background-repeat:no-repeat;

Não funciona! O que está errado?
Offline

pedrovsky 
Membro
Mensagens 412 Gostos 0
Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Não podes chamar o arquivo php no css, tens de criar um include no header.php.
Offline

anjo2 
Membro
Mensagens 3020 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Solução trivial e mais correcta:

.htaccess
Código: [Seleccione]
RewriteEngine on
RewriteRule ^images/header.jpg$ includes/randomheader.php [L]
Nota: Se o RewriteEngine já estiver on não precisas de o colocar de novo.

includes/randomheader.php
Código: [Seleccione]
<?php
header('Content-type: image/jpg');
if(rand(1,2) == 1) {
$stream fopen('images/header1.jpg''r');
}
else {
$stream fopen('images/header2.jpg''r');
}
echo stream_get_contents($stream);
fclose($stream);
?>
E voilá, já funciona, em menos de 5min  :superlol:
Offline

jotix 
Membro
Mensagens 227 Gostos 10
Troféus totais: 27
Trófeus: (Ver todos)
Windows User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Mas o header.php vai buscar um div ao style.css

Acho que n dá a tua solução. :-?
Offline

anjo2 
Membro
Mensagens 3020 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Mas o header.php vai buscar um div ao style.css

Acho que n dá a tua solução. :-?
Hã?!? Não percebi
Offline

narg 
Membro
Mensagens 265 Gostos 0
Feedback +2

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 100 Posts

E voilá, já funciona, em menos de 5min  :superlol:
O problema em sites com grande afluência de tráfego, é que o cliente quer faça download do header1.jpg ou do header2.jpg, o browser nunca vai fazer cache dos ficheiros, e se o header1.jpg for visto 100vezes pelo mesmo cliente e tiver 20kb, são 2Mb de tráfego desperdiçados, isto em 2000 visitas são 2Gb

A solução passaria por fazer um MD5 ao ficheiro a ser mostrado
Código: [Seleccione]
<?php

if(rand(1,2) == 1)
$stream fopen('images/header1.jpg''r');
else 
$stream fopen('images/header2.jpg''r');
$imagem stream_get_contents($stream); //lê a imagem para a variavel

$hash md5($imagem);   //Gera o MD5 do ficheiro
$headers getallheaders(); //Vai buscar os headers
if (ereg($hash$headers['If-None-Match'])) {
//Se o browser informar que o ficheiro com a $hash está em cache, enviar header 304
       
header('HTTP/1.1 304 Not Modified');
} else {
  
header("ETag: \"{$hash}\"");
  
header("Content-Length: ".strlen($imagem));
header('Content-type: image/jpg');
echo $imagem;
fclose($stream);
}
exit;
?>


O código não foi testado, foi feito agora, por isso é possível que precise de alguma alteração, o melhor para testar o código é tentar com uma imagem de 4Megas e ver se ela vai ser "apanhada" do servidor ou da cache
Offline

Dav7 
Membro
Mensagens 128 Gostos 8
Troféus totais: 27
Trófeus: (Ver todos)
Tenth year Anniversary Mobile User Windows User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2

que giro, andava a procura da mesma questão mas para blogger, e encontrei este tópico do meu colega Jotix!

Como a net é pequena ;)