Archive zip corrupted php download
teddy76db
Messages postés
99
Date d'inscription
Statut
Membre
Dernière intervention
-
teddy76db Messages postés 99 Date d'inscription Statut Membre Dernière intervention -
teddy76db Messages postés 99 Date d'inscription Statut Membre Dernière intervention -
Bonsoir à tous,
voilà je suis très embêté mon script fonctionne de téléchargement fonctionne très bien sauf qu'à la fin du téléchargement les fichiers .zip sont corrompus si vous avez l'aimabilité de m'éclairer s'il vous plait merci.
Voici mon code :
J'utilise la méthode POST filename afin de récupérer le nom du fichier téléchargé sur mon site, cordialement.
voilà je suis très embêté mon script fonctionne de téléchargement fonctionne très bien sauf qu'à la fin du téléchargement les fichiers .zip sont corrompus si vous avez l'aimabilité de m'éclairer s'il vous plait merci.
Voici mon code :
<?php
$dir = "lol/"; // trailing slash is important
$file = $dir .$_POST['filename'] ;
if (file_exists($file)) {
ob_start();
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header('Pragma: public');
header("Expires: 0");
header("Accept-Ranges: bytes");
header("Connection: keep-alive");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary");
header('Content-Description: File Transfer');
header("Content-type: application/zip");
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($file));
ob_clean();
readfile($file);
} else {
echo "Le fichier $file n'existe pas.";
}
exit;
?>
J'utilise la méthode POST filename afin de récupérer le nom du fichier téléchargé sur mon site, cordialement.
A voir également:
- The archive is corrupted zip
- What is my movie français - Télécharger - Divers TV & Vidéo
- Télécharger 7-zip - Télécharger - Compression & Décompression
- Express zip - Télécharger - Compression & Décompression
- Comment ouvrir un fichier zip - Guide
- Archive story instagram - Guide
4 réponses
Bonjour
Et le fichier... c'est un fichier. Zip au départ ou tu essais de le zipper au moment du téléchargement ?
Et le fichier... c'est un fichier. Zip au départ ou tu essais de le zipper au moment du téléchargement ?
'lut,
tu as pris du code de je ne sais où en collant les morceaux n'importe comment, ce qui explique sans doute ton problème:
Et enfin et surtout, d'où vient l'idée idiote d'utiliser
tu as pris du code de je ne sais où en collant les morceaux n'importe comment, ce qui explique sans doute ton problème:
- On ne spécifie pas un code HTTP via
header
, c'est viahttp_response_code
que ça se fait - Tu spécifies
Expires
2 fois. Enlèves-en un. - Tu mets
Accept-Ranges: bytes
alors que ton code ne supporte pas la reprise de téléchargement avec les ranges. C'est potentiellement la source de tes zip corrompus, où certains navigateurs téléchargent les premiers octets du fichier, puis le reste avec une 2e requête si l'en-tête est présent, dupliquant l'en-tête ZIP et un peu de données. Soit tu retires, soit tu implémentes les ranges -
Connection: keep-alive
c'est pas tes oignons car tu ne peux pas forcer une connexion keep-alive en PHP, c'est au serveur qui fait tourner le PHP de mettre cet en-tête si ça lui chante -
Content-Description
n'existe pas. À retirer, c'est superflu
Et enfin et surtout, d'où vient l'idée idiote d'utiliser
ob_clean? Comme tu fais un
ob_startavant, en faisant un clean tu nettoies tous les en-têtes que tu viens de définir, sans les envoyer. C'est plutôt
ob_end_flushque tu cherches.
Merci pour ta réponse cette fois-ci avec ce code le téléchargement se fait mais avant la fin cela télécharge le zip à 578ko sur 600ko, avec pour erreur : erreur réseau :
<?php
$dir = "lol/"; // trailing slash is important
$file = $dir .$_POST['filename'] ;
if (file_exists($file)) {
ob_start();
header("HTTP/1.1 200 OK");
header('Pragma: public');
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/zip");
header('Content-Disposition: attachment; filename='.basename($file));
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($file));
ob_end_flush();
readfile($file);
} else {
echo "Le fichier $file n'existe pas.";
}
exit;
?>
Correction de ma part j'utilise ce code et toujours un problème d'erreur réseau le téléchargement s'arrête à 586ko au lieu de 600ko ...
<?php
$dir = "lol/"; // trailing slash is important
$file = $dir .$_POST['filename'] ;
if (file_exists($file)) {
header('Pragma: public');
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/zip");
header('Content-Disposition: attachment; filename='.basename($file));
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
echo "Le fichier $file n'existe pas.";
}
exit;
?>