Michael Mafort

Facilidades para sua vida – Parte 6 – Acesso restrito para imagens

by on jan.29, 2009, under Facilidades para sua vida, Linux, PHP

Bom, hoje no grupo de php surgiu uma dúvida de como fazer um bloqueio de acesso a imagens caso o usuário não tenha permissão (não esteja logado), então sugeri que fosse feito utilizando regras do htaccess, vejamos como ficou.

Vamos seguir o exemplo da seguinte estrutura:

htdocs
- scripts
- img
- etc…

Dentro do diretório img que temos as imagens restritas, vamos criar um arquivo .htaccess.
Lembrando que antes de usar os arquivos .htacess o seu apache deve estar configurado para leitura destes arquivos e o módulo rewrite habilitado.

Para isto basta verificar se seu httpd.conf está com estas configurações:

1
2
3
4
5
6
7
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
 
<directory>
    Options Indexes FollowSymLinks
    AllowOverride All
</directory>

Se não tiver basta descomentar as linhas do LoadModule e AddModule, e adicionar dentro do seu directory root as duas linhas, Options e AllowOverride.

Agora vamos criar nosso arquivo .htaccess:

1
2
3
4
5
6
7
8
9
10
11
<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine on
 
    #Verificamos se a imagem é .jpg ou .gif
    RewriteCond %{REQUEST_FILENAME} (.jpg|.gif)$
 
    #Redirecionamos a requisição para o arquivo index.php
    #passando como parametro get o nome da imagem  $1
    RewriteRule ^(.*)$ index.php?image=$1 [NC,L]
</IfModule>

Criamos também o arquivo index.php dentro do diretório img, vamos ao exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
//Inicia a sessão
@session_start();
//Setamos a sessão para o teste com o valor 1
//Para testar se não o usuário não está logado, exclua a linha abaixo
$_SESSION['uid'] = 1;//logado
 
/*
Verifica se existe a sessão, deve ser feito de acordo com sua necessidade
Este é apenas um exemplo didático
*/
if( isset($_SESSION['uid']) ){
    //Define o header para o mime type do arquivo requisitado image/jpg ou image/gif
    header("Content-Type: ".mime_content_type($_GET['image']) );
 
    //Lê o arquivo e joga na saída
    readfile($_GET['image']);
}else{
    //Define o Contenty-type como image/gif
    header("Content-Type: image/gif" );
 
    //Lê o arquivo e joga na saída
    readfile('deny.gif');
}
 
?>

Crie um arquivo chamado deny.gif no seu diretório img para ser exibido caso o usuário não tenha permissão para visualizar as imagens.

Pronto, o acesso as suas imagens já estará bloqueado para usuários que não estejam logados.

Abraço!


Leave a Reply

Procurando por algo?

Digita ai pra ver se encontramos:

Não achou o que procurava? Envie um comentário para o autor informando o que deseja!

Meus amigos!

Links recomendados