php
  • ziparchive
  • php-zip-archive
  • 2016-08-29 2 views 0 likes 
    0

    я следующий код работает в течение некоторого времени теперь:PHP ZipArchive AddFile перестал работать

    $thisdir = "$_SERVER[DOCUMENT_ROOT]/webroot/uploads/user_uploaded_files/"; 
    
        if(!empty($files)){ 
    
        $destination = 'uploads/zip_files/meeting_' . $meetingId .'.zip'; 
    
        $zip = new ZipArchive(); 
    
        $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
    
        //Add all the uploaded files ($file = filename.ext) 
    
         foreach($files as $file){ 
    
          if(file_exists($thisdir . $file)){ 
    
           $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
    
         } 
    } 
    

    Однако, он только недавно перестал работать (не уверен в предыдущий, но текущая версия 7.0.9) ,

    foreach loop работает как ранее, file_exists всегда возвращает true, но файлы не добавляются в архив.

    Кто-нибудь испытал это? Любая помощь или руководство очень ценится.

    +0

    Вы проверяли права доступа к файлам? –

    ответ

    1

    Вы, вероятно, следует проверить, если $ zip-> открыт работал:

    $res = $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
    if ($res) { 
        foreach ($files as $file) { 
         if (file_exists($thisdir . $file)) { 
          $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
         } 
        } 
    } 
    

    Вы можете добавить

    error_reporting(E_ALL); 
    ini_set('display_errors', true); 
    

    в начале вашего скрипта, и посмотреть, если есть какая-либо ошибка.

    0

    Только что нашел решение этой проблемы и надеюсь, что это может помочь кому-то в будущем.

    $files был массив строк, таким образом, зацикливаясь на нем, как показано ниже: foreach($files as $file) Я всегда получал одну строку.

    По крайней мере, я так и думал, однако addFile(), по-видимому, не читал его как строку.

    Проблема была решена путем простого литья каждого предмета до addFile(). Решение выглядит так:

    foreach($files as $file){ 
    
        if(file_exists($thisdir . $file)){ 
    
         $file = (string)$file; 
    
         $zip->addFile('uploads/user_files/' . $file, $file); 
    
        } 
    
    } 
    
    +0

    Из любопытства вы можете опубликовать вывод var_dump ($ files); ? – vincenth

    Смежные вопросы