Utilizar Curl para copiar uma imagem da web em nosso servidor

Vamos realizar um exemplo complexo de utilização de PHP, no qual nos conectamos com um servidor web para receber um arquivo de imagem que está hospedado em tal servidor. Para especificar a imagem que queremos extrair utilizamos a URL e logo especificamos outra rota dentro de nosso disco rígido, onde copiaremos a imagem que recebemos de tal URL.

Vamos utilizar CURL para realizar esta tarefa. Com certeza existem outras maneiras de realizá-la, porém esta me pareceu bastante prática. Curl é uma biblioteca para trabalho e tratamento de informação em URLs, ou seja, para fazer coisas com endereços URL, como explorar o conteúdo que têm, copiar o conteúdo a outros lugares, comprovar a existência de uma URL. Tenho que admitir que não manejo muito a biblioteca Curl, mas poderia dizer que é bastante potente e complexa.

Função para obter uma imagem de uma URL determinada

Vamos tratar já do objetivo final do artigo, que é trazer uma imagem hospedada em uma web ao nosso disco rígido. Para isso, criamos uma função que recebe dois parâmetros. O primeiro é a URL da imagem que desejamos obter e o segundo é o nome do arquivo que queremos gerar no disco rígido, onde copiaremos a imagem. O nome do arquivo destino é relativo ao documento, podendo indicar uma rota relativa, composta por vários diretórios e um nome de arquivo.

function recebe_imagem ($url_origem,$arquivo_destino){ 
$minha_curl = curl_init ($url_origem); 
$fs_arquivo = fopen ($arquivo_destino, "w"); 
curl_setopt ($minha_curl, CURLOPT_FILE, $fs_arquivo); 
curl_setopt ($minha_curl, CURLOPT_HEADER, 0); 
curl_exec ($minha_curl); 
curl_close ($minha_curl); 
fclose ($fs_arquivo); 
}

Nesta função há que registrar uma sessão CURL, com curl_init($url_origem), em onde passamos a URL a qual desejamos acessar.

Logo, utilizamos as funções do sistema de arquivos de PHP para criar um novo arquivo no disco rígido do computador. Se observarmos, se indica o arquivo destino e o parâmetro “w” que quer dizer que a conexão com o arquivo é para escritura.

Em seguida, indicamos um par de opções na sessão CURL.

curl_setopt ($minha_curl, CURLOPT_FILE, $fs_arquivo); 
curl_setopt ($minha_curl, CURLOPT_HEADER, 0);

A mais importante é a primeira, na que se indica o valor CURLOPT_FILE, onde se atribui o arquivo no qual se salvará os dados da URL. O parâmetro $fs_arquivo deve ser um recurso de tipo stream ou fluxo de dados. Neste caso é o arquivo destino, conectado com o sistema de arquivos do servidor anteriormente na mesma função.

A segunda opção definida faz com que o cabeçalho não se inclua na saída.

Para continuar, executamos a conexão CURL com curl_exec() e por último, se fecham tanto a conexão CURL como o arquivo onde salvamos a imagem.

Conclusão
CURL é uma biblioteca muito potente. Esta é só uma das utilidades da biblioteca, que pode servir de exemplo para entender o uso e dar pé a outras utilidades interessantes. Poderia ter complicado um pouco o script simplesmente comprovando que a URL indicada no parâmetro é correta ou realizando outros tipos de ações de validação ou tratamento da imagem recebida na URL.

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Tumblr Posterous