Friday, July 06th, 2007 | Author: admin

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}");

?>
Category: PHP
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

4 Responses

  1. 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. 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. 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. 4
    zedmaster 

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

Leave a Reply

Please insert the signs in the image: