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
Andre
13/07/2007 em 03:09 (UTC -3)
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é
admin
13/07/2007 em 08:07 (UTC -3)
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é
Fernando Michelotti
07/02/2008 em 00:22 (UTC -3)
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 ????
zedmaster
07/02/2008 em 20:52 (UTC -3)
Sim ignorei este fato, este exemplo é apenas didático.