Como baixar arquivos grandes através do script PHP [duplicado]
Esta pergunta já tem uma resposta aqui:
Download de arquivos grandes de forma confiável em PHP 3 respostas Usando o PHP, estou tentando servir arquivos grandes (até possivelmente 200 MB) que não estão em um diretório acessível pela web devido a problemas de autorização. Atualmente, eu uso umreadfile()
chame alguns cabeçalhos para servir o arquivo, mas parece que o PHP está carregando na memória antes de enviá-lo. Pretendo implantar em um servidor de hospedagem compartilhado, o que não me permitirá usar muita memória ou adicionar meus próprios módulos Apache, como o X-Sendfil
Não posso deixar meus arquivos em um diretório acessível pela Web por razões de segurança. Alguém conhece um método que consome menos memória que eu poderia implantar em um servidor de hospedagem compartilhado?
EDITAR
if(/* My authorization here */) {
$path = "/uploads/";
$name = $row[0]; //This is a MySQL reference with the filename
$fullname = $path . $name; //Create filename
$fd = fopen($fullname, "rb");
if ($fd) {
$fsize = filesize($fullname);
$path_parts = pathinfo($fullname);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-type: application/pdf");
break;
case "zip":
header("Content-type: application/zip");
break;
default:
header("Content-type: application/octet-stream");
break;
}
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
header("Content-length: $fsize");
header("Cache-control: private"); //use this to open files directly
while(!feof($fd)) {
$buffer = fread($fd, 1*(1024*1024));
echo $buffer;
ob_flush();
flush(); //These two flush commands seem to have helped with performance
}
}
else {
echo "Error opening file";
}
fclose($fd);