Para el upload lo hacés normal, como cualquier archivo.
Para descomprimir tenés al menso dos opciones.
Ejecutar un comendo con exec para que algún programa de tu SO lo descomprima, o podés usar la extensión
Funciones de manejo de archivos Zip (sólo lectura), si la tenés instalada.
Ejemplo
Código PHP:
$path = dirname(__FILE__) . "/test/test.zip";
$zip = zip_open($path);
if ($zip !== false && is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
$fp = fopen("test/".zip_entry_name($zip_entry), "w");
if (zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,$buf);
zip_entry_close($zip_entry);
fclose($fp);
}
}
zip_close($zip);
}