как предотвратить извлечение 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 был извлечен. Как я могу предотвратить это?
2
Author: Jack Maessen, 2016-05-12
2 answers
Вы можете попробовать что-то подобное для 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/
.
2
Author: Pedro Lobito, 2016-05-12 12:17:21
$zip= new ZipArchive;
if($zip->open('test.zip') === TRUE){
for($i = 0; $i < $zip->numFiles; $i++) {
$filename = pathinfo($zip->getNameIndex($i));
$fileinfo = $filename['extension'];
if($fileinfo!="php"){
$zip->extractTo('extract/',$zip->getNameIndex($i));
}
$zip->close();
}
1
Author: Ashish, 2016-05-12 13:08:14