PHP学习之路之PHP文件上传需要考虑的问题以及解决方法($_FILES,$_SERVER,substr,strrpos,file_exists,move_uploaded_file,is_uploaded_file,mkdir)

问题:

如何控制用户上传的文件类型
如何控制用户上传的文件大小
如何防止用户覆盖图片问题
如何防止同一个用户上传的文件名相冲突问题
解答:

①可以通过PHP全局数组$_FILES['myfile']['type']来判断上传的文件类型

②可以通过PHP全局数组$_FILES['myfile']['size']来判断上传的文件大小

③可以根据用户输入的用户名来动态创建文件夹

③通过time(),rand(),生成的数字来给文件命名就可以解决文件名冲突问题

PHP Codes:

 1 <?php
2 echo "<pre>";
3 print_r($_FILES);
4 echo "<pre>";
5 $file_size=$_FILES['myfile']['size'];//获取文件的大小
6 echo "当前文件大小:".$file_size."B=".(int)$file_size/(1024)."KB<br>";
7 $file_type=$_FILES['myfile']['type'];
8 //如何控制用户上传的文件类型
9 if($file_type=='image/jpeg' || $file_type=='image/pjpeg' ){//只允许上传jpg格式的图片
10 //如何控制用户上传的文件大小
11 if($file_size>2*1024*1024){
12 echo "文件大小限制在2M以内...";
13 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
14 exit();
15 }
16 if (is_uploaded_file($_FILES['myfile']['tmp_name'])){//通过if语句判断文件是否上传成功
17 $move_from=$_FILES['myfile']['tmp_name'];
18 //如何防止用户覆盖图片问题===>可以根据用户输入的用户名来创建文件夹
19 $user_path=$_SERVER['DOCUMENT_ROOT']."/upload/".$_POST['name'];//将上传的文件移到你所希望的目录下
20 if (!file_exists($user_path)) {//如果此文件夹不存在,则创建之,接下来的就应该把图片移到这个文件夹中来
21 mkdir($user_path);
22 }
23
//如何防止同一个用户上传的文件名相冲突问题
24 $suffix=substr($_FILES['myfile']['name'],strrpos($_FILES['myfile']['name'],'.'));//取得文件文件后缀
25 $move_to=$user_path."/".time().rand().$suffix;//通过time(),rand(),就可以解决文件名冲突问题
26 if(move_uploaded_file($move_from,iconv("UTF-8","GBK",$move_to))){
27 echo "文件上传成功!";
28 echo "路径为:".$move_to;
29 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";
30 }
31 }else{
32 echo "文件上传失败...";
33 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
34 die();
35 }
36 }
37 else{
38 echo "<script>alert('只支持图片上传,并且只支持jpg格式的图片');</script>";
39 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
40 die();
41 }
42 ?>

form表单:

<form action="upload.php" method="POST" enctype="multipart/form-data">
用户名:<input name="name" type="text">
文件描述:<textarea name="file_info"></textarea>
<input type="file" name="myfile"/>
<input type="submit" value="上传"/>
</form>

结果截图:

上传之前的文件名:1.jpg

上传之前的文件名:13222172242955.jpg

相关文章文件上传相关函数

 

 



posted @ 2012-06-08 12:48  曾是土木人  阅读(1127)  评论(0编辑  收藏  举报