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 !