Fazendo download de um arquivo remoto usando o comando copy do PHP

image_pdfimage_print

A maioria das funções de stream e filesystem aceitam URLs completas e fazem uso da abstração do protocolo wrapper, incluindo a função copy.

Utilizando-a, o programador será capaz de simplificar a codificação necessária para obter um arquivo remoto já salvando onde deseja, como no exemplo abaixo:

$url = "http://drall.com.br/download.teste";

copy($url, '/tmp/' . urldecode(basename($url)));

O código acima irá obter o arquivo download.teste e salvar localmente no servidor que executa o código PHP.

Caso o interesse seja repassar o conteúdo remoto para o cliente que estiver acessando pelo browser sem informar ao cliente o endereço real do arquivo, o código ficaria como no exemplo abaixo:

$url = 'http://drall.com.br/download.teste';

$handle = fopen($url, 'r');

$meta_data = stream_get_meta_data($handle);

// Repassa todos os headers do servidor remoto para o cliente deste script
foreach ( $meta_data['wrapper_data'] as $header ) {
    header($header);
}

// Repassa o conteúdo para o cliente deste script
fpassthru($handle);
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!