Page 1 sur 1

Fichier corrompu avec readfile()

Posté : 01 juin 2015, 12:01
par tom_nameless
Bonjour,

J'essai de mettre en place une page de téléchargement mais en vérifiant quelques info du membre avant de lancer ce téléchargement.

Mon problème est qu'un fichier est bien téléchargé mais impossible de le consulter car il est corrompu.
Message d'adobe : Acrobat n'a pas pu ouvrir ..... le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correctement, par exemple).

Je ne sais pas comment faire car je ne trouve pas ce qui pourrait bloquer dans mon code :
if (file_exists($chemin))
	{
		header('Content-Description: File Transfer');
		header('Content-Type: application/force-download');
		header('Content-Disposition: attachment; filename='.basename($chemin));
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Transfer-Encoding: binary');
		header('Content-Length:'.filesize($chemin));
		readfile($chemin);
	} else {
		echo '<a href="'.$chemin.'">'.$chemin.'</a>';
	}

Re: Fichier corrompu avec readfile()

Posté : 01 juin 2015, 12:39
par tom_nameless
Je viens de trouver une solution sur le forum :oops:
header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename='.basename($chemin));
		header('Content-Transfer-Encoding: binary');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Transfer-Encoding: binary');
		header('Content-Length:'.filesize($chemin));
		ob_clean();
		flush();
		readfile($chemin);
		exit;
Il me manquait des lignes utiles à la bonne exécution du script de lancement du téléchargement :
header('Content-Type: application/octet-stream');
...
ob_clean();
flush();
...
exit;