[b]Dit is de functie:[/b]

[code]<?php

function extract_zip($zip_file, $to_path = '.') {
	// Check if $to_path exists
	if ( ! chdir($to_path)) {
		return false;
	}
	$absolute_to_path = getcwd();
	chdir(dirname(__FILE__));
	
	// Open zip file
	if ( ! $zip = zip_open($zip_file)) {
		return false;
	}
	
	// Check each item in zip file
	while ($entry = zip_read($zip)) {
		// Check if it's not a directory
		if (zip_entry_filesize($entry) != 0) {
			$parts = explode('/', $zip_entry_name($entry));
			$filename = array_pop($parts);
			$path = count($parts) == 0 ? '.' : implode('/', $parts);
			chdir($absolute_to_path);
			
			// Create directory
			if (! is_dir($path) && ! mkdir($path, 0777, true)) {
				return false;
			}
			chdir($path);
			
			// Save file
			if (! zip_entry_open($zip, $entry)) {
				return false;
			}
			if (file_put_contents($filename, zip_entry_read($entry)) === false) {
				return false;
			}
			zip_entry_close($entry);
		}
	}
	
	// close zip file
	zip_close($zip);
	
	// return true when no error occured
	return true;
}

?>[/code]

[b]Je kunt de functie zo gebruiken:[/b]

[code]<?php
extract_zip('zipfile.zip', 'path/where_to/extract');
?>[/code]

[b]Edit:[/b]
De efficiëntie verbeterd.
[code]<?php
$filename = strrchr(zip_entry_name($entry), '/');
$path = str_replace($filename, '', zip_entry_name($entry));
$filename = substr($filename, 1);
if ($filename == '') {
	$filename = $path;
	$path = '.';
}
?>[/code]
veranderd in:
[code]<?php
$parts = explode('/', $zip_entry_name($entry));
$filename = array_pop($parts);
$path = count($parts) == 0 ? '.' : implode('/', $parts);
?>[/code]