/    Sign up×
Community /Pin to ProfileBookmark

PHP download script failed when download file > 1GB show network failed error

I am using code for download a file in PHP. code works fine for all videos but when i try to download video larger than 1 GB it failed and show me network error. but if i use jdownloader it download the files.

[code=php]
<?php
set_time_limit(0);
ini_set(‘memory_limit’, ‘2G’);

function getMimeType($fileName)
{
$c_type_default = “application/octet-stream”;
$content_types = array(
“exe” => “application/octet-stream”,
“zip” => “application/zip”,
“mp3” => “audio/mpeg”,
“mpg” => “video/mpeg”,
“avi” => “video/x-msvideo”,
“mp4” => “video/mp4”,
);
// echo isset($content_types[pathinfo($fileName, PATHINFO_EXTENSION)]) ? $content_types[pathinfo($fileName, PATHINFO_EXTENSION)] : $c_type_default;
return isset($content_types[pathinfo($fileName, PATHINFO_EXTENSION)]) ? $content_types[pathinfo($fileName, PATHINFO_EXTENSION)] : $c_type_default;
}
function output_file($file, $name)
{

/*
This function takes a path to a file to output ($file), the filename that the browser will see ($name) and the MIME type of the file ($mime_type, optional).
*/

//Check the file premission
if(!is_readable($file)) die(‘File not found or inaccessible!’);

$size = filesize($file);

$name = rawurldecode($name);

//turn off output buffering to decrease cpu usage
@ob_end_clean();
include(‘../includes/configg.php’);

// Start Code For Total Downloaded Data Size by The LoggedIn User
$user=”select * from $TBusers where id=”.$_SESSION[‘log_id’];
$result_user = mysqli_query($conn, $user) ;
$row = mysqli_fetch_assoc($result_user);
$lastsotrage = $row[‘down’];
$curr_date= $row[‘curr_date’];
$today_date= date(‘d-m-y’);
$daily_downloaded_data= $row[‘daily_downloaded_data’];
if($curr_date != $today_date)
{
$update_curr_date=”update $TBusers set curr_date =’$today_date’, daily_downloaded_data =0 where id=”.$_SESSION[‘log_id’]; // Set Curr_date by Today Date For check Daily Downloaded Data Limit

mysqli_query($conn,$update_curr_date) ;
$daily_downloaded_data=0;
}
/*else
{
if($daily_downloaded_data>=(20*1024*1024*1024)){ // Check Daily Download Data Limit 20GB Exceed or not
header(‘Location: http://idownload.club/members/download.php’);
exit;}
}*/

// required for IE, otherwise Content-Disposition may be ignored
if(ini_get(‘zlib.output_compression’))
ini_set(‘zlib.output_compression’, ‘Off’);

header(‘Content-Type: ‘ . getMimeType($name));
header(‘Content-Disposition: attachment; filename=”‘.$name.'”‘);
header(“Content-Transfer-Encoding: binary”);
header(‘Accept-Ranges: bytes’);

/* The three lines below basically make the
download non-cacheable */
header(“Cache-control: private”);
header(‘Pragma: private’);
header(“Expires: 0”);

// multipart-download and download resuming support
if(isset($_SERVER[‘HTTP_RANGE’]))
{
list($a, $range) = explode(“=”,$_SERVER[‘HTTP_RANGE’],2);
list($range) = explode(“,”,$range,2);
list($range, $range_end) = explode(“-“, $range);
$range=intval($range);
if(!$range_end) {
$range_end=$size-1;
} else {
$range_end=intval($range_end);
}

$new_length = $range_end-$range+1;
header(“HTTP/1.1 206 Partial Content”);
header(“Content-Length: $new_length”);
header(“Content-Range: bytes $range-$range_end/$size”);
} else {
$new_length=$size;
header(“Content-Length: “.$size);
}

/* Will output the file itself */
$chunksize = 8*(1024*1024); //you may want to change this
$bytes_send = 0;
if ($file = fopen($file, ‘r’))
{
if(isset($_SERVER[‘HTTP_RANGE’]))
fseek($file, $range);

while(!feof($file) &&
(!connection_aborted()) &&
($bytes_send<$new_length)
)
{
$buffer = fread($file, $chunksize);
print($buffer); //echo($buffer); // can also possible
//flush();
$bytes_send += strlen($buffer);
}
fclose($file);

$lastsotrage= $lastsotrage + $size;
$daily_downloaded_data+=$size;
$sql=”update $TBusers set down =”. $lastsotrage.” where id=”.$_SESSION[‘log_id’];
$sql2=”update $TBusers set daily_downloaded_data = $daily_downloaded_data where id=”.$_SESSION[‘log_id’];
$sql3= “update test set count=count+1 where id=1” ;
mysqli_query($conn,$sql) ;
mysqli_query($conn,$sql2) ;mysqli_query($conn,$sql3) ;
file_put_contents(‘data.txt’, print_r($_SERVER, true), FILE_APPEND);

} else
//If no permissiion
die(‘Error – can not open file.’);
//die
die();
}
//Set the time out
set_time_limit(0);

//path to the file
$file_dir=$_GET[‘directory’];
$file_name = str_replace(“/”, “”, $_GET[‘file’]);
$file_name = str_replace(“\”, “”, $file_name);
$file = $file_dir . “/”.$file_name;

//Call the download function with file path,file name and file type
output_file($file, ”.$file_name.”);

?>
[/code]

to post a comment
PHP

2 Comments(s)

Copy linkTweet thisAlerts:
@NogDogJan 24.2017 — anything in your PHP error log?
Copy linkTweet thisAlerts:
@evoluerJan 25.2017 — Not sure, but can you try changing this line to a greater value

$chunksize = 8*(1024*1024);
×

Success!

Help @fernandofg spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 5.4,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @Yussuf4331,
tipped: article
amount: 1000 SATS,

tipper: @darkwebsites540,
tipped: article
amount: 10 SATS,

tipper: @Samric24,
tipped: article
amount: 1000 SATS,
)...