PHP 文件上传

众所周知,文件上传在一些网站应用中是必不可少的一部分。好比我的博客上传个性头像,一些论坛分享好的学习资料等,这就涉及到使用表单处理文件上传的知识,在php中 咱们能够使用$_FILES这个全局数组来处理。下面就看看基本的文件上传处理部分。php

0x01建立一个文件上传表单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="提交">
 </form>

 </body>
 </html> 

 

有关上面的 HTML 表单的一些注意项列举以下:数组

  • <form> 标签的 enctype 属性规定了在提交表单时要使用哪一种内容类型。在表单须要二进制数据时,好比文件内容,请使用 "multipart/form-data"。
  • <input> 标签的 type="file" 属性规定了应该把输入做为文件来处理。举例来讲,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

0x02建立上传脚本浏览器

 <?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) . " <br>";
 echo "Stored in: " . $_FILES["file"]["tmp_name"];
 }
 ?> 

经过使用 PHP 的全局数组 $_FILES,你能够从客户计算机向远程服务器上传文件。服务器

第一个参数是表单的 input name,第二个下标能够是 "name"、"type"、"size"、"tmp_name" 或 "error"。以下所示:post

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传致使的错误代码

$_FILES["file"]["error"]中的["error"]值状况学习

0:没有错误发生,文件上传成功

1:上传的文件超过了 php.ini中upload_max_filesize(默认状况为2M) 选项限制的值

2:上传文件的大小超过了 HTML表单中MAX_FILE_SIZE选项指定的值

3:文件只有部分被上传

4:没有文件被上传

5:传文件大小为0

0x03上传限制网站

在这个脚本中,咱们增长了对文件上传的限制。用户只能上传 .gif 和 .jpeg 文件,文件大小必须小于 20 kB:spa

allowedExts = array("gif", "jpeg", "jpg", "png");
 $temp = explode(".", $_FILES["file"]["name"]);        //把字符串打散成数组。此处$temp[0]==文件名,$temp[1]==扩展名
$extension = end($temp);                       //将数组内指针指向最后一个元素,并返回该元素的值。此处返回扩展名
 if ((($_FILES["file"]["type"] == "image/gif")
 || ($_FILES["file"]["type"] == "image/jpeg")
 || ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
 || ($_FILES["file"]["type"] == "image/png"))
 && ($_FILES["file"]["size"] < 20000)
 && in_array($extension, $allowedExts))         //判断扩展名是否在数组$allowedExts中
 {
 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) . " <br>";
 echo "Stored in: " . $_FILES["file"]["tmp_name"];
 }
 }
 else
 {
 echo "Invalid file";
 }
 ?> 

0x04保存被上传的文件指针

上面的实例在服务器的 PHP 临时文件夹中建立了一个被上传文件的临时副本。

这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,咱们须要把它拷贝到另外的位置:

 <?php
/*上传限制*/
$allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) { 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) . " <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"]); //移动上传文件到upload目录下 echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?>
相关文章
相关标签/搜索