467,188 Members | 1,476 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,188 developers. It's quick & easy.

how to download a file using php?

100+
this is my upload.php

Expand|Select|Wrap|Line Numbers
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>File Upload</title>
  6. </head>
  7. <?php
  8.  
  9. include('config.php');
  10.  
  11. ?>
  12. <body>
  13. <?php
  14. /*if ((($_FILES["file"]["type"] == "/doc")
  15. || ($_FILES["file"]["type"] == "image/jpeg")
  16. || ($_FILES["file"]["type"] == "image/pjpeg"))
  17. && ($_FILES["file"]["size"] < 66000))*/
  18. if(($_FILES["file"]["size"] < 66000) && ($_FILES["file"]["type"] == "application/msword") )
  19.   {
  20.   if ($_FILES["file"]["error"] > 0)
  21.     {
  22.     echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
  23.     }
  24.   else
  25.     {
  26.     echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  27.     echo "Type: " . $_FILES["file"]["type"] . "<br />";
  28.     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  29.     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
  30.  
  31.     if (file_exists("upload/" . $_FILES["file"]["name"]))
  32.       {
  33.       echo $_FILES["file"]["name"] . " already exists. ";
  34.       }
  35.     else
  36.       {
  37.       move_uploaded_file($_FILES["file"]["tmp_name"],
  38.       "upload/" . $_FILES["file"]["name"]);
  39.       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  40.  
  41.         $filename = $_FILES["file"]["name"]; 
  42. $filetype = $_FILES["file"]["type"];
  43. $filesize = $_FILES["file"]["size"];
  44. $tempfile = $_FILES["file"]["tmp_name"];
  45.  
  46.       $query="insert into resume_upload (name, type, size,tmp_name) values ( '$filename','$filetype','$filesize','$tempfile' )";
  47.  
  48. mysql_query($query);
  49. $candidatename = $_POST['cname'];
  50. $gender = $_POST['gen'];
  51. $email = $_POST['email'];
  52. $phone = $_POST['ph'];
  53. $qualification = $_POST['qual'];
  54. $experience = $_POST['exp'];
  55. $skills = $_POST['skills'];
  56. $industry =$_POST['indus'];
  57.  
  58. $query1="insert into candidate (cname, gen, email, ph, qual, exp, skills, indus, res_title ) values ( '$candidatename','$gender','$email','$phone' ,'$qualification','$experience','$skills','$industry','$filename' )";
  59.  
  60. mysql_query($query1);
  61.  
  62. echo "<br>";
  63. echo "File Details stored in database";
  64.  
  65.       }
  66.  
  67.     }
  68.   }
  69. else
  70.   {
  71.   echo "Invalid file. Please Upload Word Document";
  72.   }
  73. ;
  74. ?> 
  75. </body>
  76. </html>
  77.  
  78.  
document is succesfully uploading to a specific folder. now i want to download the document from that folder.

