Compactação de Zip de multiplos arquivos com PHP utilizando recurso do ubuntu

Compactação de Zip com PHP utilizando recurso do ubuntu

Esta criação feita foi por uma necessidade específica que o PHP5.4 não instalava o módulo Zip dentro do PHP, portanto foi decidido utilizar comando Shell Script dentro do php utilizando o recurso do ZIP do próprio servidor Ubuntu.
Lembrando que este exemplo mostra uma compactação de multiplos arquivos.

Arquivo de chamada SHELL "zip_shell.sh"
#!/bin/bash
dir=$1
arquivo_zip=$2
arquivo=$3

cd $(echo $dir | tr -d ‘\r’)
result=”${dir%”${dir##*[!/]}”}” # extglob-free multi-trailing-/ trim
result=”${result##*/}”
zip $arquivo_zip $arquivo

echo $1


Este comando shell está recebendo 3 atributos, sendo Diretório, arquivo zip, e arquivos que serão anexados.
Comando via terminal seria: ./[NOME_ARQUIVO_SHELL] [DIRETÓRIO] [NOME_ZIP] [NOME_ARQUIVOS]
Ficaria assim: ./zip_shell.sh arquivo/importacao teste.zip teste1.csv teste2.xls teste3.jpg

Caso fosse gerar um zip no Ubuntu direto via terminal, ficaria assim: zip teste.zip teste1.csv teste2.xls teste3.jpg

Arquivo de chamada PHP “download.php”
<?php

$nome_arquivo = ‘teste’.time();
$listaArquivos = array(‘teste1.csv’,’teste2.xls’,’teste3.jpg’);

#diretório do local onde fica armazenado os arquivos para serem anexados e onde irá gerar o zip
$diretorio = “arquivo/importacao”; #onde fica os arquivos para zipar

#criado a lista separada por espaço
$files = array();
foreach($listaArquivos as $nome_file_arr){
$files[] = $nome_file_arr;
}
$files_comand = implode(‘ ‘,$files);

#comando shell com diretório e nome do arquivo
$command = ‘./zip_shell.sh ‘.$diretorioDow .’ ‘.$nome_arquivo.’.zip “‘.$files_comand.'”‘;
echo exec($command);

#Depois de executado, dou um Header para efetuar um donwload, porque este arquivo foi chamado via link de donwload.
header(‘Location: http://SUA_PAGIINA/arquivo/importacao/’.$nome_arquivo.’.zip’);

#PRONTO, DOWNLOAD EFETUADO COM SUCESSO.
?>

Caso você tente gerar com os caminhos completos dos arquivos igual o exemplo abaixo, as pastas também irão ficar dentro do zip.

Exemplo com erro: zip arquivo/importacao/teste.zip arquivo/importacao/teste1.csv arquivo/importacao/teste2.xls arquivo/importacao/teste3.jpg

Por isso foi criado um SHELL SCRIPT.