Home > Backend Development > PHP Tutorial > PHP开发札记系列(八)- 上传与下载

PHP开发札记系列(八)- 上传与下载

WBOY
Release: 2016-06-13 13:25:40
Original
744 people have browsed it

PHP开发笔记系列(八)- 上传与下载

??? 最近由于项目需要,在GZBGY进行了闭关,与同行的Developer进行了深入的交流,成果不赖。丢下了 《PHP开发笔记系列(XAMPP+PhpEclipse+XDebug)》 ,今天重新更新一下,这次讲上传下载。

?

??? 上传与下载两个功能是再正常不过的基本功能,在java的开发中,下载会使用File类将文件内容以流的形式写入到response中,并设置相应和http header,让浏览器识别本次是文件下载。在PHP中也是类似,本文《PHP开发笔记系列(八)- 上传与下载》 将是《PHP开发笔记系列(XAMPP+PhpEclipse+XDebug)》 的第八篇,讲述如何使用PHP完成文件的上传与下载操作。


??? 1. 文件下载

??? 文件下载的操作分为两部分,步骤:1)设置http header,2)读取文件。这里我们编写两个php脚本,第一个为file-list.php,用来显示当前文件夹下的所有文件夹和文件,供下载,第二个为download.php,具体的下载代码。代码如下:

?

file:file-list.php
url:http://localhost:88/download-upload/file-list.php
<?php $location = './';
    
    $dp = opendir($location);
    
    while ($entry = readdir($dp)){
        if(is_dir($entry))
        {
            echo '[DIR] '.$entry. '<br/>';
        }elseif (is_file($entry))
        {
            echo '[FILE] <a href="download.php?filename='.%24entry.'">'.$entry. '</a><br>';
        }
    }
    closedir($dp);
    
    echo "<a href="upload-form.php">upload</a>";

?>
Copy after login
?

?

file:download.php
url:http://localhost:88/download-upload/download.php?filename=xxx
<?php if (isset($_GET['filename'])) {
        $filename = $_GET['filename'];
    } else {
        die('Parameter filename doesn\'t exist!');
    }
    
    if (!file_exists($filename)) {
       die($filename.' doesn\'t exist!'); 
    }
    
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: ".filesize($filename));
    Header("Content-Disposition: attachment; filename=" . $filename); 
    
    readfile($filename);
    
?>
Copy after login
?

??? 2. 文件上传

??? 在PHP中,文件上传非常简单,因为php已经自动识别enctype为"multipart/form-data"的请求,自动将里面的文件域中的内容upload到php的tmp文件夹中,我们可以过$_FILES["文件域名称"]["属性"],如$_FILES["file"]["name"]表示上传文件的原始名称、$_FILES["file"]["type"]表示上传文件的类型、$_FILES["file"]["tmp_name"]表示上传文件在php临时文件夹中的路径。由于生成的临时文件会被清空,因此我们需要使用move_uploaded_file()函数将临时文件移动到我们的指定目录中,其中第一个参数为临时文件的路径,第二个参数为目标文件的路径。代码如下:

?

file:upload-form.php
url:http://localhost:88/download-upload/upload-form.php
Copy after login

?

?

file:upload.php
url:http://localhost:88/download-upload/upload.php
<?php if ($_FILES["file"]["error"] > 0)
{
    echo "Error: ".$_FILES["file"]["error"] . "<br>";
}
else
{
    echo "Upload: ".$_FILES["file"]["name"]."<br>";
    echo "Type: ".$_FILES["file"]["type"]."<br>";
    echo "Size: ".($_FILES["file"]["size"] / 1024)." Kb<br>";
    echo "Temp file: ".$_FILES["file"]["tmp_name"]."<br>";
    
    move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
    
    echo "<a href="file-list.php">file-list</a>";
}
?>
Copy after login
?

?? 本文地址:http://ryan-d.iteye.com/blog/1546706

?

?

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template