Ошибка при создании и загрузке zip-файла в php - PullRequest
0 голосов
/ 16 апреля 2020

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

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

Это фактически создает файл zip, но когда я его извлекаю, он возвращает ошибку «этот zip пуст»!

while($row_file=mysqli_fetch_array($run_file)){
$school_homework_file_file=$row_file['school_homework_file_file'];

  $zip = new ZipArchive();
  $filename = "./homework.zip";

  if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
  }

  $dir = "$school_homework_file_file";

  // Create zip
  createZip($zip,$dir);

  $zip->close();

  }

  #Download Zip File
  $filename = "homework.zip";

  if (file_exists($filename)) {
     header('Content-Type: application/zip');
     header('Content-Disposition: attachment; filename="'.basename($filename).'"');
     header('Content-Length: ' . filesize($filename));

     flush();
     readfile($filename);
     // delete file
     unlink($filename);

   }

}

// Create zip
function createZip($zip,$dir){
  if (is_dir($dir)){

    if ($dh = opendir($dir)){
       while (($file = readdir($dh)) !== false){

         // If file
         if (is_file($dir.$file)) {
            if($file != '' && $file != '.' && $file != '..'){

               $zip->addFile($dir.$file);
            }
         }else{
            // If directory
            if(is_dir($dir.$file) ){

              if($file != '' && $file != '.' && $file != '..'){

                // Add empty directory
                $zip->addEmptyDir($dir.$file);

                $folder = $dir.$file.'/';

                // Read data of the folder
                createZip($zip,$folder);
              }
            }

         }

       }
       closedir($dh);
     }
  }
}

1 Ответ

0 голосов
/ 17 апреля 2020

Измените функцию createZip:

// Create zip
function createZip(&$zip,$dir){
  if (is_dir($dir)){

    if ($dh = opendir($dir)){
       while (($file = readdir($dh)) !== false){

         // If file
         if (is_file($dir.$file)) {
            if($file != '' && $file != '.' && $file != '..'){

               $zip->addFile($dir.$file);
            }
         }else{
            // If directory
            if(is_dir($dir.$file) ){

              if($file != '' && $file != '.' && $file != '..'){

                // Add empty directory
                $zip->addEmptyDir($dir.$file);

                $folder = $dir.$file.'/';

                // Read data of the folder
                createZip($zip,$folder);
              }
            }

         }

       }
       closedir($dh);
     }
  } elseif (is_file($dir)) {
     if($dir != '' && $dir != '.' && $dir != '..'){
        $zip->addFile($dir);
     }
  }
}
...