Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Orides Tomkiel Zmovirzynsk

Criando pasta e arquivos temporários

Recommended Posts

Olá galera, eu estava lendo um tópico sobre esconder o caminho original das imagens do site para que não pudessem ser postadas em outros sites assim diminuindo a tráfego em bytes e as vezes até bloquear a exibição de imagens de áreas restritas do site e pensei em uma forma, sei se quiser é só salvar a imagem e postar, mas ai o tráfego não pesa para para o dono do site http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif , bom gostaria de deixar ai o código, se alguém melhorar ou fazer alteração, por favor compartilhem, ainda mais se isso melhorar a performance ou a integridade do site, também deêm suas opiniões ou criticas, o código pode ser bem melhorado, eu que não tenho muito conhecimento:

 

<?
define("DIRETORIO", "/home/site/public_html/albuns/"); // define a pasta onde estará os arquivos do site
define("TIMENAME", time().rand(111111, 999999)); // número aleatório para impedir nomes de pasta ou arquivos iguais
define("SITE", "/home/site/public_html/"); // pasta raiz do site ( acredito que deva existir um metodo de definir a pasta sem precisar saber qual é a pasta raiz ).

// deleta arquivos e pastas
function rmdir_dir($dirname) {
	if ($dirHandle = opendir($dirname)) { 
		chdir($dirname);
			while ($file = readdir($dirHandle)) {
				if ($file == '.' || $file == '..') continue;
					if (is_dir($file)){
						 rmdir_dir($file);
					} else { 
						unlink($file);
					}
			}
		chdir('..');
		rmdir($dirname);
		closedir($dirHandle);
	}
}

// lista o diretorio e deleta pastas antigas
function ls_dir($dirname) {
	$dir_time = time();
	$dir_del  = $dir_time - 60; // tempo para eclusão dos arquivos
	foreach (glob ($dirname."*", GLOB_ONLYDIR) as $pastas) { // parece que só funciona em linux
		if (is_dir ($pastas)) {
		$diretorio = str_replace($dirname,"",$pastas); // nome da pasta que será apagada
		$dir = substr(str_replace($dirname,"",$pastas), 0, 10); // data da criação da pasta
			if($dir < $dir_del){ // compara tempo de criação da pasta
			 rmdir_dir(DIRETORIO.$diretorio); // apaga temporário
			}		
		}
	}
}

// copia o arquivo para a pasta temporária
function copy_img($foto){	
	ls_dir(DIRETORIO); // exclui temporário
	$nameimg   = time().rand(111111, 999999); // cria o nome da imagem
		if(!file_exists(DIRETORIO.TIMENAME)){	
			$pasta = mkdir (DIRETORIO.TIMENAME , 0777 );
		}
	$src_true  =  DIRETORIO.TIMENAME."/".$nameimg.".jpg";
	$src_false =  "/albuns/".TIMENAME."/".$nameimg.".jpg";
	copy(SITE.$foto, $src_true);	
	return $src_false;
}
?>
<img src="<?=copy_img("caminho_da_imagem")?>" /> <!-- para usar somente informar o caminho da imagem a partir da raiz do site, exemplo, se tem uma pasta imagens informe "imagens/nome_da_imagem.extensão", alem de mostrar a imagem irá apagar todas as imagens e pastas do temporário -->

É isso ai galera, podem usar por sua conta e risco, eu estou usando em um site de teste e pelo resultado está tudo ok, mas mesmo assim acredito que pode ser melhorado, por isso mesmo publiquei aqui no forúm, para o pessoal ajudar a melhorar e compartilhar com quem precisar.

 

 

Att,

 

Orides.

 

www.midiaville.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, excelente seu post, ele me ajudou em um outro problema na página de Intranet do meu serviço.

 

