Quero exigir que um arquivo seja baixado quando o usuário visitar uma página da web com PHP. Eu acho que tem algo a ver com file_get_contents
, mas não sei como executá-lo.
$url = "http://example.com/go.exe";
Depois de baixar um arquivo, header(location)
ele não está redirecionando para outra página. Apenas para.
Respostas:
Leia os documentos sobre o readfile da função PHP embutida
Além disso, certifique-se de adicionar o tipo de conteúdo adequado com base no seu aplicativo de arquivo / zip, aplicativo / pdf etc. - mas apenas se você não desejar acionar a caixa de diálogo Salvar como.
fonte
Ou, quando o arquivo não pode ser aberto com o navegador, você pode apenas usar o
Location
cabeçalho:fonte
$file
(que contém a parte http), mas um nome de arquivo válido.está correto
ou melhor para exe tipo de arquivos
fonte
Exiba seu arquivo primeiro e defina seu valor em url.
index.php
download.php
fonte
Caso você precise baixar um arquivo com um tamanho maior que o limite de memória permitido (
memory_limit
configuração ini), o que causaria oPHP Fatal error: Allowed memory size of 5242880 bytes exhausted
erro, você pode fazer o seguinte:fonte
ob_flush()
, pode haver o erro: ob_flush (): falha ao liberar o buffer. Nenhum buffer para liberar . envolva-o comif (ob_get_level() > 0) {ob_flush();}
(Referência stackoverflow.com/a/9182133/128761 )Uma modificação da resposta aceita acima, que também detecta o tipo MIME em tempo de execução:
fonte
O código a seguir é uma maneira correta de implementar um serviço de download em php, conforme explicado no tutorial a seguir
fonte
file_name
efilePath
. Não é uma prática de codificação muito boa. Especialmente sem explicação. O link para o tutorial externo não é útil.tente isto:
fonte
http://php.net/manual/en/function.readfile.php
É tudo o que você precisa. "Monkey.gif" muda para o seu nome de arquivo. Se você precisar fazer o download de outro servidor, "monkey.gif" mude para " http://www.exsample.com/go.exe "
fonte
Você também pode transmitir o download por streaming, o que consumirá significativamente menos recursos. exemplo:
No exemplo acima, estou baixando um test.zip (que na verdade era o zip do android studio na minha máquina local). php: // output é um fluxo somente de gravação (geralmente usado por eco ou impressão). depois disso, você só precisa definir os cabeçalhos necessários e chamar stream_copy_to_stream (origem, destino). O método stream_copy_to_stream () atua como um canal que pega a entrada do fluxo de origem (fluxo de leitura) e o direciona para o fluxo de destino (fluxo de gravação) e também evita o problema de memória permitida esgotada, para que você possa baixar arquivos maiores que o seu PHP
memory_limit
.fonte
As respostas acima de mim funcionam. Mas, gostaria de contribuir com um método sobre como executá-lo usando GET
na sua página html / php
e
download.php
contémisso deve funcionar em qualquer tipo de arquivo. isso não é testado usando POST, mas pode funcionar.
fonte