Téléchargement du fichier .zip exécute un fichier corrompu php
Je suis en train de forcer un téléchargement d'un fichier zip (je ne veux pas que les gens d'y accéder sans avoir à se connecter en premier.
J'ai la fonction créée pour la login
et , mais je suis en cours d'exécution dans un problème où le fichier téléchargé est corrupteur.
Voici le code que j'ai:
$file='../downloads/'.$filename;
header("Content-type: application/zip;\n");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file).";\n");
header("Content-disposition: attachment; filename=\"".basename($file)."\"");
readfile("$file");
exit();
Voici l'erreur: Cannot open file: It does not appear to be a valid archive.
Le téléchargement du fichier fine sinon, il doit être quelque chose que je fais mal avec les en-têtes.
Des idées?
source d'informationauteur Troy
Vous devez vous connecter pour publier un commentaire.
Ce problème peut avoir plusieurs causes. Peut-être que votre fichier n'est pas trouvé ou s'il ne peut pas être lu et donc le contenu du fichier est juste le PHP message d'erreur. Ou l'en-tête HTTP est déjà envoyé. Ou vous avez quelques sortie supplémentaire que puis corrompt votre contenu du fichier.
Essayez d'ajouter une gestion d'erreur dans le script comme ceci:
Je parie que les deux bières que PHP erreur se produit, le message d'erreur bousille le fichier ZIP. Le fichier demandé n'existe pas.
Ouvrez le fichier ZIP avec le bloc-notes ou un éditeur de texte similaire, et de savoir quel est le problème.
Voici la solution
créer un fichier avec le nom .htaccess
écrire en dessous de la ligne dans
SetEnv no-gzip, dont-vary
de télécharger le fichier sur votre site web. Si vous avez le fichier est déjà là, alors merci de faire le changement ci-dessus dans ce
Réponse tardive mais peut-être utile pour les utilisateurs de ne pas être en mesure de faire
force download
de travail.Ajouter le texte suivant à la partie supérieure de votre
php
scriptessayer ce pour voir si il y a une erreur
Ne rien imprimer avant d'écrire les en-têtes;
Exécuter un ob_start() de votre script, après le code modifier vos en-têtes, puis ob_flush() et ob_clean()