Jump to content


Photo

Forcar Download


  • Faça o login para participar
4 replies to this topic

#1 direisc

direisc

    Normal

  • Usuários
  • 90 posts
  • Sexo:Não informado

Posted 13/05/2005, 16:33

eu tentei um codigo q achei pelas buscas do site achei dois um deu erro e outro é esse aqui:
<?
$arquivo=$_GET['arquivo'];

header("Cache-control: private");
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($arquivo));
header("Content-Disposition: attachment; filename=$arquivo");

$arq=fopen($arquivo, 'r');
fpassthru($arq);
fclose($arq);
?>
so q ele não abaixa o arquivo (download) ele mostra no browser, como fazer pra forçar mesmo o download do arquivo?

*** Obs.: eu já utilizei a busca e não encontrei outro alem desse e um forcedownload no header ou coisa parecida q nao deu certo deu foi é pau

#2 lugs

lugs

    Normal

  • Usuários
  • 83 posts
  • Sexo:Não informado
  • Localidade:Capinas - SP

Posted 13/05/2005, 23:13

Não sei se ajuda, mas saca só o q eu encontrei na biblioteca do fpdf no comando de output que força download, é a partir da linha 1030 no arquivo fpdf.php:
 	 //Download file
 	 if(ob_get_contents())
    $this->Error('Some data has already been output, can\'t send PDF file');
 	 if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
    header('Content-Type: application/force-download');
 	 else
    header('Content-Type: application/octet-stream');
 	 if(headers_sent())
    $this->Error('Some data has already been output to browser, can\'t send PDF file');
 	 header('Content-Length: '.strlen($this->buffer));
 	 header('Content-disposition: attachment; filename="'.$name.'"');
 	 echo $this->buffer;

Vale ver aquela linha que analisa qual q é o browser, já q tem essa peculiaridade entre IE e outros, espero que isso possa acabar sendo este o problema...

bons estudos :) espero ajudar.
"Qndo eu apontar para a Lua, não olhe para o meu dedo"

#3 gutostraube

gutostraube

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 14/05/2005, 01:18

Eu fiz um script parecido para forçar download, só que eu pego o mime-type do arquivo e coloco no Content-type e ao invés de usar:
$arq=fopen($arquivo, 'r');
fpassthru($arq);
fclose($arq);
eu uso:
readfile($arquivo);
e funciona na boa...
Gustavo Straube
Analista de Sistemas

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 14/05/2005, 02:35

Opa ... ;)

Para quem quiser saber mais sobre os bugs ocorridos em determinados browsers, e quiser pesquisar de como fazer que o script seja o mais cross-browser possível, vale à pena a leitura:

http://br.php.net/header

PS: Leiam os comentários do usuários sobre a função ... :rolleyes:

E ... até com echo e print funciona ... são várias as formas de se forçar um download ... :)

Flw's, T+V! :DAté mais

#5 direisc

direisc

    Normal

  • Usuários
  • 90 posts
  • Sexo:Não informado

Posted 16/05/2005, 11:57

ou galera obrigado por tudo ae consegui um bem crossbrowser por aqui
<?php
//pegando a variável file passada pelo getURL do FLASH; 
$fileVirtual = $_REQUEST["file"];
//montando o nome final do arquivo... 
$fileAtual = explode("/", $fileVirtual);
$fileAtual = $fileAtual[sizeof($fileAtual)-1];
//abrindo stream de código do arquivo.... 
$file = fopen($fileVirtual,"r");
$content = fread($file, filesize($fileVirtual));
//definindo tipo do arquivo para download... 
$tipo = filetype($fileVirtual);
//definindo header para ação, e emitindo código do arquivo... 
header("Content-type: $tipo");
header("Content-Disposition: attachment; filename=$fileAtual");
echo $content;
?>
este codigo funciona com quaquer file e com qualquer browser pelo menos com boa parte deles :)
pra quem quizer da boa so usa




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq