Jump to content


Massa

Member Since 26/06/2006
Offline Last Active 22/03/2008, 16:24
-----

Posts I've Made

In Topic: Gerenciamento De Grupos E Permissões Via Script

21/03/2008, 10:14

Bem , desenvolvi uma solução que atende minha necessidade e resolvi compartilhar com vcs , uma vez que este "problema" pode ser comum a outros usuários

Arquivo .htaccess (deve estar dentro da pasta que vai conter as imagens que devem ser restritas a usuários logados) , nos exemplos abaixo , deve estar dentro da pasta images
# Bloqueia o acesso a arquivos gif, jpg, jpeg, bmp, png 
<FilesMatch "\.(gif|jpe?g|bmp|png)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>

Arquivo filtra_imagem.php (arquivo responsável por ler a imagem e exibila quando o usuário estiver logado) e deve estar no mesmo nível do arquivo que o chama , que é pagina.php
<?php
$caminho_e_imagem = explode ('&',$_SERVER['QUERY_STRING']);

define('MAX_WIDTH', 200); 
define('MAX_HEIGHT', 150);

// Pega onde está a imagem 
$image_file = str_replace('..', '', $caminho_e_imagem[0]); 
$image_path = str_replace('..', '', $caminho_e_imagem[1]).$image_file;

if ($extensao == 'jpg' || $extensao == 'jpeg')
{ $img = @imagecreatefromjpeg($image_path); }
else if ($extensao == 'png')
{ 
	$img = @imagecreatefrompng($image_path); 
	// Se a versão do GD incluir suporte a GIF, mostra... 
}
elseif ($extensao == 'gif')
{$img = @imagecreatefromgif($image_path);}

// Carrega a imagem 
$img = null; 

$extensao = strtolower(end(explode('.',$image_path))); 

if ($extensao == 'jpg' || $extensao == 'jpeg')
{ $img = @imagecreatefromjpeg($image_path); }
else if ($extensao == 'png')
{ 
	$img = @imagecreatefrompng($image_path); 
	// Se a versão do GD incluir suporte a GIF, mostra... 
}
elseif ($extensao == 'gif')
{$img = @imagecreatefromgif($image_path);} 

// Cria uma imagem de erro se necessário 
if (!$img OR $_SESSION['logado'] != 1)
{ 
	$img = imagecreate(MAX_WIDTH, MAX_HEIGHT); 
	imagecolorallocate($img, 204, 204, 204); 
	$c = imagecolorallocate($img, 153, 153, 153); 
	$c1 = imagecolorallocate($img, 0, 0, 0); 
	imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c); 
	imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c); 
	if($image_file == 'faca_login.jpg' OR $_SESSION['logado'] != 1)
	{imagestring($img, 2, 9, 55, 'Faça o Login para ver a Imagem', $c1);}
	else
	{imagestring($img, 2, 12, 55, 'Imagem solicitada não exixte', $c1);}
} 

// Mostra a imagem 
header('Content-type: image/jpeg'); 
imagejpeg($img); 
?>

E por fim , sua pagina pagina.php onde deveriam estar as url's que mostram as imagens
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
// se estiver logado mostra a imagem
if($_SESSION['logado'] == 1)
{echo "<img border=\"0\" src=\"filtra_imagem.php?foto.jpg&amp;images/\">";}
else
{echo "<img border=\"0\" src=\"filtra_imagem.php?faca_login.jpg&amp;images/\">";}
?>
</body>
</html>

onde foto.jpg é a imagem que será exibida só para usuários logados e está localizada dentro da pasta images

Abs.
Massa

In Topic: Gerenciamento De Grupos E Permissões Via Script

03/03/2008, 19:18

Na verdade .htacess nao passa via PHP O.o

A request vai pro apache, que dae passa pelo htacess e retorna para o apache e dai sim para o php ;)

Pode olhar este link, aqui tem uma boa referência para o seu problema: LINK

Em tempo: HTTP authentication with PHP

[]'s


Valeu !!!!!!!!

Abs.
Massa

In Topic: Gerenciamento De Grupos E Permissões Via Script

02/03/2008, 22:58

não entendo muito disso, mas eu tenho uma idéia de que é possível se fazer algo do tipo:

o endereço direto fica www.seusite.com/download.zip por exemplo

e se você fizer uma página download.php, que verifica uma querystring file=arquivo, e, no script da página, ficaria algo assim:

//Você coloca o modo como vc checa os usuários aqui, se liberar, roda o codigo abaixo
$arquivo=$_GET[´file´];
$arquivo=$arquivo.".zip";
$download="www.seusite.com/".$arquivo;
header("location:$download");

Não sei se deu pra entender. Mas, tipo assim, o que acontecerá será você chamar uma página da forma
<a href="download.php?file=teste">baixe aqui</a>

Ou você pode mascarar esse ?file com alguma das técnicas já apresentadas neste fórum.

