File download coding using PHP and Mysql | 2my4edge

07 July 2013

File download coding using PHP and Mysql

File downloading code is the method of downloading a file from the database, how to download a file from the database, usually uploaded file are stored in the database and how we can download it. let see, using PHP code we going to download the file. so here we must have to know the upload coding. here i'm not showing upload code, here i just show you and explain you the downloading code only. let see it. ZIP and download code

file download image

DOWNLOAD            LIVE DEMO

here my database field details are,

Database name --> multi
table name --> upload
column names --> id, name, type (3 columns)

the above is database structure.

DB.PHP

<?php
$conn=mysql_connect("localhost","root","") or die(mysql_error());
$db=mysql_select_db("multi",$conn);
?>


INDEX.PHP

<?php 
    include("db.php");  
    $fetc = "SELECT * FROM upload LIMIT 5";
    $result = mysql_query($fetc);
?>

<body>
<?php
while($row1=mysql_fetch_array($result))
{
    $name=$row1['name'];
    $type=$row1['type'];
    ?>
<div class="rect">
<img alt="down-icon" src="down-drop-icon.png" align="left" width="20" height="20" />
<a href="download.php?filename=<?php echo $name ;?>" >
<?php echo $name ;?></a>
</div>
<?php 
} 
?>
</body>

select * from upload table limit to show only 5 data s. and the variable $result is fetched as array in while and echo the file name. for that file name we are giving the download link, that is from download.php.

DOWNLOAD.PHP

<?php
function output_file($file, $name, $mime_type='')
{
 if(!is_readable($file)) die('File not found or inaccessible!');
 $size = filesize($file);
 $name = rawurldecode($name);
 $known_mime_types=array(
    "htm" => "text/html",
    "exe" => "application/octet-stream",
    "zip" => "application/zip",
    "doc" => "application/msword",
    "jpg" => "image/jpg",
    "php" => "text/plain",
    "xls" => "application/vnd.ms-excel",
    "ppt" => "application/vnd.ms-powerpoint",
    "gif" => "image/gif",
    "pdf" => "application/pdf",
    "txt" => "text/plain",
    "html"=> "text/html",
    "png" => "image/png",
    "jpeg"=> "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";
     };
 };
 
 //turn off output buffering to decrease cpu usage
 @ob_end_clean(); 
 
 // 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');
 
 // 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 = 1*(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);
        echo($buffer); 
        flush();
        $bytes_send += strlen($buffer);
    }
 fclose($file);
 } 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_path='files/'.$_REQUEST['filename'];


//Call the download function with file path,file name and file type
output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
?>

look at the highlighted part in the above coding. from the folder name files the files are already stored and we are retrieving that.

types as store in Database

    "htm" => "text/html",
    "exe" => "application/octet-stream",
    "zip" => "application/zip",
    "doc" => "application/msword",
    "jpg" => "image/jpg",
    "php" => "text/plain",
    "xls" => "application/vnd.ms-excel",
    "ppt" => "application/vnd.ms-powerpoint",
    "gif" => "image/gif",
    "pdf" => "application/pdf",
    "txt" => "text/plain",
    "html"=> "text/html",
    "png" => "image/png",
    "jpeg"=> "image/jpg"

if the file name is extended with above all extensions. the type stored in database must by like that the above. that is important.

enjoy with demo. meet you at next tutorial.




RELATED POSTS:

Export the MySQL database table as CSV format using PHP

Marquee style in different manner with PHP and MySql

Simple Login logout system using php

Username live availability Check using php and Ajax

Comment System using PHP and MySql

Create Database with MySql and INSERT coding in php

