как предотвратить извлечение файла php из zip

я использую этот фрагмент кода, чтобы разархивировать файл .zip

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
   $zip->extractTo('/my/destination/dir/');
   $zip->close();
   echo 'ok';
} else {
   echo 'failed';
}

Допустим: в .zip есть файл .php, и я не хочу, чтобы файл .php извлекался. Как я могу предотвратить это?


person Jack Maessen    schedule 12.05.2016    source источник


Ответы (2)


Вы можете попробовать что-то подобное для PHP >= 5.5:

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {

 for ($i = 0; $i < $zip->numFiles; $i++) {
     if( pathinfo($zip->getNameIndex($i)['extension'] != "php")){
        $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i));
     }
}
   $zip->close();
}

Или это для PHP < 5.5:

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {

 for ($i = 0; $i < $zip->numFiles; $i++) {
     $path_info = pathinfo($zip->getNameIndex($i));
     $ext = $path_info['extension'];
     if( $ext != "php")){
        $zip->extractTo('/my/destination/dir/', $zip->getNameIndex($i));
     }
}
   $zip->close();
}

Единственная разница между ними заключается в функции pathinfo. Оба зацикливают все файлы внутри zip-файла и, если расширение файла отлично от php, извлекают его в /my/destination/dir/.

person Pedro Lobito    schedule 12.05.2016

person    schedule
comment
Пожалуйста, не ограничивайте свои ответы только фрагментами кода. Добавление объяснения сделает его более читабельным. - person Maciej Lach; 12.05.2016
comment
В чем разница между вашим ответом и моим? Мне действительно все равно, скопировали ли вы мой ответ, но это не очень хорошая практика. - person Pedro Lobito; 12.05.2016