Se você perceber, com a autenticação, se alguém tentar www.seusite.com/download.php?file=teste, e n for registrado, receberá o erro e retornará à página de visitantes. Claro, pra dificultar, você poderia deixar numa pasta tipo 45875164files XDD
Ae o registrado que passase o endereço pra alguem n saberia da onde estaria puxando o arquivo

Espero ter ajudado, mesmo com meu pouco conhecimento

Flws!

PS:desculpem. gosto de usuar variáveis separadas xD sei que daria pra montar a variável $download diretamente.


Amigo , obrigado pela ajuda , MAS Isso que vc. está me dizendo eu já fiz e Funciona !!!

O problema não é este !!!

Parafrazeando seu post , se o Usuário digitar www.seusite.com.br/teste.zip , ELE TEM ACESSO AO ARQUIVO ZIP SEM PASSAR POR NENHUM SCRIPT de validação PHP !!!!

Então tenho que brincar com as permissões do servidor , grupos e usuários do Servidor , mas quero fazer isso via PHP.

Resumindo: se alguém tiver um tuto para trabalhar com .htacess via Script PHP eu agradeço IMENSAMENTE !!!

Abs.
Massa

In Topic: Gerenciamento De Grupos E Permissões Via Script

03/02/2008, 08:23

Acho que não fui muito claro.

Consigo redirecionar perfeitamente os usuários não registrados , quando eles tentam acessar por ex:
www.meusite.com.br/conteudo_so_para_registrados.php

Quando o login e senha não conferem , os redireciono através de header('Location:') para
www.meusite.com.br/conteudo_para_visitantes.php

Até aqui não existem problemas

O Problema é que em conteudo_so_para_registrados.php existem imagens e arquivos para download que também devem ser restritos a usuários registrados.

Daí , se um Visitante usar a URL: www.meusite.com.br/images/imagem_so_para_registrado.jpg (que é por exemplo uma destas imagens) , ele vai visualizar a imagem no navegador ,.... ou se ele usar a URL: www.meusite.com.br/download/arquivo.zip (que é um destes arquivos para download) , ele fará o download mesmo sendo visitante.

ESSE é o problema que preciso contornar !!!
Acesso Direto a URL (de arquivos que são exclusivos a registrados) por Visitantes

Preciso gerenciar as permissões e os Grupos que terão acesso aos diretórios /images e /download através de Script PHP , interagindo minha tabela Mysql de usuários registrados ao grupo que terá permissão de leitura dos arquivos contidos nestas pastas.

Acho que agora Ficou claro.

Alguém Mais ?!

In Topic: Localizar Pais Do Visitante

13/08/2007, 19:13

se ajudar alguem, eu achei isso:
http://ip-to-country...country.csv.zip
trata-se de um csv com a base de faixas de ips do mundo, fiz um php que traduz isso para um banco mysql, aqui:

<?php/* O BANCO DE DADOS DEVE TER SIDO PREVIAMENTE INSTALADO *///faz a checagem de permissao -- ABRE//tempo em segundos$tempo = 300; //5 minutos//limpa a base atualmysql_query("TRUNCATE TABLE ".$tableprefix."ipcountry") or die("Erro ao limpar base atual:<br />".mysql_error());//nome do arquivo csv$arquivo = 'mods/mod_ipcountry/ip-country.csv';//seta o tempo limiteset_time_limit($tempo);//linha atual$row = 1;//abre o arquivo como leitura$handle = fopen ($arquivo,"r");//para o script por 3 segundossleep(5);while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {	$num = count ($data);	$query = "INSERT INTO ".$tableprefix."ipcountry (faixa_ini, faixa_fin, abrev_2, abrev_3, pais) VALUES (";	for ($c=0; $c < $num; $c++) {		if($c < 4){$query .= "'".addslashes($data[$c])."',";}		else{$query .= "'".addslashes($data[$c])."'";}	}	$query .= ")";	mysql_query($query) or die("Erro ao inserir campo no banco de dados, linha ".$row.":<br />".mysql_error());	echo "Linha $row ok!<br />";	$row++;}fclose ($handle);//indexa as faixas de IP´S//mysql_query("ALTER TABLE ".$tableprefix."ipcountry ADD INDEX (`faixa_ini`, `faixa_fin`)") or die("Erro ao indexar as colunas de faixas de IP's".mysql_error());echo "<br /><br />CONCLUÍDO!!!";?>