this is my search.php code
Expand|Select|Wrap|Line Numbers
  1. <?php
  2.  
  3. include('lock.php');
  4. include("config.php");
  5.  
  6.  
  7.  
  8.   $var = @$_GET['q'] ;
  9.   $trimmed = trim($var); 
  10.  
  11. // rows to return
  12. $limit=10; 
  13.  
  14.  
  15. if ($trimmed == "")
  16.   {
  17.   echo "<p>Please enter a search...</p>";
  18.   exit;
  19.   }
  20.  
  21.  
  22. /*if (!isset($var))
  23.   {
  24.   echo "<p>We dont seem to have a search parameter!</p>";
  25.   exit;
  26.   }*/
  27.  
  28. $query = "select * from candidate where cname like \"%$trimmed%\" ||  skills like \"%$trimmed%\" ||   exp like \"%$trimmed%\" || indus like \"%$trimmed%\" || qual like \"%$trimmed%\" ORDER BY cid ";
  29.  
  30.  $numresults=mysql_query($query);
  31.  $numrows=mysql_num_rows($numresults);
  32.  
  33.  
  34. if ($numrows == 0)
  35.   {
  36.   echo "<h4>Results</h4>";
  37.   echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";
  38.  
  39.  }
  40.  
  41.  
  42.   if (empty($s)) {
  43.   $s=0;
  44.   }
  45.  
  46.  
  47.   $query .= " limit $s,$limit";
  48.   $result = mysql_query($query) or die("Couldn't execute query");
  49.  
  50.  
  51. echo "<p>You searched for: &quot;" . $var . "&quot;</p>";
  52.  
  53.  
  54. echo "Results";
  55. echo "<br>";
  56. $count = 1 + $s ;
  57. echo "<center>";
  58. echo "<table CELLPADDING=10 border =1 bgcolor='lightgrey'>";
  59. echo "<tr>";
  60. echo "<th>Candidate Name</th>";
  61. echo "<th>Email Id</th>";
  62. echo "<th>Qualification</th>";
  63. echo "<th>Experience</th>";
  64. echo "<th>Skills</th>";
  65. echo "<th>Resume</th>";
  66.  
  67.   while ($row= mysql_fetch_array($result)) {
  68.  ?>
  69.    <tr>
  70.              <td> <?php echo $row["cname"]; ?></td>
  71.              <td><?php echo $row["email"]; ?></td>
  72.              <td><?php echo $row["qual"]; ?></td>
  73.              <td><?php echo $row["exp"]; ?></td>
  74.              <td><?php echo $row["skills"]; ?></td>
  75.              <td>
  76.              <?php echo ( '<img src="download.gif" /><a href="download.php">Download</a>' ); ?>
  77.              </td><td>
  78.            <?php 
  79.            /*$pid= '$_GET[pid]';
  80.            echo ( '<img src="edit.ico" /><a href="download.php?pid=".$pid."\">Download</a>');*/?>
  81.            </td>
  82. </tr> 
  83. <?php
  84.  
  85.   }
  86.  
  87. $currPage = (($s/$limit) + 1);
  88.  
  89.  
  90.   echo "<br />";
  91.  
  92.  
  93.   if ($s>=1) { 
  94.   $prevs=($s-$limit);
  95.   print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt; 
  96.   Prev 10</a>&nbsp&nbsp;";
  97.   }
  98.  
  99.  
  100.   $pages=intval($numrows/$limit);
  101.  
  102.  
  103.  
  104.   if ($numrows%$limit) {
  105.  
  106.   $pages++;
  107.   }
  108.  
  109.  
  110.   if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {
  111.  
  112.  
  113.   $news=$s+$limit;
  114.  
  115. echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Next &gt;&gt;</a>";
  116.   }
  117.  
  118. $a = $s + ($limit) ;
  119.   if ($a > $numrows) { $a = $numrows ; }
  120.   $b = $s + 1 ;
  121.   echo "<p>Showing results $b to $a of $numrows</p>";
  122.  
  123. ?>
  124.  
  125.  
  126. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  127. <html xmlns="http://www.w3.org/1999/xhtml">
  128. <head>
  129. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  130. <title>Search Results</title>
  131. </head>
  132.  
  133. <body>
  134. </body>
  135. </html>
  136.  
in this [code]echo ( '<img src="edit.ico" /><a href="download.php?pid=".$pid."\">download</a>');*/?>[code]
when i click this the download link it must download the
resume doc from 'upload' folder...

plz help?
Jul 29 '10 #1
  • viewed: 2922
Share:
12 Replies
1GB
I developed this script to download CSV file from server (also i got suggestion from other site i cant recall the name)

Expand|Select|Wrap|Line Numbers
  1. <?php
  2.  
  3.  if($_GET['filename']==NULL)
  4.  {
  5.   //print_r($_GET);
  6.   error_mail($mail_to,"Unexpected page access above ".__LINE__." in File ".__FILE__,__LINE__." in ".__FILE__);//function to send error message to the developer
  7.   echo "<message>file name missing </message>";
  8.   exit;
  9.  }
  10.  
  11.  $filename=$_GET['filename'];
  12. // error_mail($mail_to,"filename is".$filename,__LINE__." in ".__FILE__);
  13.  if(file_exists("csv_download/".$filename)==false)
  14.  {
  15.   error_mail($mail_to,"Unexpected file missing above ".__LINE__." in File ".__FILE__."\nMissing File Name: csv_download/".$filename,__LINE__." in ".__FILE__);
  16.   echo "<message>file missing in the server</message>"; 
  17.   exit;
  18.  }
  19.  
  20.  
  21.  $rfilename = realpath("csv_download/".$filename); //server specific
  22.  
  23.  $file_extension = strtolower(substr(strrchr($rfilename,"."),1));
  24.  
  25.  switch( $file_extension )
  26.  {
  27.   case "pdf": $ctype="application/pdf"; break;
  28.   case "exe": $ctype="application/octet-stream"; break;
  29.   case "zip": $ctype="application/zip"; break;
  30.   case "doc": $ctype="application/msword"; break;
  31.   case "xls": $ctype="application/vnd.ms-excel"; break;
  32.   case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  33.   case "gif": $ctype="image/gif"; break;
  34.   case "png": $ctype="image/png"; break;
  35.   case "jpe": case "jpeg":
  36.   case "jpg": $ctype="image/jpg"; break;
  37.   default: $ctype="application/force-download";
  38.  }
  39.  
  40.  header("Pragma: public"); // required
  41.  header("Expires: 0");
  42.  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  43.  header("Cache-Control: private",false); // required for certain browsers
  44.  header("Content-Type: $ctype");
  45.  header("Content-Disposition: attachment; filename=".$filename.";" );
  46.  header("Content-Transfer-Encoding: binary");
  47.  header("Content-Length: ".@filesize($rfilename));
  48.  @readfile("$rfilename");
  49.  unlink($rfilename);            //to delete the file after dwonload
  50. ?>
  51.  
