PHP fichier ZIP télécharger
Voici un code qui permet de télécharger des fichiers de pièce jointe à partir d'un serveur imap. Presque tous les types de fichiers (pdf, doc, xls, etc) sont en train d'être téléchargé correctement, où, comme certains fichiers zip donner le message d'erreur suivant:
"L'archive est au format inconnu ou endommagé"
Code:
//data from imap server
$name = "xyz 123.zip";
$type = "APPLICATION";
$subtype = "ZIP";
$encoding = "BASE64";
$body = imap_base64($data);
header('Content-Description: File Transfer');
header('Content-Type: '. $type .'/'. $subtype);
header('Content-Disposition: attachment; filename='.$name);
header('Content-Transfer-Encoding: '.$encoding);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();
echo $body;
Aussi, si je reprends les données et de les convertir en un fichier à l'aide de:
http://www.motobit.com/util/base64-decoder-encoder.asp
Le fichier est téléchargé correctement. Donc pas de problème à obtenir le fichier à partir du serveur.
Où vais-je tort??
ce que je crois, c'est que votre fichier zip n'est pas entièrement téléchargé, de sorte que le unzipper programme montre que le type d'erreur
comment puis-je vérifier que. j'ai essayé de le télécharger plusieurs fois. de plus, la taille est la même que celle sur le serveur. et ça marche si je imprimer le fichier encodé et décoder manuellement.
le code que vous fournissez ne semblent pas être liées à l'erreur lors de décompresser. de vérifier la partie de code qui effectue le téléchargement pour obtenir les $données
vérifiez la taille du fichier (taille en octets), et la somme de contrôle. si la taille du fichier en octets du fichier téléchargé et de la taille du fichier en octets du fichier sur le serveur sont les mêmes; puis vérifier la somme de contrôle (md5 ou autre); si même les sommes de contrôle sont les mêmes => je crois que le fichier d'origine sur le serveur est endommagé.
base64_decode fait le tour. Merci beaucoup @Paul.
comment puis-je vérifier que. j'ai essayé de le télécharger plusieurs fois. de plus, la taille est la même que celle sur le serveur. et ça marche si je imprimer le fichier encodé et décoder manuellement.
le code que vous fournissez ne semblent pas être liées à l'erreur lors de décompresser. de vérifier la partie de code qui effectue le téléchargement pour obtenir les $données
vérifiez la taille du fichier (taille en octets), et la somme de contrôle. si la taille du fichier en octets du fichier téléchargé et de la taille du fichier en octets du fichier sur le serveur sont les mêmes; puis vérifier la somme de contrôle (md5 ou autre); si même les sommes de contrôle sont les mêmes => je crois que le fichier d'origine sur le serveur est endommagé.
base64_decode fait le tour. Merci beaucoup @Paul.
OriginalL'auteur victor_golf | 2012-05-21
Vous devez vous connecter pour publier un commentaire.
Script de téléchargement de fichiers au format zip:
zip.php
Exemple d'utilisation:
Il suffit de retirer le 'forceDownload' appel.
En réponse de CroiOS Il devrait changer dans zip.php fichier à la ligne 241 passer par varialbe pour trouver le dernier élément du tableau $tempName = explode('/', $fichier); $new_file = $this->prefix_name.fin($tempName); $this->addFile($data, $new_file); } Pour éviter l'erreur "Seules les variables doivent être passés par référence"
pour moi, ne fonctionne pas comme prévu; pour la création de fermetures de ces jours, je vous suggère d'utiliser ZipArchive objet à la place (voir gist.github.com/somatonic/6427247)
ou voici ma mise à jour résumé: gist.github.com/YakovL/a5425e7f4e116aee87fb121a3ab0b26d
OriginalL'auteur iWizard
Je suis peut-être un peu en retard mais j'ai été confrontée au même problème et ces lignes a fonctionné comme un charme pour moi
OriginalL'auteur Kamran Ali
Le coupable était imap_base64. Il n'était pas décoder correctement les données. Je l'ai remplacé par base64_decode comme suit et le code a bien fonctionné.
OriginalL'auteur victor_golf
Vous êtes très proche de la solution! J'ai trouvé la façon de résoudre ce problème est de supprimer le header Content-type tous ensemble et laisser le navigateur comprendre que c'était une .fichier zip. Retirez le Type de Contenu et cela devrait fonctionner en tant que de besoin.
Dans ma console (Chrome) j'ai reçu un étrange message(s) dire:
Quand j'ai enlevé le Type MIME (en-tête Content-type).zip cessé de me donner une erreur et a travaillé normalement.
Les plus élémentaires de téléchargement de script pour faire de la .zip de travail ressemblait à ça à la fin: (remarque: Vous pouvez toujours ajouter plus d'en-têtes pour la mise en cache et tel)
Édité
Votre .zip permettra également de rencontrer des problèmes si le navigateur est la lecture des espaces supplémentaires. Vous pouvez empêcher l'espace supplémentaire à la fin de la readfile() en ajoutant exit ();, mais vous devez vous assurer que vous n'avez pas d'espace au début du fichier. Cette situation est particulièrement fréquente lorsque nous traitons avec des cadres (en particulier de votre propre). Un petit truc: Si vous incluez toutes les fonctions, les configs et les classes avant votre tampon commence à sortir HTML, afficher votre code source. Au début, il y aura un espace avant le .
OriginalL'auteur Kalob Taulien
Pour plus d'informations, consultez cette Téléchargement De Fichier
OriginalL'auteur Nana Partykar
Je n'ai vu personne mentionner encore, mais essayez de supprimer le Contenu de l'en-tête de Longueur lors de la ZIP de téléchargement de fichiers. J'ai eu exactement ce même problème et il a travaillé pour
OriginalL'auteur Seth
C'est vraiment bon pour les gros fichier à télécharger. L'utilisateur va recevoir un fichier immédiatement. Peut-être que zip sera correct aussi de cette façon.
OriginalL'auteur wormhit