PHP文件操作(三)PHP实现文件上传和下载

来源:互联网 发布:淘宝客url转换 编辑:程序博客网 时间:2024/04/30 23:29

一、文件上传原理

用户提交上传文件请求后,上传的文件以临时文件的形式被存储到服务器临时文件夹中。我们使用PHP程序将临时文件移动到我们指定的服务器的文件夹中,从而实现文件的上传。

二、上传页面fileUpload.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>文件上传</title></head><body><!-- form的属性必须为:method="post" enctype="multipart/form-data"--><form name="postForm" action="upload.php" method="post" enctype="multipart/form-data">上传文件:<input name="myFile" type="file" value="" /><input name="subBtn" type="submit" value="上 传" /></form></body></html>

三、处理上传页面upload.php

<?php/* * Created on 2014-11-10 * * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */ header("Content-Type: text/html;charset=utf-8");//echo "<pre>";//var_dump($_FILES);//echo "</pre>";//HTTP 文件上传变量$_FILES$fileName = $_FILES["myFile"]["name"];//上传的文件名$type = $_FILES["myFile"]["type"];//上传文件的MIME类型$tmpName = $_FILES["myFile"]["tmp_name"];//上传文件在服务器上的临时文件名$errNo = $_FILES["myFile"]["error"];//上传文件错误号$size = $_FILES["myFile"]["size"];//上传文件大小$destDir = "uploads/";//用于存放上传文件的目录$destFile = $destDir.$fileName;if(is_uploaded_file($tmpName)){//判断文件是否是通过 HTTP POST 上传的move_uploaded_file($tmpName,$destFile);//将上传的文件移动到指定的位置,若出现同名文件会覆盖。//路径或文件名含有中文的处理//$enCodeDestFile = iconv("utf-8","gbk",$destFile);//move_uploaded_file($tmpName,$enCodeDestFile);}?>

NOTE:move_uploaded_file()与copy()的区别是,前者会检查并确保上传的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。

四、服务器有关上传下载的配置

file_uploads = On 是否允许上传

upload_tmp_dir 上传文件保存临时目录

post_max_size 以POST方式传递数据的限制

max_file_uploads 上传文件大小限制

max_file_uploads 一次上传最大文件数

max_execution_time 脚本被解析器中止之前允许的最大执行时间,单位为秒

max_input_time 脚本解析输入数据允许的最大时间,单位为秒

max_input_nesting_level  输入变量的嵌套深度

memory_limit  一个脚本最大可使用的内存总量

五、错误信息说明

1、UPLOAD_ERR_OK   其值为 0,没有错误发生,文件上传成功。 
2、UPLOAD_ERR_INI_SIZE  其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
3、UPLOAD_ERR_FORM_SIZE   其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
4、UPLOAD_ERR_PARTIAL   其值为 3,文件只有部分被上传。 
5、UPLOAD_ERR_NO_FILE 其值为 4,没有文件被上传。 
6、UPLOAD_ERR_NO_TMP_DIR       其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 
7、UPLOAD_ERR_CANT_WRITE    其值为 7,文件写入失败。PHP 5.1.0 引进。 

六、文件下载

1、文件下载原理:服务器接收客户端请求-->从服务器上读取客户端请求的文件-->将文件信息返回给客户端浏览器,并将文件数据输出给客户端浏览器。

2、下载HTML页面fileDownLoad.html

<a href="download.php?file='E:/abc.png'">下载</a>

3、处理下载页面download.php

<?php/* * Created on 2014-11-12 * * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */header("Content-Type: text/html;charset=utf-8");if(isset($_GET["file"])){//获取传递过来的文件路径$file = $_GET["file"];//中文处理$file = iconv("utf-8","gbk",$file);if(file_exists($file)){//切记在这些语句之前不能有输出语句,具体原理待整理//返回文件大小header("content-Length:".filesize($file));//返回文件名header("content-disposition:attachment;filename=".basename($file));//输出文件readfile($file);//输出文件也可以用file_get_contents()、fread()、fgets()等方法,如://echo file_get_contents($file);}else{echo "文件不存在!";}}?>


1 0