ZipArchive n'ouvre pas de fichier-Code D'erreur: 19

Im d'avoir des problèmes avec mon code pour ouvrir un fichier zip que j'ai téléchargé et placé dans un dossier, le fichier zip uploads bien et vous pouvez l'ouvrir dans tout programme Zip, cependant, quand j'essaye de l'ouvrir avec ZipArchive pour extraire les données des erreurs.

    $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: ";
    }

quand j'exécute le code il me montre un code D'erreur 19

ZIPARCHIVE:: ER_NOZIP-19

C'est l'erreur im obtenir, cependant le fichier existe et si j'utilise zip_open, il revient d'ouvrir le fichier zip.

toute aide serait très précieuse

EDIT1 Si je télécharge un fichier zip que je crée manuellement (en utilisant un programme zip) alors le téléchargement fonctionne très bien. Cependant, si J'utilise un fichier zip créé par ZipArchive, il se trompe instantanément avec une erreur 19.

EDIT2 J'ai maintenant ajouté un assurez-vous que le fichier existe dans le droit répertoire et aussi mettre une impression de l'emplacement, match, cependant toujours le même problème. Erreur 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();
    }

UPDATE1 Donc je pense que je l'ai réduit à ce peu de code, ou le script de téléchargement que j'utilise pour télécharger le .fichier zip du système, Si je laisse le zip sur le système et d'utiliser le même morceau de code, il fonctionne très bien.

Voici mon code de téléchargement, peut-être que j'ai manqué quelque chose sur ce qui est à l'origine du problème.

    $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();
6
demandé sur Clifford Yeti Mapp 2014-12-16 14:27:02

2 réponses

ouvrez l'archive avec un éditeur de texte ou d'hexagones et assurez-vous d'avoir la signature " PK " au début du fichier. Si vous avez un HTML avant cette signature, cela suggère que vos tampons ne sont pas nettoyés ou sont en train d'être rincés alors qu'ils ne devraient pas l'être, ce qui signifie que PHP ZipArchive supposera une archive invalide.

4
répondu AJ Online Services 2014-12-16 13:24:41

c'était le téléchargement.le fichier php qui causait le problème, Voici la solution. qui devait faire un OB propre plutôt qu'un Flush

    ///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
répondu Clifford Yeti Mapp 2014-12-16 13:31:18