时间:2021-07-01 10:21:17 帮助过:3人阅读
1 客户端限制
- <form action="doAction2.php" method="post" enctype="multipart/form-data">
- <input type="hidden" name="MAX_FILE_SIZE" value="101321" />
- 请选择您要上传的文件:
- <input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"/><br/>
- <input type="submit" value="上传"/>
- </form>
这里用input的属性对上传文件的大小和类型进行了限制,但是个人感觉:一,html代码是“可见的”;二,常不起作用(没找到原因,但因为第一个我也想放弃它,知道就好。
2 服务器端限制
主要限制大小和类型,再有就是方式。
- <?php
- header('content-type:text/html;charset=utf-8');
- //接受文件,临时文件信息
- $fileinfo=$_FILES["myFile"];//降维操作
- $filename=$fileinfo["name"];
- $tmp_name=$fileinfo["tmp_name"];
- $size=$fileinfo["size"];
- $error=$fileinfo["error"];
- $type=$fileinfo["type"];
- //服务器端设定限制
- $maxsize=10485760;//10M,10*1024*1024
- $allowExt=array('jpeg','jpg','png','tif');//允许上传的文件类型(拓展名
- $ext=pathinfo($filename,PATHINFO_EXTENSION);//提取上传文件的拓展名
- //目的信息
- $path="uploads";
- if (!file_exists($path)) { //当目录不存在,就创建目录
- mkdir($path,0777,true);
- chmod($path, 0777);
- }
- //$destination=$path."/".$filename;
- //得到唯一的文件名!防止因为文件名相同而产生覆盖
- $uniName=md5(uniqid(microtime(true),true)).$ext;//md5加密,uniqid产生唯一id,microtime做前缀
- if ($error==0) {
- if ($size>$maxsize) {
- exit("上传文件过大!");
- }
- if (!in_array($ext, $allowExt)) {
- exit("非法文件类型");
- }
- if (!is_uploaded_file($tmp_name)) {
- exit("上传方式有误,请使用post方式");
- }
- if (@move_uploaded_file($tmp_name, $uniName)) {//@错误抑制符,不让用户看到警告
- echo "文件".$filename."上传成功!";
- }else{
- echo "文件".$filename."上传失败!";
- }
- //判断是否为真实图片(防止伪装成图片的病毒一类的
- if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
- exit("不是真正的图片类型");
- }
- }else{
- switch ($error){
- case 1:
- echo "超过了上传文件的最大值,请上传2M以下文件";
- break;
- case 2:
- echo "上传文件过多,请一次上传20个及以下文件!";
- break;
- case 3:
- echo "文件并未完全上传,请再次尝试!";
- break;
- case 4:
- echo "未选择上传文件!";
- break;
- case 7:
- echo "没有临时文件夹";
- break;
- }
- }
这里,具体实现都有注释,每一步其实都可以自己试试的,很有趣。
3 封装
函数
- <?php
- function uploadFile($fileInfo,$path,$allowExt,$maxSize){
- $filename=$fileInfo["name"];
- $tmp_name=$fileInfo["tmp_name"];
- $size=$fileInfo["size"];
- $error=$fileInfo["error"];
- $type=$fileInfo["type"];
- //服务器端设定限制
- $ext=pathinfo($filename,PATHINFO_EXTENSION);
- //目的信息
- if (!file_exists($path)) {
- mkdir($path,0777,true);
- chmod($path, 0777);
- }
- $uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
- $destination=$path."/".$uniName;
- if ($error==0) {
- if ($size>$maxSize) {
- exit("上传文件过大!");
- }
- if (!in_array($ext, $allowExt)) {
- exit("非法文件类型");
- }
- if (!is_uploaded_file($tmp_name)) {
- exit("上传方式有误,请使用post方式");
- }
- //判断是否为真实图片(防止伪装成图片的病毒一类的
- if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
- exit("不是真正的图片类型");
- }
- if (@move_uploaded_file($tmp_name, $destination)) {//@错误抑制符,不让用户看到警告
- echo "文件".$filename."上传成功!";
- }else{
- echo "文件".$filename."上传失败!";
- }
- }else{
- switch ($error){
- case 1:
- echo "超过了上传文件的最大值,请上传2M以下文件";
- break;
- case 2:
- echo "上传文件过多,请一次上传20个及以下文件!";
- break;
- case 3:
- echo "文件并未完全上传,请再次尝试!";
- break;
- case 4:
- echo "未选择上传文件!";
- break;
- case 7:
- echo "没有临时文件夹";
- break;
- }
- }
- return $destination;
- }
调用
- <?php
- header('content-type:text/html;charset=utf-8');
- $fileInfo=$_FILES["myFile"];
- $maxSize=10485760;//10M,10*1024*1024
- $allowExt=array('jpeg','jpg','png','tif');
- $path="uploads";
- include_once 'upFunc.php';
- uploadFile($fileInfo, $path, $allowExt, $maxSize);
以上就是php文件上传相关限制问题的详细内容,更多请关注Gxl网其它相关文章!