Архивация не открывает файл - Код ошибки: 19


У меня возникли проблемы с тем, что мой код может открыть zip-файл, который я загрузил и переместил в папку, zip-файл загружается нормально, и вы можете открыть его в любой Zip-программе, однако, когда я пытаюсь открыть его с помощью ZipArchive, чтобы извлечь данные, в которых он ошибается.

    $path = "../"; // Upload directory      
    $count = 0;

    foreach ($_FILES['files']['name'] as $f => $name) {     
       if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path . $name))
             $count++; // Number of successfully uploaded file
    }

    $kioskFile = $_FILES['files']['name'][0];
    $kioskFile = explode(".", $kioskFile);
    $kioskFile = $kioskFile[0];
    $zipFile = "../" . $kioskFile . ".zip";     

    $zip = new ZipArchive;
    $res = $zip->open($zipFile);
    if ($res === true) {
        $zip->extractTo("./");
        $zip->close();
    } else {
        echo "Error Cannot Open Zip File - Error Code: ";
    }

Когда я запускаю код, он показывает мне код ошибки 19

АРХИВИРОВАНИЕ::ER_NOZIP- 19

Это ошибка, которую я получаю, однако файл существует, и если я использую zip_open, он возвращает, что он может открыть zip файл.

Любая помощь была бы очень полезна

ПРАВКА1 Если я загружаю zip-файл, который я создаю вручную (с помощью zip-программы), то загрузка работает нормально. Однако, если я использую zip-файл, созданный ZipArchive, он мгновенно выдает ошибку 19.

ПРАВКА2 Теперь я добавил проверку, чтобы убедиться, что файл существует в нужном каталоге, а также напечатал местоположение, оба совпадают, однако все та же проблема. Ошибка 19

    $path = "../"; // Upload directory      
    $count = 0;

    foreach ($_FILES['files']['name'] as $f => $name) {     
       if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path . $name))
             $count++; // Number of successfully uploaded file
    }

    $kioskFile = $_FILES['files']['name'][0];
    $kioskFile = explode(".", $kioskFile);
    $kioskFile = $kioskFile[0];
    $realpath = realpath("../");
    $zipFile = $realpath . "\\" .  $kioskFile . ".zip";     

    if (file_exists($zipFile)) {
        $extract = zip_extract($zipFile, "../");
        if ($extract === TRUE) {

        } else {
            echo "The file " . $zipFile . " cannot be opened";  
        }
    } else {
        echo "The file " . $zipFile . " does not exist";
        die();
    }

ОБНОВЛЕНИЕ 1 Поэтому я думаю, что я сузил его до этого фрагмента кода или сценария загрузки, который я использую для загрузки zip-файла из системы, если я оставлю zip в системе и использую тот же фрагмент кода, он отлично работает.

Вот мой код загрузки, возможно, я что-то пропустил в этом, что вызывает проблему.

    $fileID = $_GET['id'];
    $backupLoc = "backups/";
    $sql = "SELECT * FROM backups WHERE id = '" . addslashes($fileID) .  "' LIMIT 1";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res); 
    $backupFile = $row['backupFile'];
    $zipFile = $backupLoc . "/" . $backupFile . ".zip";
    $zipSize = filesize($zipFile);

    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="' . basename($zipFile). '"'); 
    ob_end_flush();
    readfile($zipFile);
    exit;
    die();
Author: Clifford Yeti Mapp, 2014-12-16

2 answers

Откройте архив с помощью текстового или шестнадцатеричного редактора и убедитесь, что у вас есть подпись "PK" в начале файла. Если у вас есть какой-либо HTML-код до этой подписи, это будет означать, что ваши буферы не очищаются или очищаются, когда их не должно быть, что означает, что PHP ZipArchive примет недопустимый архив.

 4
Author: AJ Online Services, 2014-12-16 13:24:41

Это был download.php файл, который вызвал проблему, вот решение. который должен был сделать ЧИСТКУ OB, а не промывку

    ///echo "<div style='padding: 50px;'>Please Wait .....</div>";
    $fileID = $_GET['id'];
    $backupLoc = "backups/";
    $sql = "SELECT * FROM backups WHERE id = '" . addslashes($fileID) .  "' LIMIT 1";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res); 
    $backupFile = $row['backupFile'];
    $zipFile = $backupLoc . "/" . $backupFile . ".zip";
    $zipSize = filesize($zipFile);

    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="' . basename($zipFile). '"'); 
    //ob_end_flush();
    ob_end_clean(); 
    readfile($zipFile);
    exit;
    die();
 3
Author: Clifford Yeti Mapp, 2014-12-16 13:31:18