Voor een semi-automatische installatie wil ik graag een bzip2 gecomprimeerd bestand kunnen uitpakken. Nu is er wel wat te vinden in de php manual over bzopen, maar ik wil graag een aantal bestanden, verdeeld over een of meerdere mappen uitpakken. Zegmaar een zip met de volgende inhoud:
Nu is het niet zo moeilijk om een enkele file uit te pakken, nl. volgens de php manual:

Helaas is de php bij mijn hoster alleen gecompileerd met --with-bz2, en niet met --with-zip, dus helaas gaat het volgende niet op (van http://php.net/zip):
code:
Als ik die uitpak, moet dus test.txt in de huidige map worden uitgepakt en test2.txt in een subfolder met de naam folder worden uitgepakt.1
2
3
| ./test.txt ./folder/ ./folder/test2.txt |
Nu is het niet zo moeilijk om een enkele file uit te pakken, nl. volgens de php manual:
PHP:
Maar hoe je met een mappenstructuur werkt, is mij een raadsel. Ik kom er niet uit, dus een duwtje in de rug zou ik erg fijn vinden 1
2
3
4
5
6
7
| $bz = bzopen("/tmp/foo.bz2", "r"); $decompressed_file = bzread($bz, filesize("/tmp/foo.bz2")); bzclose($bz); print( "De inhoud van /tmp/foo.bz2 is: " ); print( "\n<br>\n" ); print( $decompressed_file ); |
Helaas is de php bij mijn hoster alleen gecompileerd met --with-bz2, en niet met --with-zip, dus helaas gaat het volgende niet op (van http://php.net/zip):
PHP:
Omdat volgens mij functies als zip_entry_open en zip_entry_filesize niet voor bzip2 bestaat. Of heb ik het nu helemaal mis?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $dir = 'C:\\reports-temp\\'; $zip = zip_open($_FILES['report_zip']['tmp_name']); while($zip_entry = zip_read($zip)) { $entry = zip_entry_open($zip,$zip_entry); $filename = zip_entry_name($zip_entry); $target_dir = $dir.substr($filename,0,strrpos($filename,'/')); $filesize = zip_entry_filesize($zip_entry); if (is_dir($target_dir) || mkdir($target_dir)) { if ($filesize > 0) { $contents = zip_entry_read($zip_entry, $filesize); file_put_contents($dir.$filename,$contents); } } } |