[RESOLU] Fichier corrompu avec readfile()

Eléphant du PHP | 75 Messages

01 juin 2015, 12:01

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>';
	}

Eléphant du PHP | 75 Messages

01 juin 2015, 12:39

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;