je rencontre actuellement un problème avec le téléchargement de gros fichiers chez 1and1 en mutualisé.
J'utilise le script ci-dessous pour lancer le téléchargement de mon fichier qui fait 1,44Go.
Lorsque l'on télécharge le fichier avec une connexion de faible débit le dl coupe.
Je souhaiterais savoir s'il existe une solution pour éviter que cela coupe?
voici mon script:
set_time_limit(0);
include('config.php');
$name = $_GET['download_file'];
$dossier = "../uploads/beta/";
if (empty($_GET["download_file"])) {
header("HTTP/1.1 404 Not Found");
exit;
}
if(basename($_GET["download_file"]) != $_GET["download_file"]) {
header("HTTP/1.1 400 Bad Request");
exit;
}
$filename = $dossier."/".$name;
if (!is_file($filename) || !is_readable($filename)) {
header("Location: https://easy-mining-os.com/404");
exit;
}
$size = filesize($filename);
if (ini_get("zlib.output_compression")) {
ini_set("zlib.output_compression", "Off");
}
session_write_close();
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0,pre-check=0");
header("Cache-Control: max-age=0");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Accept-Ranges: bytes");
$start = 0;
$end = $size - 1;
if (isset($_SERVER["HTTP_RANGE"])) {
if (!preg_match("#bytes=([0-9]+)?-([0-9]+)?(/[0-9]+)?#i", $_SERVER['HTTP_RANGE'], $m)) {
header("HTTP/1.1 416 Requested Range Not Satisfiable");
exit;
}
$start = !empty($m[1])?(int)$m[1]:null;
$end = !empty($m[2])?(int)$m[2]:$end;
if (!$start && !$end || $end !== null && $end >= $size
|| $end && $start && $end < $start) {
header("HTTP/1.1 416 Requested Range Not Satisfiable");
exit;
}
if ($start === null) {
$start = $size - $end;
$end -= 1;
}
header("HTTP/1.1 206 Partial Content");
header("Content-Range: ".$start."-".$end."/".$size);
}
header("Content-Length: ".($end-$start+1));
$f = fopen($filename, "rb");
fseek($f, $start);
$remainingSize = $end-$start+1;
$length = $remainingSize < 8192?$remainingSize:8192;
while (false !== $datas = fread($f, $length)) {
echo $datas;
$remainingSize -= $length;
if ($remainingSize <= 0) {
break;
}
if ($remainingSize < $length) {
$length = $remainingSize;
}
}
fclose($f);
Merci pour votre aide