Коду для архивирования загруженных файлов не удается удалить временные файлы

#php #zip #unlink

#php #zip #разорвать связь

Вопрос:

Ребята, я пишу код для загрузки файла, архивирую их и удаляю файл tmp. Но когда я использую функцию unlink, она не удаляет весь файл, кто-нибудь может объяснить мне, почему?

Связанный php-код :

 $zip = new ZipArchive();
$target_path = 'img/products/';
$zip->open($target_path.$id_insert.'.zip', ZIPARCHIVE::CREATE);
$img_count = $_POST['count_file'];
for ($i = 1; $i <= $img_count; $i  ){
    $temp = 'img'.$i;
    $file = $i.'-'.$id_insert.'-'.$_FILES[$temp]['name'];
    $path = $target_path.basename($file); 
    if(move_uploaded_file($_FILES[$temp]['tmp_name'], $path)) {
        $zip->addFile($path, basename($file));
        $files_to_delete[] = $path;
    }
} 
$zip->close();
foreach($files_to_delete AS $file){
    //unlink(dirname(__FILE__).'/'.$path);
}
  

Комментарии:

1. Вы должны получать E_WARNING если это не сработает, не могли бы вы, пожалуйста, опубликовать это здесь? Я предполагаю, что есть некоторые проблемы с привилегиями.

2. Я получаю сообщение «Такого файла или каталога нет», но путь правильный и работает для другого загруженного файла Oo 🙂

3. Это еще один способ добавить файл в zip-архив без создания файла? ^^

Ответ №1:

 foreach($files_to_delete AS $file){
    //unlink(dirname(__FILE__).'/'.$path);
}
  

В этом блоке вы должны заменить $ path на $ file, поскольку это то, как вы их предваряете. Вы получаете ошибку, потому что после того, как вы разорвали связь с $ path в первый раз, файл в $ path разорван, но каждая вторая итерация пытается удалить тот же файл (который является последним, назначенным переменной $ path).