设为首页 收藏本站
查看: 594|回复: 0

[经验分享] PHP开发笔记系列(八)- 上传与下载

[复制链接]

尚未签到

发表于 2017-4-3 06:56:36 | 显示全部楼层 |阅读模式
      最近由于项目需要,在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='.$entry.'>'.$entry. '</a><br/>';
}
}
closedir($dp);
echo "<a href='upload-form.php'>upload</a>";
?>
 
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);
?>
     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
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> <br />
<input type="submit" name="submit" value="Submit" />
</form>

 
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>";
}
?>
   本文地址:http://ryan-d.iteye.com/blog/1546706

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359320-1-1.html 上篇帖子: 在Windows上编译PHP扩展组件的问题 下篇帖子: ionCube 一款类似zend的PHP加密/解密工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表