Bem, este parece bastante simples, e é. Tudo o que você precisa fazer para baixar um arquivo no seu servidor é:
file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));
Só há um problema. E se você tiver um arquivo grande, como 100mb. Você ficará sem memória e não poderá baixar o arquivo.
O que eu quero é uma maneira de gravar o arquivo no disco durante o download. Dessa forma, eu posso baixar arquivos maiores, sem ter problemas de memória.
Respostas:
Desde o PHP 5.1.0,
file_put_contents()
suporta escrever peça por peça passando um identificador de fluxo como o$data
parâmetro:Do manual:
(Obrigado Hakre .)
fonte
allow_fopen_url Off
estiver definido no php.ini (boa idéia para segurança), seu script será quebrado.file_get_contents()
também não funcionaria se fosse esse o caso (consulte OP).fopen
; evita efeitos adversos a imagens e outros arquivos de texto não simples.fonte
Tente usar cURL
Não tenho certeza, mas acredito que com a
CURLOPT_FILE
opção que ele escreve, ele puxa os dados, ou seja. sem buffer.fonte
$fh = fopen('/path/to/download/the/file/to.zip', 'w');
e feche comfclose($fh);
depoiscurl_close($ch);
. E prontoCURLOPT_FILE => $fh
a resposta do prodigitalson não funcionou para mim. Eu tenho
missing fopen in CURLOPT_FILE
mais detalhes .Isso funcionou para mim, incluindo URLs locais:
fonte
.php
arquivo e execute no servidor de destinoDownloader:
fonte
set_time_limit (24 * 60 * 60);
tem que ser colocado dentro de um loop. Não tem efeito no início do script.fonte
Existem 3 maneiras:
Você pode encontrar exemplos aqui .
fonte
Use um método simples em php
copy()
Nota: se o arquivo de destino já existir, ele será substituído
Função PHP copy ()
Nota: Você precisa definir a permissão 777 para a pasta de destino. Use este método ao fazer o download para a sua máquina local.
Nota especial: 777 é uma permissão no sistema baseado em Unix com permissão total de leitura / gravação / execução para proprietário, grupo e todos. Em geral, concedemos essa permissão a ativos que não são muito necessários para serem ocultados do público em um servidor da web. Exemplo: pasta de imagens.
fonte
Eu uso isso para baixar o arquivo
fonte
Uma solução PHP 4 e 5:
O readfile () não apresentará nenhum problema de memória, mesmo ao enviar arquivos grandes, por si só. Uma URL pode ser usada como um nome de arquivo com esta função se os wrappers fopen tiverem sido ativados.
http://php.net/manual/en/function.readfile.php
fonte