Entêtes HTTP pour l'envoi de fichiers à la sortie standard
Par SamRay1024 le jeudi 17 juillet 2008, 11:08 - Programmation - Lien permanent
Envoyer un fichier à la volée depuis un script PHP vers un navigateur client n'est pas forcément chose difficile mais peut très vite tourner à la crise de nerf...
Problème rencontré : le téléchargement du fichier est bien proposé sous Firefox mais impossible de faire fonctionner la même chose sous Internet Explorer !! Pourquoi ? Parce qu'IE est restrictif (Firefox est à l'inverse bien plus permissif) et qu'il faut savoir lui parler correctement...
Le code suivant fonctionne sous Firefox mais pas sous IE :
header( 'Content-type: application/zip');
header( 'Content-length: '.$iSize );
header( 'Content-disposition: attachment; filename="'.$sNomFichier.'"');
Pour que l'envoi du fichier fonctionne sous IE, il est important de lui envoyer les bonnes entêtes HTTP :
header( 'Pragma: public' );
header( 'Content-Description: File Transfer' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Content-Transfer-Encoding: binary' );
header( 'Expires: 0' );
header( 'Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT' );
header( 'Cache-Control: private', false );
header( 'Content-type: application/zip' );
header( 'Content-length: '.$iSize );
header( 'Content-disposition: attachment; filename="'.$sNomFichier.'"'
);
Ces entêtes sont données pour l'envoi d'un fichier Zip ("Content-type: application/zip"). A vous d'adapter ce code en indiquant le type MIME correspondant au fichier que vous devez envoyer !