«

»

jul 06

ZipArchive – Adicionando arquivo e fazendo download

Objetivo

Adicionar arquivo no ZIP, fazer o download e apagar o arquivo ZIP.

Problema

Vários usuários estarão fazendo download, e cada um com a sua seleção de arquivos , ou seja o arquivo ZIP sempre será diferente para cada usuário.

Solução

- Usar como nome de arquivo o id da sessão do usuário.
- Criar um arquivo ZIP usando o parametro ZIPARCHIVE::OVERWRITE para criar um arquivo.
- Adicionar os arquivos desejados.
- Modificar o header para binario e colocar o nome do arquivo para download.
- Não esquecer de apagar o arquivo depois de feito o download.

Segue o código:

open("/tmp/{$file}", ZIPARCHIVE::OVERWRITE);
$zip->addFile('/tmp/teste.txt', 'teste.txt');
$zip->close();

$fp = fopen("/tmp/{$file}", 'rb');

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="arquivo.zip"');
header('Content-Length: ' . @filesize("/tmp/".$file));
fpassthru($fp);

unlink("/tmp/{$file}");

?>

4 comments

  1. Andre

    Olá Tudo bom, estou tentando fazer seu scriptfuncionar mais da erro na linha “ZIPARCHIVE::OVERWRITE);” gostaria de saber o qe eh isso se eh necessario, preciso fazer um sistema que zipa o arquivo enviando pelo usuario.

    e o seu codigo esta perfeito pena q nao funciona, preciso saber se tem algo errado que coloquei.

    aguardo respostas por favor

    abraços até

  2. admin

    Caso esteja tentando fazer funcionar no Windows, crie uma pasta em c:\tmp .

    Caso não funcione ou não seja windows, me envia o erro.

    até

  3. Fernando Michelotti

    Acredito que você tenha ignorado o fato que alguém possa tentar acessar tal sistemas em duas janelas diferentes, fazendo que ambas tentem alterar o mesmo arquivo.

    Não seria melhor utilizar um hash md5 o id da seção + numero randomico ????

  4. zedmaster

    Sim ignorei este fato, este exemplo é apenas didático.

Deixe um Comentário

Seu e-mail não será publicado.

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>