Avertissement sur ZipArchive Fermer

Je suis en train de résoudre un problème dans une auto-zip script pour certaines images, que j'ai écrit il y a longtemps et cela a fonctionné jusqu'à maintenant. Tout semble parfait jusqu'à ce $zip->close(); qui donne les éléments suivants:

 <b>Warning</b>:  ZipArchive::close(): Read error: No such file or directory in <b></b> on line <b>287</b><br />

J'ai lu les docs et certains forums et trouvé que cela pourrait se produire dans l'un des scénarios suivants:

  1. Si aucun des fichiers sont ajoutés à la fermeture à glissière, depuis PHP 5.6—ce qui pourrait être une explication probable depuis que j'ai récemment mis à jour vers PHP 5.6. Cependant:
    • Je vérifie que chaque fichier existe avant de l'ajouter
    • J'ai essayé d'ajouter un mannequin non-fichier texte vide pour le zip. Ajouter au zip retourne vrai, comme le fait file_exists() sur le fichier
    • Quand je écho $zip->numFiles et il donne un certain nombre d'au moins 1 (lorsque le zip n'a pas de fichiers à l'exception de la dummy)
  2. Si le répertoire où le zip doit être écrite n'existe pas ou n'a pas le droit d'autorisations: Ce ne semble pas être le cas, mais juste pour être sûr, j'ai écrit un fichier texte dans le même dossier dans le même script et il n'y a pas de problème
  3. Si il y a un problème d'écriture pour le répertoire temp. C'est un peu plus difficile de vérifier cela, mais j'ai un script d'upload dans le même système qui fonctionne, et j'ai fait en sorte qu'il n'existe pas de problèmes d'espace disque etc.

Voici le code correspondant. Certaines variables sont définis à l'avance. Notez que j'écris chaque problème à mon journal, et ce script ne génère pas d'entrées de!

$zip_file = 'Project'.$project_id.'.zip';
$zip = new ZipArchive;
if ($zip_result = $zip->open($zip_path.'/'.$zip_file, ZIPARCHIVE::CREATE) !== true) {
    echo 'Error creating zip for project: '.$project_id.'. Error code: '.$zip_result;
    help::debugLog('Error creating zip for project: '.$project_id.'. Error code: '.$zip_result);
    return false;
}
$file_list = array();

foreach ($item_thumbs as $item)
{
    $full_thumb_path = $thumb_dir.'/'.$item['thumb'];
    if (file_exists($full_thumb_path) and $item['thumb'])
    {
        $file_added = $zip->addFile($full_thumb_path, basename($item['thumb']));
        if (!$file_added)
            help::debugLog('Failed to add item thumb to project zip. Project: '.$project_id.', file name: '.$item['thumb']);
        else
            $file_list[] = $item['thumb'];
    }
    elseif ($item['thumb']) /* If thumb indicated in DB doesn't exist in file system */
        help::debugLog('Item thumb file '.$item['thumb'].' from item: '.$item['id'].' is missing from its indended location: '.$full_thumb_path);
}

/* Added 2016-05-18 -- creates dummy file for the zip listing its contents, important in case zip is empty */
$file_list_path = $zip_path.'/file_list.txt';
if (!($file_list_file = fopen($file_list_path, 'w+')))
    help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id);
fwrite($file_list_file, "File list:\n");
fwrite($file_list_file, implode("\n", $file_list));
if (file_exists($file_list_path))
{
    fclose($file_list_file);
    if (!$zip->addFile($file_list_path))
        help::debugLog('Failed to add list file to project zip for project: '.$project_id);
    unlink($file_list_path);
}
else
    help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id);

$zip->close(); //line 287

OriginalL'auteur Ynhockey | 2016-05-18