Déconnexion lors des téléchargement

Eléphant du PHP | 103 Messages

05 févr. 2018, 17:34

Bonjour,
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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7502 Messages

06 févr. 2018, 21:05

Alors pour éviter que ça coupe, il n'y a qu'une seule solution c'est d'avoir une bonne connexion :-D

Pour palier à ton problème, une solution serait que tu puisse reprendre le téléchargement là où il s'est arrêté jusqu'à ce que le fichier soit complet.
Voici quelques pistes pour le faire pour des téléchargement FTP :
https://gist.github.com/cballou/3781156
http://blackbe.lt/ftp-file-downloads-wi ... me-in-php/
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 103 Messages

07 févr. 2018, 20:34

merci je vais regarder cela de plus prés :D