如何在 PHP 中为上传的文件创建下载链接


How to create a download links for uploaded files in PHP

我是PHP代码的新手。目前,我正在创建一个关于文件上传/下载的项目,用户可以在其中登录和上传-存储-下载其帐户中的文件。

我的问题是,如何使用户上传的文件可下载?我的意思是,每个上传文件的下载链接?这里有人可以给我一个代码吗?

到目前为止,我已成功编写上传代码并列出成功上传的文件。下面是已经完成的代码,供这里的每个人帮助我在代码下载功能。

    //code for listing uploaded files in "userpage.php"
    <div class="box6">
        <h3>File Lists</h3>
        <?php
        $username = $_SESSION['UserName'];
        if($handle = opendir('users/'.$username.'/')){
            while(false !== ($entry = readdir($handle))){
                if($entry != "." && $entry != ".."){
                    echo "$entry<br>";
                }
            }
            closedir($handle);
        }
        ?>
        <table width="650">
        <tr>
        <td>
        <?php echo $entry ;?>
        </td>
        </tr>
        </table>

    //code for uploading files after users press the upload button 
    <?php
    require("connection.php");
    session_start();
    $username = $_SESSION['UserName'];
    $udir= "users/".$username."/";
    $ufile = $udir . basename($_FILES['file']['name']);
    $file = ($_FILES['file']['name']);
    mysql_query("UPDATE `users` SET `Files` = '$file'") ; 
    if(move_uploaded_file($_FILES['file']['tmp_name'], $ufile)){
 header('location:uploadfiles.php?feedback3=uploadsuccessful');
    }
    else{
 header('location:uploadfiles.php?feedback3=uploaderror');
    }
    ?>

提前非常感谢你。

来自 PHP 手册: http://us1.php.net/fpassthru

<?php
// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;
?>

如果您不希望为每种文件类型提供一个application/octet-stream,则可能需要使用Content-Type

此外,提供Content-Disposition将强制浏览器显示或下载可以显示的图像和其他文件的文件。

警告: 不要使用它 - 您将被黑客入侵。


T的简单编码下载所有文件下载任何文件,例如:图像,Excel,PPT,pdf和此代码更高度用于图像下载.u可以非常容易地上传和下载。 您需要文件夹中的文件夹。 您可以将文件上传到文件夹,您可以在文件夹中需要文件文件夹。U需要数据库来存储上传文件名,下载点击文件名自动下载。我被带到链接下载.php文件这是自动下载文件。您无需更改下载文件...,在 php 中上传和下载文件

<?php
$conn=mysql_connect("localhost","root","") or die(mysql_error());
$sdb=mysql_select_db("demo",$conn) or die(mysql_error());
if(isset($_POST['submit'])!=""){
$name=$_FILES['photo']['name'];
$size=$_FILES['photo']['size'];
$type=$_FILES['photo']['type'];
$temp=$_FILES['photo']['tmp_name'];
$caption1=$_POST['caption'];
$link=$_POST['link'];
move_uploaded_file($temp,"files/".$name);
$insert=mysql_query("insert into upload(name)values('$name')");
if($insert){
header("location:index.php");
}
else{
die(mysql_error());
}
}
?>
<html>
<head>
<title>Upload and Download</title>
</head>
<style>
body{ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;}
a{color:#666;}
#table{margin:0 auto;background:#333;box-shadow: 5px 5px 5px #888888;border-radius:10px;color:#CCC;padding:10px;}
#table1{margin:0 auto;}
</style>
<body>
<h2><a href="http://crackerworld.blogspot.in/">Cracker World</a></h2>
<h3><p align="center">Files Upload And Download</p></h3>
<form enctype="multipart/form-data" action="" name="form" method="post">
<table border="0" cellspacing="0" cellpadding="5" id="table">
<tr>
<th >Chosse Files</th>
<td ><label for="photo"></label><input type="file" name="photo" id="photo" /></td>
</tr>
<tr>
<th colspan="2" scope="row"><input type="submit" name="submit" id="submit" value="Submit" /></th>
</tr>
</table>
</form>
<br />
<br />
<table border="1" align="center" id="table1" cellpadding="0" cellspacing="0">
<tr><td align="center">Click to Download</td></tr>
<?php
$select=mysql_query("select * from upload order by id desc");
while($row1=mysql_fetch_array($select)){
$name=$row1['name'];
?>
<tr>
<td width="300">
<img src="tick.png" width="14" height="14"><a href="download.php?filename=<?php echo $name;?>"><?php echo $name ;?></a>
</td>
</tr>
<?php }?>
</table>
</body>
</html>

下载.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(
"pdf" => "application/pdf",
"txt" => "text/plain",
"html" => "text/html",
"htm" => "text/html",
"exe" => "application/octet-stream",
"zip" => "application/zip",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"ppt" => "application/vnd.ms-powerpoint",
"gif" => "image/gif",
"png" => "image/png",
"jpeg"=> "image/jpg",
"jpg" => "image/jpg",
"php" => "text/plain"
);
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();

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");
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);
}
$chunksize = 1*(1024*1024);
$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);
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
} else
die('Error - can not open file.');
die();
}
set_time_limit(0);
$file_path='files/'.$_REQUEST['filename'];
output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
?>