在php中文件上传我们都是利用表单的post来实例了,注意:标签的 enctype 属性规定了在提交表单时要使用哪种内容类型.在表单需要二进制数据时,比如文件内容,请使用 \"multipart/form-data\"
这是一种非常简单文件上传方式.基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制.
实例代码如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <meta http-equiv="Content-Language" content="zh-cn" />
- </head>
- <body>
- <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>
- <?php
- if($_POST){
- if ( $_FILES["file"]["size"] < 2000000 )
- {
- 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";
- }
- }
- ?>
- </body>
- </html>
第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error".就像这样:
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
首先是上传的提交页面upfile.html
实例代码如下:
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <form action="upload.php" enctype="multipart/form-data" method="POST">
- <input type="hidden" name="max_file_size" value="33554432">
- <input type="file" name="file">
- <input type="submit" name="submit" value="上传" />
- </form>
1. PHP支持HTML以POST的方法传输文件,但是form中必须声明enctype的属性="multipart/form-data",否则整个form表单将不起任何作用.
2. form表单中必须含有一个name为MAX_FILE_SIZE的隐藏域,这个隐藏域用来指定用户最大能上传的文件大小,必须声明在所有其他input标签之前.如果文件超大的话,浏览器直接就可以给出提示,不必浪费上传的时间.
下面就是上传处理文件upload.ph,实例代码如下:
- <?php
-
-
- $dest_dir='uploads';
-
-
- if( !is_dir($dest_dir) || !is_writeable($dest_dir) )
- {
- die("上传目录 ".$dest_dir." 不存在或无法写入");
- }
-
-
- $type=array("rar","zip","txt","c");
-
-
- $upfile=&$HTTP_POST_FILES['file'];
-
-
- function fileext($filename)
- {
- return substr(strrchr($filename, '.'), 1);
- }
-
-
- if( !in_array( strtolower( fileext($upfile['name'] ) ),$type) )
- {
- $text=implode(",",$type);
- echo "对不起,您只能上传以下类型文件: ",$text,"<br>";
- }
- else
- {
-
- $dest=$dest_dir.'/'.date("ymdHis")."_".$upfile['name'];
-
-
- $state=move_uploaded_file($upfile['tmp_name'],$dest);
-
- if ($state)
- {
- print("文件上传成功!<br>");
- print("文件名:".$dest."<br>");
- print("上传的文件大小:".( round($upfile['size'] / 1024,2) )." KB<br>");
- }
- else
- {
-
- switch($upfile['error'])
- {
- case 1 : die("上传文件大小超出 php.ini:upload_max_filesize 限制<br>");
- case 2 : die("上传文件大小超出 MAX_FILE_SIZE 限制<br>");
- case 3 : die("文件仅被部分上传<br>");
- case 4 : die("没有文件被上传<br>");
- case 5 : die("找不到临时文件夹<br>");
- case 6 : die("文件写入失败<br>");
- }
- }
- }
-
- ?>
|