Чтобы предотвратить перезапись любых файлов, вы, вероятно, хотите сначала извлечь zip-файл в каталог. Я бы создал каталог со случайным именем, распаковал бы zip в этот каталог и затем проверил бы наличие любых подкаталогов:
<?php
// Generate random unzip directory to prevent overwriting
// This will generate something like "./unzip<RANDOM SEQUENCE>"
$pathname = './unzip'.time().'/';
if (mkdir($pathname) === TRUE) {
$zip = new ZipArchive;
if ($zip->open('latest.zip') === TRUE) {
$zip->extractTo($pathname);
// Get subdirectories
$directories = glob($pathname.'*', GLOB_ONLYDIR);
if ($directories !== FALSE) {
foreach($directories as $directory) {
$dir_handle = opendir($directory);
while(($filename = readdir($dir_handle)) !== FALSE) {
// Move all subdirectory contents to "./unzip<RANDOM SEQUENCE>/"
if (rename($filename, $pathname.basename($filename)) === FALSE) {
print "Error moving file ($filename) \n";
}
}
}
}
// Do whatever you like here, for example:
unlink($pathname.'installer.php');
}
// Clean up your mess by deleting "./unzip<RANDOM SEQUENCE>/"
}
Я не тестировал этот код, поэтому используйте его на свой страх и риск, он может не работать должным образом в системах Windows. Кроме того, ознакомьтесь с документацией по всем функциям, которые я использовал: