ZIP fichier n'est pas créé, mais aucune erreur n'est déclenchée
Je suis en utilisant ZipArchive:
function zip_dir($source, $target){
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
$zip = new \ZipArchive();
if($zip->open($target, \ZipArchive::CREATE) !== true)
exit('cannot create zip');
foreach($iterator as $file){
$zip->addFile($file);
print $file . '<br>';
}
$zip->close();
return $target;
}
zip_dir(__DIR__ . '/test/', __DIR__ . '/testarchive.zip');
Je peux voir la liste des fichiers, mais à la fin je ne trouve pas le fichier zip qui est censé être créé. Et je n'ai pas d'erreurs /exceptions de ZipArchive...
edit:
J'ai ajouté print $zip->getStatusString();
après $zip->close();
et il imprime :impossible d'ouvrir le fichier: Permission denied".
Qu'est-ce que cela signifie? Je sais pour sûr que chaque répertoire est accessible en écriture, en colombie-britannique, je peux créer de nouveaux fichiers avec PHP à l'intérieur d'eux...
edit 2:
if(is_writable(dirname($target)))
print 'target dir is writable...';
de l'impression, de sorte que les dir est accessible en écriture. Se sent comme je suis dans la twilight zone...
L'utilisateur PHP est en cours d'exécution en vertu de l'avoir l'autorisation de créer des fichiers dans le répertoire en question?
est test répertoire est accessible en écriture
oui, je suis en cours d'exécution "wamp" sur localhost. il a la permission de faire quoi que ce soit..
l'utilisation d'essayer de les attraper et de voir si le code est jeter de l'exception
Je ne vois pas d'exceptions
est test répertoire est accessible en écriture
oui, je suis en cours d'exécution "wamp" sur localhost. il a la permission de faire quoi que ce soit..
l'utilisation d'essayer de les attraper et de voir si le code est jeter de l'exception
Je ne vois pas d'exceptions
OriginalL'auteur Alex | 2012-10-15
Vous devez vous connecter pour publier un commentaire.
Deux Commentaires à Partir d'php.net
Si vous ajoutez plusieurs fichiers dans un zip et votre $zip->close() retourne FALSE, s'assurer que tous les fichiers que vous avez ajoutés existent réellement. Apparemment $zip->addFile() renvoie TRUE, même si le fichier n'existe pas réellement. C'est une bonne idée de vérifier chaque fichier avec file_exists() ou is_readable() avant d'appeler $zip->addFile ().
et
N'oubliez pas de vérifier la fermeture éclair n'est pas vide, les gens - sinon, le zip n'est pas créée, et le serveur émet aucun avertissement!
le numFiles propriété de $zip 9. Je suppose que cela signifie qu'elle n'est pas vide
et le "statut" est de 5, "statusSys" est de 2
ok je l'ai fait à la fin. il semble que les répertoires vides déclencher cette erreur 😐
Aussi lors de l'itération dossiers, assurez-vous d'exclure les deux premiers points dans chaque dossier (
.
et..
).OriginalL'auteur simply-put
Semble que vous avez un problème d'autorisation, soit avec l'écriture sur le fichier zip, ou la lecture des fichiers zip.
Je voudrais utiliser une combinaison de
file_exists
,is_readable
, etis_writable
de déterminer lequel de ces facteurs est à l'origine du problème.OriginalL'auteur Mitch Satchwell
Assurez-vous que:
file_exists()
etis_readable()
avant d'appeler$zip->addFile()
)..
et..
.$zip['numFiles'] > 0
).$zip->close()
retourneTRUE
.OriginalL'auteur Bugs Bunny