Arquivo de download PHP

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|falseLinguagem de código:  PHP  ( php )

A readfile()função possui os seguintes parâmetros:

  • $filenameé o caminho para o arquivo.
  • $use_include_pathse definido como true, a função procurará o arquivo no caminho de inclusão.
  • $contextespecifica o contexto do fluxo.

A readfile()função retorna o número de bytes se ler com êxito os dados do arquivo ou falsese falhar na leitura.

Exemplo de arquivo de download PHP

O exemplo a seguir mostra como fazer download do readme.pdfarquivo 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *