10/30
2016
最近在看php的教程,算是知道用php上传文件是怎么回事了。
首先是html代码:
<form action="t.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit"> </form>
form表单的enctype="multipart/form-data"属性是上传文件时必须的,它表示以二进制的数据格式来传输文件。
后台php代码如下:
<?php header("Content-type:text/html;charset=utf-8"); if ($_FILES["file"]["error"] > 0) //如果有出错信息 { echo "错误:" . $_FILES["file"]["error"] . "<br>"; }else{ //没有错误的话 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>"; echo "文件类型: " . $_FILES["file"]["type"] . "<br>"; echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"]; //移动文件到指定位置 move_uploaded_file($_FILES["file"]["tmp_name"], __DIR__ . "/".$_FILES["file"]["name"]); } ?>
$_FILES存储各种与上传文件有关的信息。它的第一个的键名如"file"是文件上传框的name。第二个键名是上传文件的各项信息,如下:
$_FILES["file"]["name"] - 上传文件的名称 $_FILES["file"]["type"] - 上传文件的类型 $_FILES["file"]["size"] - 上传文件的大小,以字节计 $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称 $_FILES["file"]["error"] - 由文件上传导致的错误代码
因为数据是以二进制形式上传的,所以当文件上传完毕之后,文件是存储在临时目录中的一个tmp文件,路径如"D:\wamp\tmp\phpFFB5.tmp"。所以在最后我们需要使用php内置的函数move_uploaded_file()将文件移动到指定位置,完成存储。
当然了,在生产环境中,上传文件不可能不进行验证。
在前台,我们可以使用JavaScript来获取要上传的文件的属性,如name、size、type、lastModified等。这些属性可以让我们在前台做出验证。这个可以参考《修改表单中file控件的外观》一文或者再去搜索。
在后台,php中$_FILES中也可以获取上传文件的各项属性,上面也已经讲过了。这里我偷懒直接贴个现成的代码:
<?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"] < 204800) // 小于 200 kb && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "错误:: " . $_FILES["file"]["error"] . "<br>"; } else { echo "上传文件名: " . $_FILES["file"]["name"] . "<br>"; echo "文件类型: " . $_FILES["file"]["type"] . "<br>"; echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"]; } } else { echo "非法的文件格式"; } ?>
由于上传木马可以上多后缀的 所以一定要锁定于单后缀
比如 1.php.jpg
什么的