Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Query Strings para download arquivo


_Vinny_

Pergunta

É o seguinte, estou usando esse tutorial:

http://scriptbrasil.com.br/forum/index.php?showtopic=89161

Eu uso ele há muito para páginas, mas tentei usar para download de arquivo, modificando tenho o seguinte código:

download.php

<?php
if (isset($_GET['zip'])){
    switch ($_GET['zip']){
        case 'livro':
          include "files/livro.zip";
          break;
    }
}else{
    include "index.php";
}
?>

Dai eu acesso download.php?zip=livro, e carrga essa página:

11hyudt.jpg

Tem alguma forma de resolver esse problema?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Beleza _Vinny_? Pois então cara, o problema é simples: MIME TYPE/Content-type errado. Se tu estiver usando firefox, vai no menu Ferramentas->Propriedades da página e olha na linha Tipo. Provavelmente estará text/html que é o content-type padrão configurado no cabeçalho http pelo interpretador de PHP.

O que está acontecendo, é qhttp://scriptbrasil.com.br/forum/style_images/sb_images/folder_editor_images/rte-code-button.pngue tu está incluindo os dados do livro.zip e eles estão sendo interpretados como html pelo browser, o que no fim das contas vira nessa "inhaca".

O que tu precisa é mudar o mime type, mudando os parametros no cabeçalhoda resposta. Para isso se usa a função header().

Aqui tu encontra uma lista dos mime types e para que cada um serve. O mime type padrão para se enviar um arquivo para download é: application/octet-stream. Se apenas mudar o mime type, o arquivo atual é que vai ser enviado para download. Para enviar outro arquivo, daí se configura o Content-Disposition, segue alguns exemplos que encontrei:

script pronto

tutorial

Abraço

Editado por Danilo Moraes
Link para o comentário
Compartilhar em outros sites

  • 0

Para download você deve enviar cabecalhos HTTP diferentes se não o browser acha que é para imprimir e mostra de fato o código fonte mesmo que binario como no seu caso ... tem muito exemplos na internet ... basta adaptar ao que quer ... Que é quase a mesma coisa que o 'Danilo' já disse :P

http://scriptbrasil.com.br/forum/index.php?showtopic=105219

http://www.phpbrasil.com/articles/article.php/id/1175

Editado por SK15
Link para o comentário
Compartilhar em outros sites

  • 0
Não era bem o que eu queria, mas não funcionou.

O que pretendo seria como "esconder" o nome e extensão do arquivo, por exemplo, ao acessar o link:

download.php?livro=blablabla

Seria o download equivalente ao ao baixar o arquivo /file/livros/blablabla.doc

Deu pra entender?

Não entendi... Tu quer que o usuário apenas passe o nome e ele baixa com uma extensão diferente?

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz da seguinte forma:

<?php
if (isset($_GET['zip'])){
    switch ($_GET['zip']){
        case 'livro':
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=livro.zip");
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        readfile('livro.zip');
          include "files/livro.zip";
          break;
    }
}else{
    include "index.php";
}
?>

Funcionou. Porém no Firefox não faz o download, fica só carregando a página, nos outros navegadores roda numa boa.

Link para o comentário
Compartilhar em outros sites

  • 0

Tira o 'include' ele não é nessesário para esse seu código ...

Quanto se trabalha com "headers" quase sempre você não pode mostrar nada na tela ele é exclusivo e único ...

<?php
if (isset($_GET['zip'])) {
 switch ($_GET['zip']) {
  case "livro":
   header("Cache-Control: public");
   header("Content-Description: File Transfer");
   header("Content-Disposition: attachment; filename=livro.zip");
   header("Content-Type: application/zip");
   header("Content-Transfer-Encoding: binary");
   readfile('files/livro.zip');
   exit();
   break;
 }
} else {
 include "index.php";
}
?>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...