您的位置:首页 > 编程语言 > PHP开发

实现PHP文件上传模块

2013-04-15 01:50 489 查看
首先确保LAMP已经配置成功。
环境:Opensuse12.2 LAMP
今天要实现的是php的文件上传模块,以上传图片和pdf文档为例。
步骤如下:
修改php.ini
linux下的php.ini放在了/etc/php5/apache2文件夹下,终端运行
sudo vim /etc/php5/apache2/php.ini


用“/×××”在vim中查找下面的值,进行修改:
upload_max_filesize = 10M

该选项表示上传文件的最大字节长度。默认2M,改为10M
post_max_size = 12M
该选项代表允许POST数据的最大字节长度,默认是8M,建议设定值比upload_max_filesize略大。

memory_limit默认128M,如果要上传的文件大小超过这个值,就需要修改,这里不需要修改。
修改完之后保存。

创建项目
在/srv/www/htdocs/创建test2文件夹,里面创建两个文件:upload.html,upload_file.php.还要创建一个upload文件夹用于存放上传的文件。
首先对upload文件夹处理一下,修改它的权限。
终端运行:

sudo chmod 777 upload -R


下面是代码清单。
upload.html

<html> <body>  <form action="upload_file.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>  </body> </html>

upload_file.php

<?php  if(($_FILES["file"]["type"] == "image/png")||($_FILES["file"]["type"] == "application/pdf"))   {   if ($_FILES["file"]["error"] > 0)     {     echo "Return Code: " . $_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 />";      if (file_exists("upload/" . $_FILES["file"]["name"]))       {       echo $_FILES["file"]["name"] . " already exists. ";       }     else       {       move_uploaded_file($_FILES["file"]["tmp_name"],       "upload/" . $_FILES["file"]["name"]);       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];       }     }   } else   {   echo "Invalid file";   } ?>

简单解释一下。
html文件中就是一个form,用来处理与用户的交互,注意按钮的属性。运行起来是这样的



选择好文件,点击Submit之后,后台的处理就交给php了。



php通过全局数组_FILE获取文件的一些属性,然后对其进行相应的处理。
$_FILES["file"]["error"] 中放的是出错代码,对应的错误如下:

编码
说明
UPLOAD_ERR_OK 0 文件成功上传
UPLOAD_ERR_INI_SIZE 1 文件大小比php.ini中upload_max_filesize指定值要大
UPLOAD_ERR_FORM_SIZE 2 文件的 小比表单的MAX_FILE_SIZE指定的值大
UPLOAD_ERR_PARTIAL 3 文件上传不完整(可能因为请求时间过长被终止)
UPLOAD_ERR_NO_FILE 4 没有文件随着这个请求上传
UPLOAD_ERR_NO_TMP_DIR 6 在php.ini中没有指定临时文件夹
文件上传好之后就可以在upload中看到上传好的文件了。



做到这里已经差不多了,但还可以扩展,比如上传大文件时显示进度条,比如上传文件同时写入数据库,然后在页面中显示文件名,点击可以下载。
时间关系,就到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: