Sur l'application que je suis en train de développé, j'ai besoin de forcer l'utilisateur à télécharger des fichiers, sans qu'il s'ouvrent.
Je rencontre deux problèmes :
- Sur IE6 SP1, les utilisateurs ne peuvent pas télécharger les fichiers "Internet Explorer ne peut pas télécharger le fichier download.php?file=317"
- sur Firefox, le téléchargement s'effectue mais le problème vient du fait qu'au début de mon fichier j'ai 4 lignes vides qui ne sont pas présentes dans le fichier d'origine.
J'ai essayé énormemment de combinaison de header sans succès, je me tourne donc vers vous en espérant que l'un d'entre vous ait déjà rencontré ce problème.
Voilà le code, la partie "directopen" fonctionne, c'est dans le else le soucis :
<?php
require_once "libs.class.php";
include "functions.inc.php";
session_start();
$config = parse_ini_file(dirname(__FILE__)."/../config/genesia.ini", true);
mysql_pconnect($config['database']['server'], $config['database']['user'], $config['database']['password']);
mysql_select_db($config['database']['base']);
$file = new File($_REQUEST['file']);
$file->updateFromDB();
$path = "../".$file->getPath();
$fileName = $file->getName();
$fichier = $file->getFile();
// directopen
if(isset($_REQUEST['directopen'])){
$tmpDir= "../files/tmp";
$sessionId = session_id();
$tmpSessionDir = $tmpDir."/".$sessionId;
$oldUMask = umask(0);
if(!file_exists($tmpSessionDir)){
mkdir($tmpSessionDir,0775,true);
}
umask($oldUMask);
//copie systematique
$fileName = stripAccent($fileName);
copy($path.$fichier,$tmpSessionDir."/".$fileName);
$newPath = $tmpSessionDir."/".$fileName;
header("Location: $newPath");
}
else {
header("Content-type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($path.$fichier));
header("Content-Disposition: attachment; filename=\"$fileName\"");
}
readfile($path.$fichier);
?>
Merci d'avance,Damien