Crearea de arhive zip cu PHP


Am avut nevoie recent de o cale de a oferi într-o webaplicaţie posibilitatea de a lua mai multe fişiere nu individual ci la pachet, într-o arhivă. Mă aşteptam că va fi dificil, dar am dat de articolul Create a Zip File Using PHP, semnat de David Walsh (un tip extraordinar ce merită urmărit, căci înveţi multe). Desigur, soluţia depinde de configurarea PHP-ului pe serverul unde ar urma să ruleze aplicaţia, dar în cazul meu pachetul pentru zip era inclus, deci nu am avut probleme.

Puteţi vedea articolul original, sau direct codul de mai jos în care tot ce am făcut a fost să îl „românizez”, prin adaptarea numelor de variabile şi funcţii, precum şi prin traducerea comentariilor. Astfel codul ar trebui să fie uşor de citit. După ce vă asiguraţi că merge puteţi desigur scăpa de comentarii (precum şi de acoladele excesive).

/* creeaza o arhiva zip */
function arhivaZip($fisiere = array(), $destinatie = '', $suprascrie = false) {
	//daca fisierul zip exista deja si suprascrie este pus pe false, returnam false
	if(file_exists($destinatie) && !$suprascrie) { return false; }
	//vrem fisierele de arhivat sa fie valide
	$fisiere_valide = array();
	//verificam validitatea lor
	if(is_array($fisiere)) {
		//parcurgem fisier cu fisier
		foreach($fisiere as $fisier) {
			//ne asiguram ca exista
			if(file_exists($fisier)) {
				$fisiere_valide[] = $fisier;
			}
		}
	}
	//avem deci o lista de fisiere valide?
	if(count($fisiere_valide)) {
		//putem crea arhiva
		$zip = new ZipArchive();
		if($zip->open($destinatie,$suprascrie ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
			return false;
		}
		//adaugam fisierele
		foreach($fisiere_valide as $fisier) {
			$zip->addFile($fisier,$fisier);
		}
		//pentru depanare
		//echo 'Arhiva zip continute ',$zip->numFiles,' fisiere cu statusul ',$zip->status;
		//inchidem arhiva - gata!
		$zip->close();
		//de siguranta verificam existenta fisierului cu arhiva
		return file_exists($destinatie);
	}
	else {
		return false;
	}
}

$fisiere_de_arhivat = array(
  'imagini/1.jpg',
  'imagini/2.jpg',
  'imagini/5.jpg',
  'js/ceva.js',
  'css/ceva.css',
  'index.html',
  'readme.txt'
);
//daca e true, e bine; daca e false, crearea arhivei a esuat
$rezultat = arhivaZip($fisiere_de_arhivat,'arhiva.zip');

Detalii suplimentare pe PHP.net.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (4 evaluări, media: 5,00 din 5)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *