Preciso baixar o arquivo remoto usando curl.
Aqui está o código de amostra que tenho:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$st = curl_exec($ch);
$fd = fopen($tmp_name, 'w');
fwrite($fd, $st);
fclose($fd);
curl_close($ch);
Mas ele não pode lidar com arquivos grandes, porque ele lê primeiro para a memória.
É possível transmitir o arquivo diretamente para o disco?
fwrite
os dados, já que está usandoCURLOPT_FILE
.fwrite
ANDCURLOPT_FILE
. Passar$fp
é o suficiente. Fiz as duas coisas e acabei com1
o conteúdo final do arquivo.fwrite
Eu uso esta função útil:
Baixá-lo com um passo de 4094 bytes não irá preencher sua memória
Uso:
Você pode então verificar se está tudo bem com:
fonte
fopen()
retorno falso e o tempo limite você coloca no loop while (liguetime()
e faça as contas)stream_copy_to_stream
vez de copiar manualmente o conteúdo, cria um código mais curto. Nem isso nem aquilo funciona comhttps
(a menos que você estipule um$context
). Combinando o estilo procedural - as funções de arquivo não são muito OOP também, e se você colocar opções curl em um array, parecerá muito mais limpo de qualquer maneira.Encontre o código abaixo se você deseja baixar o conteúdo da URL especificada e também deseja salvá-lo em um arquivo.
Se você deseja baixar o arquivo do servidor FTP, você pode usar a extensão FTP php. Encontre o código abaixo:
fonte
quando
curl
é usado para baixar um arquivo grande,CURLOPT_TIMEOUT
é a principal opção para a qual você deve definir.CURLOPT_RETURNTRANSFER
tem que ser verdadeiro no caso de você estar recebendo arquivos como pdf / csv / imagem etc.Você pode encontrar mais detalhes aqui (url correto) Curl Doc
A partir dessa página:
fonte
Você pode usar esta função, que cria um arquivo temporário no sistema de arquivos e retorna o caminho para o arquivo baixado se tudo funcionar bem:
fonte