[résolu][php]Forcer un telechargement - ne fonctionne pas sous php5

bonjour,

voila j’ai ce code :


header("Content-disposition: attachment; filename=$filename");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".filesize($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile($filename);

il fonctionne parfaitement sur un dedie en php4
par contre sur un autre dedie en php5, le telechargement se bloque a 2 mo
apres multiples recherche dans le fichier php.ini rien n’y fait

j’ai fait le test sur un mutualise ou le problème et le meme

http://90pack.ovh.net/~mostik/

le fichier dl.php et dl.php5 sont identiques, seule l’extention a ete change

resultat :
le fichier dl.php fonctionne parfaitement
le fichier dl.php5 ne fonctionne pas , le telechargement est bloque a 2 mo exactement comme sur mon dedie

auriez vous une idee ?
merci

finalement le problème semblait venir d’un memory out

voici un code trouve sur php.net qui fonctionne et evite le problème de memory out


<?php
if(isset($_GET["file"])){$file = $_GET["file"]; }

function dl_file_resume($file){

   //First, see if the file exists
   if (!is_file($file)) { die("<b>404 File not found!</b>"); }

   //Gather relevent info about file
   $len = filesize($file);
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename,"."),1));
   $ctype="application/force-download";


   //Begin writing headers
   header("Cache-Control:");
   header("Cache-Control: public");
  
	//Use the switch-generated Content-Type
	header("Content-Type: $ctype");
	//if your filename contains underscores, you can replace them with spaces
	header("Content-disposition: attachment; filename=$filename");
	header($header );
	header("Accept-Ranges: bytes");
	header("Content-Transfer-Encoding: binary");
	$size=filesize($file);
//check if http_range is sent by browser (or download manager)
if(isset($_SERVER['HTTP_RANGE'])) {
	list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);
	//if yes, download missing part
  str_replace($range, "-", $range);
  $size2=$size-1;
  $new_length=$size2-$range;
  header("HTTP/1.1 206 Partial Content");
  header("Content-Length: $new_length");
  header("Content-Range: bytes $range$size2/$size");
}else{
	$size2=$size-1;
	header("Content-Range: bytes 0-$size2/$size");
	header("Content-Length: ".$size2);
}
//open the file
$fp=fopen("$file","r");
//seek to start of missing part
fseek($fp,$range);
//start buffered download
while(!feof($fp)){
//reset time limit for big files
	set_time_limit(0);
	print(fread($fp,1024*8));
  flush();
}
	fclose($fp);
   exit;
}

dl_file_resume($file);
?>

je le met pour ceux que cela peut intéresser

:jap:

Désolé pour le up, mais j’ai une question à propos de ce script :

avec ie, opera et firefox le téléchargement se passe bien, mais ils attendent un timeout avant de dire qu’ils ont fini de télécharger le fichier (donc 30s après la fin du téléchargement).

par contre, si je commente
" header(“Content-Range: bytes 0-$size2/$size”);
header("Content-Length: “.$size2);”
(dans le cas où le téléchargement n’est pas repris), ils n’attendent pas ce timeout et le fichier est immédiatement enregistré.
Pourtant, la taille est correcte :??: est-ce que des gens auraient des idées ?