e fiz uma funcao para você retornar os resultados, aqui:
<?//esta função retorna os dados do pais do ip de acessofunction dados_ip($ip_com_pontos){//converte o ip para IPv4$long = ip2long($ip_com_pontos);	//checa se é válido	if ($long == -1 || $long === FALSE) {	die('IP inválido!');	} 	//caso seja executa -- ABRE	else {				//chama a prefix da tabela		global $tableprefix;		//formata o IPv4		$ip_number = sprintf("%u", $long);		//faz a consulta		$sql = "SELECT abrev_2, abrev_3, pais FROM ".$tableprefix."ipcountry WHERE $ip_number >= faixa_ini AND $ip_number <= faixa_fin";		$query = mysql_query($sql) or die("Erro ao buscar faixa de ip:<br />".mysql_error());				//dados da busca		$dados = mysql_fetch_array($query);		//retorna o numero de valores encontrados para a consulta		$nresultados = mysql_num_rows($query);				//define sucesso		$sucesso = $nresultados == 0 ? 0 : 1;				$flag = $sucesso == 1 ? strtolower($dados['abrev_2']) : 'none';				//url da imagem		$urlimg = $GLOBALS['gsa_urlbase']."/mods/mod_ipcountry/flags/".$flag.".png";				$dadosderetorno[0] = $sucesso; //se houve retorno		$dadosderetorno[1] = $sucesso == 1 ? $dados['abrev_2'] : 'Indefinido'; //abreviação com 2 letras 		$dadosderetorno[2] = $sucesso == 1 ? $dados['abrev_3'] : 'Indefinido'; //abreviação com 3 letras 		$dadosderetorno[3] = $sucesso == 1 ? ucfirst(strtolower($dados['pais'])) : 'Indefinido'; //pais em ingles		$dadosderetorno[4] = $ip_com_pontos; //IP normal		$dadosderetorno[5] = $ip_number; //IPv4		$dadosderetorno[6] = $urlimg; //caminho completo para imagem do pais				//retorna os dados		return($dadosderetorno);			} //caso seja executa -- FECHA}?>

flws

ahh, tem umas coisinhas do meu sistema, então se alguem for aproveitar deverá retirar algumas coisinhas dos codigos
o banco de dados pode ser criado assim:

//nome da tabela$nomedatabela = $tableprefix."ipcountry";//cria tabela ipcountry $sql = 'CREATE TABLE '.$nomedatabela.' (  `id` int(5) NOT NULL AUTO_INCREMENT,  `faixa_ini` DOUBLE NOT NULL,  `faixa_fin` DOUBLE NOT NULL,  `abrev_2` char(2) collate latin1_general_ci NOT NULL,  `abrev_3` char(3) collate latin1_general_ci NOT NULL,  `pais` varchar(50) collate latin1_general_ci NOT NULL,  PRIMARY KEY (id))';//se criada com sucessoif(mysql_query($sql)){//mostra mensagem finalecho "<li>A tabela <b>".$nomedatabela."</b> foi criada com sucesso!<br>";} //se a tabela não foi criadaelse {die("<li>Erro na criação da tabela ".$nomedatabela.": " . mysql_error() . '<br />');}



Utilizo um script bem parecido nas minhas aplicações !!!

Complementando a Função do amigo Georgewar , ...caso vc. queira fazer uma seleção automática de Idioma de seu site , segundo o país do Internauta.
Ex. Países cuja idioma oficial é o Inglês ,....países cuja Idioma oficial é o Espanhol , e Português como Default

Faça dentro da função , um Switch analizando o conteudo da variavel $flag conforme descrito abaixo
switch( $flag ){				case us:	case gb:	case au:	case za:	case jm:	case ne:	case bs:	case gh:	case ca:	case in:	case ie:	case ug:	case tz:	case cm:	case nl:	case ph:	case id:	case ke:	case pk:		$lingua = 'lang_english';		break;			case bo:	case ar:	case cl:	case co:	case cr:	case xxxxxx;	case ec:	case sv:	case es:	case gt:	case hn:	case mx:	case ni:	case pa:	case py:	case pe:	case pr:	case uy:	case ve:		$lingua = 'lang_spanish';		break;					default:		$lingua = 'lang_portuguese_brazil';}

não esqueça de retornar o valor $lingua da função
ex:
$dadosderetorno['lingua'] = $lingua

Este código acima , escolhe entre as linguas Espanhol , Ingles e Portugues como Default.

Feito isso , vc. faz um Include do arquivo (lang_principal.php) com todos os textos utilizados no seu site
include ('language/'.$dadosderetorno['lingua'].'/lang_principal.php');
Onde lang_principal.php é o arquivo de um determinado idioma , colocado na respectiva pasta definida na variavel $lingua do Switch

Este conceito "programático" foi baseado nos scripts de Lingua do Fórum PHPBB , onde em sua concepção , o mais difícil foi , sem dúvida nenhuma , descobrir a lingua oficial de cada pais do Switch,....rs

Quem disse que Open Source não presta ,...rs

Façam bom Proveito

Abs.
Massa

PS: retificando que xxxx foi interpretado como palavrão , xxxx alterado do Case , foi interpretação erronea do querido palavrão "Oráculo Bundowski" cujo pobre país tem estas duas simpáticas letras como como iniciais , mais especificamente ,... C e U

IPB Skin By Virteq