Resumo : neste tutorial você aprenderá como baixar um arquivo em PHP usando a readfile()
função.
Introdução à função readfile() do PHP
A readfile()
função lê dados de um arquivo e os grava no buffer de saída.
Aqui está a sintaxe da readfile()
função:
readfile (
string $filename ,
bool $use_include_path = false ,
resource $context = ?
) : int|false
Linguagem de código: PHP ( php )
A readfile()
função possui os seguintes parâmetros:
$filename
é o caminho para o arquivo.$use_include_path
se definido comotrue
, a função procurará o arquivo no caminho de inclusão.$context
especifica o contexto do fluxo.
A readfile()
função retorna o número de bytes se ler com êxito os dados do arquivo ou false
se falhar na leitura.
Exemplo de arquivo de download PHP
O exemplo a seguir mostra como fazer download do readme.pdf
arquivo usando o readfile()
exemplo de função.
<?php
$filename = 'readme.pdf';
if (file_exists($filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
}
Linguagem de código: HTML, XML ( xml )
Arquivo de download PHP com limite de taxa de download
Para definir um limite de taxa de download, use o seguinte script:
<?php
$file_to_download = 'book.pdf';
$client_file = 'mybook.pdf';
$download_rate = 200; // 200Kb/s
$f = null;
try {
if (!file_exists($file_to_download)) {
throw new Exception('File ' . $file_to_download . ' does not exist');
}
if (!is_file($file_to_download)) {
throw new Exception('File ' . $file_to_download . ' is not valid');
}
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file_to_download));
header('Content-Disposition: filename=' . $client_file);
// flush the content to the web browser
flush();
$f = fopen($file_to_download, 'r');
while (!feof($f)) {
// send the file part to the web browser
print fread($f, round($download_rate * 1024));
// flush the content to the web browser
flush();
// sleep one second
sleep(1);
}
} catch (\Throwable $e) {
echo $e->getMessage();
} finally {
if ($f) {
fclose($f);
}
}
Linguagem de código: HTML, XML ( xml )
Como funciona.
- Primeiro, defina o caminho para o arquivo (
$file_to_download
) a ser baixado e o nome do arquivo baixado ($client_file
). - A seguir, defina a taxa de download (
$download_rate
) e configure-a para 200 Kb/s - Em seguida, lance uma exceção se o arquivo não existir ou não for um arquivo normal.
- Depois disso, leia a parte do arquivo e durma por 1 segundo até que não haja mais dados do arquivo para ler.
- Por fim, feche o arquivo usando a
fclose()
função.
Resumo
- Use a
readfile()
função para forçar o download de um arquivo em PHP.
Anterior