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).

Did you know?Explore Trending and Topic pages for more stories like this.
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

Results from Db outputted twice
Hey guys.. for come reason my data is outputted twise shown in the image below and i cant figure out

weeks in a year
hi,

i found this snippet on php.net
QuoteFor the week number for weeks starting on Sunday:

Send current URL in URL with a $_GET variable problem.
Hello community,

I have created a function that gets the current variable of a page, example:

how to query data from website using VC?
I want to query some datum from a website,so I need a program to read data from a .csv file, and ass

newbie question about multiple queries
hi everyone,
I'm sorry to ask such a basic question, but I'm young and trying to learn php on my

Best way to read this text file.
Hi.I am planning to make a small application in C# to convert the players from Football manager 2010

help with insert
Hi there,

I am trying to insert some data into a database, but for some reason, it is not ins

sql problems
I am having a small problem with my sql statement. it is inserting into 4 of the fields.

fie

Syntax Help
I'm trying to make a form that edits a php file which contains config settings. I'm using strings t

Anti Spam Code Problems
Ok where do i start? Probably by telling you I have very little working knowledge of PHP and that I

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