47 comments:

  1. Thank you the download coding so useful my game website

    ReplyDelete
  2. $name = rawurldecode($name); pls explain this line...

    ReplyDelete
  3. Decode the url, passing with the variable name

    ReplyDelete
  4. Thanks! Can I Limit A Download File?

    ReplyDelete
  5. Thanks for the download coding .This is very helpful for php develops

    ReplyDelete
  6. bro thanks for the code but a major problem..... file is downloading but after download the file is showing corrupted.... i have changed the
    output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');

    to

    output_file($file_path, ''.$_REQUEST['filename'].'', 'application/pdf');

    to download only pdf .....
    can u help me fast please....
    thanks in advance.... :)

    ReplyDelete
    Replies
    1. use this to all type file...

      output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');

      Delete
  7. lanaat ho kisi kaam ka nhe bc

    ReplyDelete
  8. thank you sir this is very helpfully

    ReplyDelete
  9. it is very helpfull codings thank you

    ReplyDelete
  10. thank you for your code. you can also try our file upload and download system.

    http://webgeekresources.com/projects/33-web-based-file-management-system

    ReplyDelete
  11. hi everyone!
    parameters $file and $name in function output_file() transmission from where?
    can u help me fast please....
    thanks everyone.

    ReplyDelete
  12. rawurldecode — Decode URL-encoded strings
    string rawurldecode ( string $str )
    Returns a string in which the sequences with percent (%) signs followed by two hex digits have been replaced with literal characters.
    str--- The URL to be decoded.
    Returns the decoded URL, as a string

    ReplyDelete
  13. how can i upload files using that same codes?

    ReplyDelete
  14. thanks for this code

    ReplyDelete
  15. really helpful script ....
    thanx for sharing....

    ReplyDelete
  16. Amazing work keep doing
    Thanks for the code

    ReplyDelete
  17. Amazing work keep doing
    Thanks for the code

    ReplyDelete
  18. hello everyone...
    how can i insert or select togather img and text and echo same div and if i wanna only text then echo only text and if only img then only img echo ?
    so please any idea

    ReplyDelete
  19. This code is very helpfull for php developer.

    ReplyDelete
  20. yeah this awsome tutorial...
    thanks master

    ReplyDelete
  21. I wan to download audio file ?? how to edit this code for audio file??Pls help

    ReplyDelete
  22. Much Respect to you.Thanks so much for usefull code

    ReplyDelete
  23. can i use this code on wordpress site

    ReplyDelete
  24. I want to check the file name before uploading. The concept is first am downloading a data as a excel / csv file and then i edit the file and upload it, but what is the problem means i have to restrict the file same that menas the file name should be same as my downloaded file name.so if change name of the file the system won't take it.please help me

    ReplyDelete
  25. $name = rawurldecode($name); pls explain this line..
    way use the $file..

    ReplyDelete
  26. Nice posting. Really helps
    What if I have multiple file extension. suppose like word ,excel, etc. what would be the option in that case in following section:

    output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');

    Please explain.

    ReplyDelete
  27. thanks , helpfull...but can you tell me how can we upload all files all at a time.

    ReplyDelete
  28. Thank you very much..but can you help me how can we download multiple files/all files all at a time..Thanks in advance

    ReplyDelete
  29. I want to download the data in PDF format from database table.
    but its giving error (Notice: Undefined variable: row in C:\xampp\htdocs\pdf\generate-pdf-from-mysql-data-using-fpdf\index.php on line 12

    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\pdf\generate-pdf-from-mysql-data-using-fpdf\index.php on line 12
    FPDF error: Some data has already been output, can't send PDF file)


    I used the following code.
    runQuery("SELECT * FROM toy");
    $header = $db_handle->runQuery("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='blog_samples' AND `TABLE_NAME`='toy'");

    require('fpdf/fpdf.php');
    $pdf = new FPDF();
    $pdf->AddPage();

    $pdf->SetFont('Arial','B',12);
    foreach($row as $rowValue) {
    $data=explode(';',$rowValue);
    foreach($data as $columnValue)
    $pdf->Cell(90,12,$columnValue,1);
    $pdf->SetFont('Arial','',12);
    $pdf->Ln();
    }
    $pdf->Output();
    ?>

    plz help me.
    regards:
    neeraj kumar
    neerajkmr277@gmail.com

    ReplyDelete
  30. I want to download the data in PDF format from database table.
    but its giving error (Notice: Undefined variable: row in C:\xampp\htdocs\pdf\generate-pdf-from-mysql-data-using-fpdf\index.php on line 12

    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\pdf\generate-pdf-from-mysql-data-using-fpdf\index.php on line 12
    FPDF error: Some data has already been output, can't send PDF file)


    I used the following code.
    runQuery("SELECT * FROM toy");
    $header = $db_handle->runQuery("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='blog_samples' AND `TABLE_NAME`='toy'");

    require('fpdf/fpdf.php');
    $pdf = new FPDF();
    $pdf->AddPage();

    $pdf->SetFont('Arial','B',12);
    foreach($row as $rowValue) {
    $data=explode(';',$rowValue);
    foreach($data as $columnValue)
    $pdf->Cell(90,12,$columnValue,1);
    $pdf->SetFont('Arial','',12);
    $pdf->Ln();
    }
    $pdf->Output();
    ?>

    plz help me.
    regards:
    neeraj kumar
    neerajkmr277@gmail.com

    ReplyDelete
  31. Great article and tips. which one is the best php editor for all coding use please tell..

    ReplyDelete
  32. Great article and tips. which one is the best php editor for all coding use please tell..

    ReplyDelete
  33. I want users to download Pdf CV when they click this button, I need Php code.

    ReplyDelete
  34. I have one query. I want download multiple file, in single click. I used for loop coiling function, It's not working. How can I do this.

    ReplyDelete
  35. If i want to download movie and video then what to do and I want to build a webpage like youtube or mp3 songs and video then what to do pl┼║zzzzzzz suggest me very soon

    ReplyDelete
  36. the file that is downloaded is corrupted, how to resolve that issue?

    ReplyDelete
  37. the file that is downloaded is corrupted, how to resolve that issue?

    ReplyDelete
  38. helpful code

    ReplyDelete
  39. can you solve this problam
    output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
    image dos't download only plain text download

    ReplyDelete

^