codice:
function zip_files( $file_name = "test.zip", $files = array() ) {
		$zip = new ZipArchive();
		if (file_exists( $file_name )) {
			unlink( $file_name );
		}
		if ($zip->open( $file_name, ZipArchive::CREATE ) !== TRUE) {
			$zip->close();
			return false;
		}
		if (is_array( $files )) {
			foreach ( $files as $file_name_orig => $file ) {
				if (! is_numeric( $file_name_orig )) {
					$zip->addFile( $file, $file_name_orig );
				} else {
					$file_info = get_file_info( $file );
					$zip->addFile( $file, $file_info [ "name" ] );
				}
			}
		} else {
			$zip->addFile( $files );
		}
		$zip->close();
	}

$file_comprimere = array (
	"file_1.pdf" => "/percorso/percorso2/file.pdf",
	"file_2.doc" => "/percorso/percorso2/file.doc"
);
zip_files( "download.zip", $file_comprimere );
Adatta un pelo con le tue necessità...
Nel file zip avrai un file chiamato "file_1.pdf" che sarà il file "/percorso/percorso2/file.pdf" zippato ecc ecc. Se come chiave dell'array usi "/cartella4/file_1.pippo", nello zip avrai un file "/cartella4/file_1.pippo" che sarà il file "/percorso/percorso2/file.pdf", e anche se cartella4 non esiste (sul server) a te non importa....quando lo scompatti il software sul pc creerà eventualmente la cartella4