@khodos_dmitry

Почему $zip->extractTo не работает?

$zip = new \ZipArchive();
        $files = [];
        $res = $zip->open($file);
        if ($res === true) {
            for ($i = 0; $i < $zip->numFiles; $i++) {
                $stat = $zip->statIndex($i, \ZipArchive::FL_UNCHANGED);
                $extension = pathinfo($stat['name'], PATHINFO_EXTENSION);
                if(($extension == 'jpg' || $extension == 'jpeg' || $extension == 'png' || $extension == 'gif') && $stat['size'] > 5000) {
                    $new_name = str_pad($i + 1, 2, '0', STR_PAD_LEFT).".$extension";
                    // проверяем, есть ли файл с таким именем
                    $tmp_file = $zip->statName($new_name, \ZipArchive::FL_UNCHANGED);
                    if ($tmp_file['index'] != $i) {
                        $tmp_extension = pathinfo($tmp_file['name'], PATHINFO_EXTENSION);
                        $zip->renameIndex($tmp_file['index'], $new_name."sfdfUUioom897667JKwq.".$tmp_extension);
                    }
                    //
                    $zip->renameIndex($i, $new_name);
                    array_push($files, $new_name);
                }
            }
            $zip->extractTo($extractPath, $files);
            $zip->close();
        }

Если убрать блок "проверяем, есть ли файл с таким именем" то все работает нормально. Если блок есть, то массив $files формируется правильно, но extractTo ничего не извлекает, выдает false.
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 1
@khodos_dmitry Автор вопроса
Нашел ошибку.
Там где if ($tmp_file['index'] != $i) { , нужно было поставить:
if ($tmp_file && $tmp_file['index'] != $i) {
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы