Downloading file (Headers)


Posted on 16th Feb 2014 07:03 pm by admin

I'm trying to make users download a file, but they must wait 60 seconds before it begins.

But, I'm stuck - the file isn't downloading, and no error is being shown (I've enabled E_ALL error reporting).

The file does exist.

Here is the code I use to download the file (I've cut the code that isn't needed)
Code: (php) [Select]<?php
//code removed
case "dlStart":
$file = $_POST['fileid'];
//query
$query = "SELECT * FROM files WHERE fid=$file";
$result = $sql->query($query);
$row = $result->fetch_assoc();
$file = $row['filelocation'];
if ($result->num_rows != 1){
$content = '<h1>Download File</h1>
<h2>Looks like you&#38;#39;ve found an error!</h2>
<p>The file that you are trying to download either has been deleted, or has never existed.</p>
<p>Please go back and try again.</p>';
$content .= '<p style="text-align: center; ">Powered by <a href="http://www.scriptboxer.com/download-site-script.php">DownloadBoxer v1</a>.<br />
&copy; <a href="http://www.scriptboxer.com">ScriptBoxer</a> - <a href="http://www.scriptboxer.com">PHP Scripts</a></p>';
$html = str_replace('{content}', $content, $html);
$html = str_replace('{title}', 'Downloading File....', $html);
echo $html;
}else{
$content = '<form name="counter"><h1>Download File</h1>
<h2>Your download will begin in:
<input name="d2" size="1" type="text" style="font-family:Segoe UI, Trebuchet MS, Helvetica, sans-serif; font-size:23px; font-weight:bold;" />&nbsp;seconds</h2>
</form>
<script>
<!--
//
var milisec=0
var seconds=60
document.counter.d2.value='30'

function display(){
if (milisec<=0){
milisec=9
seconds-=1
}
if (seconds<=-1){
milisec=0
seconds+=1
}
else
milisec-=1
document.counter.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()
-->
</script>
<p><span style="font-size:11px;">Clicking adverts have no affect on the loading of the file.</span></p>
<p><a href="?action=donateToUs">Our service is free. Click here to keep it that way.</a></p>
<p><strong>File uploaded by</strong>: '.$row['owner'].'</p>
<p><strong>Why do I have to wait to download my file?</strong><br />
We require users to wait before downloading files, so that we can reduce the load on the server. Sometimes, you will be able to download immediately,
other times you will need to wait upto 20 minutes.</p>
<p><a href="?action=reportFile">CLICK HERE TO REPORT ILLEGAL/PIRATE FILES</a></p>';
function output_file($file, $name, $mime_type='')
{
if(!is_readable($file)) die('File not found or inaccessible!');
$size = filesize($file);
$name = rawurldecode($name);
/* Figure out the MIME type (if not specified) */
$known_mime_types=array(
"txt" => "text/plain",
"zip" => "application/zip",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"gif" => "image/gif",
"png" => "image/png",
"jpeg"=> "image/jpg",
"jpg" => "image/jpg",
);

if($mime_type==''){
$file_extension = strtolower(substr(strrchr($file,"."),1));
if(array_key_exists($file_extension, $known_mime_types)){
$mime_type=$known_mime_types[$file_extension];
} else {
$mime_type="application/force-download";
};
};
@ob_end_clean(); //turn off output buffering to decrease cpu usage
// required for IE, otherwise Content-Disposition may be ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');

header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// 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);
}
/* output the file itself */
$chunksize = 1*(10241024*10241024); //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); // is also possible
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
} else die('Error - can not open file.');
die();
}
}
$content .= '<p style="text-align: center; ">Powered by <a href="http://www.scriptboxer.com/download-site-script.php">DownloadBoxer v1</a>.<br />
&copy; <a href="http://www.scriptboxer.com">ScriptBoxer</a> - <a href="http://www.scriptboxer.com">PHP Scripts</a></p>';
$html = str_replace('{content}', $content, $html);
$html = str_replace('{title}', 'Downloading File....', $html);
echo $html;
break;
?>
The files are located outwith the public directory, and the MySQL db has the full location stored in it (as the format /home/bleh/blah/etc)

Can anyone help?

I'd also like the download to begin after $config['waittime'], so how do I do that aswell?

No comments posted yet

Your Answer:

Login to answer
123 Like 32 Dislike
Previous forums Next forums
Other forums

rand() function
just a general question guys a girls, is the rand() function 100% random or is it based on time?

[Need Help] php timing issues
I don't know what is going wrong. I need some help with being able to set an image at 9:00am Colorad

Access website from only 1 computer...?
One of my customers wants his website to only be accessed by people in which they bought the website

php email checker
I am having alot of trouble finding info on how to do these email things. I need to do the following

ALV sum various columns problem
Hi all,
I'm doing a report on ABAP for a timesheet of the current month. The output i want is s

Page doesn't expand for content
Hi. I've been testing a query I made. It's here http://lapr1.6te.net/inquerito.php
The page doesn

Multi-user card game
I'm writing a batch of games and such. Lottery is finished, Poker,blackjack,etc are next. They will

login box shows up again after logging in 2nd login works
Hello,

I am having trouble on my site Lockerz.rack111.com where when you login the login box

Unexpected T_Variable ?
Hi all,
I dont really know what I am doing!! I know I'm doing something wrong, and I know its on

sendmail code suddenly not working
Hi Guys, I maintain 3 sites (including my own) I use the following code from a french webmaster that

Sign up to write
Sign up now if you have flare of writing..
Login   |   Register
Follow Us
Indyaspeak @ Facebook Indyaspeak @ Twitter Indyaspeak @ Pinterest RSS



Play Free Quiz and Win Cash