Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou fazendo um sistema para um escritório de advocacia e já está praticamente tudo funcionando direitinho. Estou com apenas um problema. Preciso descobrir uma forma de "forçar" o browser a baixar um arquivo PDF ao invés de abri-lo.
O sistema funciona assim:
1. O administrador envia um arquivo e o atribui a um usuário. Pode escolher enviar o arquivo para um diretório ou armazená-lo no banco de dados.
2. O usuário faz login e pode baixar o arquivo.
Porém, há arquivos grandes com extensão PDF, e é ruim que o navegador fique tentando abri-lo ao invés de baixar o arquivo. Veja como estou fazendo:
<?php
include_once('classes/verify.php');
ini_set('max_execution_time', 3600);
$id = $_GET['id'];
include_once('classes/connMySQL.php');
$mySQL = new MySQL;
$getFile = $mySQL->runQuery("SELECT * FROM files WHERE id = '$id' LIMIT 1");
$breakFile = mysql_fetch_array($getFile);
if($breakFile['sp'] == 0) {
print "<meta http-equiv='refresh' content='0; URL=../members/files_folder/"."{$breakFile['url']}"."'>";
die;
}
$type = $breakFile['type'];
$size = $breakFile['size'];
$name = $breakFile['url'];
$data = $breakFile['bin_data'];
header("Content-type: $type");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$name");
header("Content-Description: PHP Generated Data");
echo $data;
?>
Ainda não testei direito quando o arquivo está no banco de dados, mas o navegador sempre tenta abri-lo quando ele está em um diretório. Portanto, considere que o resultado deste teste...
if($breakFile['sp'] == 0) {
print "<meta http-equiv='refresh' content='0; URL=../members/files_folder/"."{$breakFile['url']}"."'>";
die;
}
... é sempre true, de modo que, o script vai sempre executar aquela meta tag, ao invés dos headers abaixo.
Penso que talvez seja possível usar algum header, mas não sei como, então preciso de ajuda.
Muito obrigado!
William
Carregando comentários...