hope this will help

Regards,
Johny
Jul 29 '10 #2
100+
@johny10151981
thanks buddy. its works. i am able to download the file. but i cant read the contents. when i try open the word document it shows an error msg " MS word needs a converter to display the file correctly".... why i am getting this msg....
Jul 29 '10 #3
1GB
hard to explain without examine. Can you manually download the file and try to read?
Please also post the download link so that i can see what in side.
Jul 29 '10 #4
100+
@johny10151981
its just a simple word file. Resume Document... it contains only text...
Jul 29 '10 #5
100+
similarly i cant view the picture too...

No preview available... error.

but that word doc and image file are stored in the folder 'upload'. if i go to that folder and open those files it working. i can view the content.

if i download those file using php, then the downloaded files are not working.... i used the code what u have suggested above...

the word document is not a csv file... its a normal word document....
Jul 29 '10 #6
1GB
I found the reason,
Give me time to sort it out :)
Jul 29 '10 #7
1GB
Make sure the very first characters are
<?php

and the very last characters are
?>

And Make sure you didnt print any data anyway
no print_r or print or echo or anything otherwise your data must get destroyed
Jul 29 '10 #8
100+
@johny10151981
i used echo to just print an error mgs if the file not in the folder...
Jul 29 '10 #9
1GB
There is space above your
<?php
or
after
?>

I have checked again. It download file very well
Jul 30 '10 #10
100+
this is my code download.php

Expand|Select|Wrap|Line Numbers
  1. <?php
  2. include('config.php');
  3. $filename = @$_GET['id'] ;
  4.   echo "$filename";
  5.  
  6.      if('$filename'==NULL)
  7.      {
  8.           echo "<message>file name missing </message>";
  9.       exit;
  10.      }
  11.  
  12.  
  13.   if(file_exists("upload/".$filename)==false)
  14.   {
  15.     echo "<message>file missing in the server</message>"; 
  16.     exit;
  17.     }
  18.  
  19.  
  20.   $rfilename = realpath("upload/".$filename); //server specific
  21.  
  22.   $file_extension = strtolower(substr(strrchr($rfilename,"."),1));
  23.  
  24.     switch( $file_extension )
  25.     {
  26.     case "pdf": $ctype="application/pdf"; break;
  27.      case "exe": $ctype="application/octet-stream"; break;
  28.      case "zip": $ctype="application/zip"; break;
  29.     case "doc": $ctype="application/msword"; break;
  30.    case "xls": $ctype="application/vnd.ms-excel"; break;
  31.     case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  32.     case "gif": $ctype="image/gif"; break;
  33.      case "png": $ctype="image/png"; break;
  34.      case "jpe": case "jpeg":
  35.     case "jpg": $ctype="image/jpg"; break;
  36.      default: $ctype="application/force-download";
  37.     }
  38.  
  39.     header("Pragma: public"); // required
  40.     header("Expires: 0");
  41.     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  42.     header("Cache-Control: private",false); // required for certain browsers
  43.     header("Content-Type: $ctype");
  44.     header("Content-Disposition: attachment; filename=".$filename.";" );
  45.     header("Content-Transfer-Encoding: binary");
  46.     header("Content-Length: ".@filesize($rfilename));
  47.   @readfile("$rfilename");
  48.     //unlink($rfilename);            //to delete the file after dwonload
  49. ?>
  50.  
  51.  
  52.  
  53.  
  54.  
Jul 30 '10 #11
100+
its now working buddy. thanks.
i used
Expand|Select|Wrap|Line Numbers
  1. echo "$filename"; 
inside the code. thats why i am not getting the correct contents. i remove that code,now its working.... thank you!
Jul 30 '10 #12
1GB
I can see there is 5 new line after your
?>
it would change the content of the file. to make sure check the file size in the server and the file size that you upload i guess you will get few bytes differetn
Jul 30 '10 #13

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

1 post views Thread by Vasu | last post: by
3 posts views Thread by Geethu03 | last post: by
35 posts views Thread by keerthyragavendran@gmail.com | last post: by
4 posts views Thread by pplers | last post: by
5 posts views Thread by vinodkus@gmail.com | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.