Descompactando arquivos ZIP vindo de um form com symfony

Nesse post vou mostrar como faço para tratar arquivos ZIP vindo de um formulário.

Primeiramente, precisamos ter instalado a biblioteca zip. Para isso, podemos utilizar o comando abaixo:

$ pecl install zip

Suponhamos um formulário simples:


    <?php echo form_tag("upload/do" , "method=post multipart=true") ?>
      <?php echo input_file_tag("anexos") ?>
    </form>
 

Na action que irá tratar o formulário:


    $phpFile = sfContext::getInstance()->getRequest()->getFile(‘anexos’);

    $zip = new ZipArchive();
    $res = $zip->open($phpFile["tmp_name"]);
    if ($res === TRUE) {
        $zip->extractTo(sfConfig::get(‘sf_upload_dir’).‘/imagens/’); // web/uploads/imagens
        $zip->close();
    } else {
         // logar o erro onde preferir..
        // echo ‘failed, code:’ . $res;
    }
 

Neste exemplo não estou considerando validação do tipo de arquivo, etc..

É obrigatório ter no formulário multipart=true senão não irá funcionar.

Valeeeeu! =)