Bloqueei todos os arquivos que os usuários postavam que fica na pasta files com .htaccess que posteriormente coloquei no próprio http.conf, ou seja, o acesso a pasta e a qualquer arquivo fica bloqueado. Surgiu-me a idéia do php pegar o arquivo e copiar temporariamente no servidor para um lugar onde o usuário podesse fazer o download, onde procurei dicas e achei seu post. Ao aplicá-lo surgiram algumas modificações para melhor atender ao meu processo.

 

 

CODE

//func para download

<?php

session_start();

 

if (isset($_SESSION["aut_user"])){ //verifica se é um usuário autorizado

 

define("DIRETORIO", "/var/www/tmp/tmp"); // define a pasta onde estará os arquivos temporário e nome inicial com tmp (usei isso pq primeira tinha jogado pra dentro de /var/www

define("TIMENAME", time().rand(111111, 999999)); // cria nome aleatório

define("SITE", "/var/www"); // pasta raiz do site

$pasta = $_GET["pasta"]; //no caso é fornecido a pasta bloqueada onde está o arquivo tendo em vista que tenho uma pasta files e dentro dela uma pasta para cada serviço diferente

$arquivo = $_GET["arquivo"]; //no caso é fornecido o nome do arquivo que está dentro da $pasta

 

// deleta arquivos e pastas

function rmdir_dir($dirname) {

if ($dirHandle = opendir($dirname)) {

chdir($dirname);

while ($file = readdir($dirHandle)) {

if ($file == '.' || $file == '..') continue;

if (is_dir($file)){

rmdir_dir($file);

} else {

unlink($file);

}

}

chdir('..');

rmdir($dirname);

closedir($dirHandle);

}

}

 

// lista o diretorio e deleta pastas antigas

function ls_dir($dirname) {

// a título de comentário $dirname= DIRETORIO = /var/www/tmp/tmp

$dir_time = time();

$dir_del = $dir_time - 300; // no caso exclue todas as pasta com - 300 segundos (5 minutos para download) rede interna

foreach (glob ($dirname."*", GLOB_ONLYDIR) as $pastas) { // parece que só funciona em linux

if (is_dir ($pastas)) {

$diretorio = str_replace($dirname,"",$pastas); // nome da pasta que será apagada

$dir = substr(str_replace($dirname,"",$pastas), 0, 10); // data da criação da pasta

if($dir < $dir_del){ // compara tempo de criação da pasta

rmdir_dir(DIRETORIO.$diretorio); // apaga temporário

}

}

}

}

 

// copia o arquivo para a pasta temporária

function download_file($pathsitetrue){

ls_dir(DIRETORIO); // exclui temporário

// a título de comentário DIRETORIO = /var/www/tmp

//criei isso para poder fazer o download de arquivos diferentes com extensões diferentes

$dadospath = explode("/", $pathsitetrue); //pega o caminho e separa a fonte do arquivo no caso /files/servico/arquivo.???

$filep = $dadospath[3]; // pega arquivo.???

$dadosf = explode(".", $filep); //separa arquivo da extensão

$narquivo = $dadosf[0];

$nextensao = $dadosf[1];

 

if(!file_exists(DIRETORIO.TIMENAME)){

$pasta = mkdir (DIRETORIO.TIMENAME , 0777 );

//echo "PASTA $pasta";

}

$src_true = DIRETORIO.TIMENAME."/".$narquivo.'.'.$nextensao;

$src_false = '/tmp/tmp'.TIMENAME."/".$narquivo.'.'.$nextensao;

$site = SITE.$pathsitetrue;

copy($site, $src_true);

// a título de comentário SITE = /var/www/

return $src_false;

}

 

$downloadpath = download_file("/files/$pasta/$arquivo");

header("Location: $downloadpath");

 

} else {

header("Location: index.php");

}

 

// essencial colocar um arquivo index.php com o código <? header("Location: ../index.php"); ?> dentro da pasta /tmp de forma que o usuário não veja as pastas e arquivos temporários criados.

 

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.