Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
<?php
if(empty($_GET['id'])){
echo "<meta charset='UTF-8'/><b style='font-family:arial;'>Erro na requisiçao</b>";
}else{
$id = $_GET['id'];
$link = arquivos."/".$id;
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$id.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($link));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($link);
}
?>
O poblema é que ele não esta passando o tamanho correto no navegador le passa valores em Kb
Esta baixando normal mais porem nao pega o tamanho original do arquivo por exemplo, envio um arquivo de 100MB e ele me entrega apenas 28,8k estou desconfiando que esses kb/s é do link :s
Bom, não sei como você está montando o path do arquivo, porque pelo visto você tem o diretório de onde estão armazenados e o id que me parece ser o nome do arquivo, mas onde está extensão? Está no id? Mas de qualquer forma tente debugar pra ter certeza de que o caminho está correto e conferir o tamanho do arquivo.
id = nomedoarquivo.rar
meuprojeto/arquivos
sendo que o meu download.php fica no diretorio raiz do meuprojeto espero que entenda :/ e como eu debugo esse ngç ?
Se assim for então não há problemas, até testei o código aqui e funcionou normalmente, imagino eu que "arquivos" seja uma constante com o diretório certo?
Já que "download.php" está na raiz e vc tem um diretório chamado arquivos, você também poderia fazer assim:
__DIR__ . "/arquivos/" . $id;
A constante __DIR__ possui o diretório do arquivo em execução.
Então brigado por explicar mais esta dando no mesmo vejamos com um arquivo de 156MB:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img835.imageshack.us/img835/7071/91ra.png&key=2368814aa0a3df1ce75c0ca13b940eace2dd8331641d220a11c6265e2ad09743" alt="91ra.png" />
Resolvi fazendo estas alteraçoes:
<?php
if(empty($_GET['id'])){
echo "<meta charset='UTF-8'/><b style='font-family:arial;'>Erro na requisiçao</b>";
}else{
$id = $_GET['id'];
$link = arquivos."/".$id;
if( !file_exists($link) ) return;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($id));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($link));
ob_clean();
flush();
readfile($link);
}
?>
Mais se o arquivo tiver mais de 2 pontos ele nao forneçe o tipo do arquivo por exemplo arquivo.oi.rar ele faz o download mais não forneçe o nome com a extensãoHmm limpar o buffer, se assim resolveu deve ser porque antes você esteja fazendo algum tipo de saída talvez, mas enfim o motivo de não estar com extensão é porque você está usando o basename(), ele é desnecessário aí, deixe só $id como estava antes para ficar com o nome completo.
Todas as alteraçoes feitas:
<?php
if(empty($_GET['id'])){
echo "<meta charset='UTF-8'/><b style='font-family:arial;'>Erro na requisiçao</b>";
}else{
$id = $_GET['id'];
$link = arquivos."/".$id;
if( !file_exists($link) ) return;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$id.'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($link));
ob_clean();
flush();
readfile($link);
}
?>
Bom com arquivos em video ele baixa e tals tamanho e nome correto mais quando eu executo em algum player ele não reproduz corretamente! :sAí já pode ser problema do vídeo, pois não há ligação alguma em relação ao download.
Porem acessando direto exemplo arquivos/arquivo.mkv ele fica normal
Agora ele nao esta me Fornecendo o tamanho do arquivo:
<?phpif(empty($_GET['id'])){echo "<meta charset='UTF-8'/><b style='font-family:arial;'>Erro na requisiçao</b>";}else{ $id = $_GET['id']; $link = arquivos/$id; header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="'.$id.'"'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($link)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Expires: 0'); readfile($link);} ?>O que está fazendo esta barra aí?
$link = arquivos/$id;
Se tratando de uma string o certo seria:
$link = arquivos . "/" . $id;
Como estava em seu código anterior, talvez seja devido à isso o arquivo estar sem tamanho, path incorreto. E na questão dos vídeos se for falha de imagem eu desconheço isso :wacko: muito estranho mesmo.
Funcionou aqui mano obrigado :)
Não entendi exatamente o que está acontecendo, está baixando um arquivo em branco? Parece que você não especifica a extensão do arquivo.