网站地图    收藏   

主页 > php专栏 > php上传下载 >

php文件上传的应用和原理详解 - php上传下载

来源:自学PHP网    时间:2014-11-28 00:00 作者: 阅读:

[导读] php中上传文件必须知道几个技巧,一个必须是由表单post过去的数据,然后由php move_uploaded_file进行接受了,再保存到服务器指定路径即可...

php文件上传的应用和原理详解

php中上传文件必须知道几个技巧,一个必须是由表单post过去的数据,然后由php move_uploaded_file进行接受了,再保存到服务器指定路径即可。

1.form 标签 enctype 属性。

2.$_FILES 系统函数。 //将上传内容转换为数组。

3.move_uploaded_file 函数。 //移动存放在缓存文件夹里的上传文件到指定文件夹。

4.is_uploaded_file 函数。 //判断是否存在。

1.form 标签

格式:<form enctype="multipart/form-data" ... ...>

<input name="upfile" type="file">

2.$_FILES 系统函数

$_FILES['name'] //客户端上传文件原文件名。

$_FILES['type'] //文件的MIME类型,如:“image/gif”

$_FILES['size'] //上传文件大小,字节为单位。

$_FILES['tmp_name'] //临时文件名,一般为默认。

$_FILES['error'] //上传相关情况代码(0:成功,1:超过php.ini设置大小。2:超过PHP文件代码指定大小。3:文件只有部分被上传。4:没有文件被上传。5:上传文件大小为0。)

3.move_uploaded_file 函数

上传后移动文件到目标位置的函数

move_uploaded_file(临时文件,目标位置和文件名;)

4.is_uploaded_file 函数

判断上传MIME类型的文件函数

is_uploaded_file(MIME);

实例代码如下:

  1. <form enctype="multipart/form-data" action="upload.php" method="post">  
  2. <input type="hidden" name="max_file_size" value="100000">  
  3. <input name="userfile" type="file">    
  4. <input type="submit" value="上传文件">  
  5. </form> 

注意:1、表单中enctype=”multipart/form-data”必须指定,以便让服务器知道文件带有常规的表单信息。

2、必须有一个可以设置上传文件最大长度的表单区域,即允许上传文件的最大值(按字节计算),它是隐藏值域,即max_file_size,通过设置其Value(值)可以限制上传文件的大小,避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。但是一般别人可以绕过这个值,所以安全起见,最好是在php.ini文件中配置upload_max_filesize选项,设定文件上传的大小,默认是2M

实例代码如下:

  1. function uploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_dir
  2.     $MAX_SIZE = 2000000; 
  3.     $FILE_MIMES = array('image/pjpeg','image/jpeg','image/jpg','image/gif','image/png'); 
  4.     $FILE_EXTS = array('.jpg','.gif','.png','.JPG','.GIF','.PNG'); 
  5.     $file_path = $upload_dir.$targetname
  6.      
  7.     if(!is_dir($upload_dir)) 
  8.     { 
  9.         if(!mkdir($upload_dir)) 
  10.             die("文件上传目录不存在并且无法创建文件上传目录"); 
  11.         if(!chmod($upload_dir,0755)) 
  12.             die("文件上传目录的权限无法设定为可读可写"); 
  13.     } 
  14.      
  15.     if($size>$MAX_SIZE
  16.         die("上传的文件大小超过了规定大小"); 
  17.     if($size == 0) 
  18.         die("请选择上传的文件"); 
  19.     if(!in_array($type,$FILE_MIMES) || !in_array($ext,$FILE_EXTS)) 
  20.         die("请上传符合要求的文件类型"); 
  21.     if(!move_uploaded_file($tmp_name$file_path)) 
  22.         die("复制文件失败,请重新上传"); 
  23.     switch($error
  24.     { 
  25.         case 0: 
  26.             return ; 
  27.         case 1: 
  28.             die("上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"); 
  29.         case 2: 
  30.             die("上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"); 
  31.         case 3: 
  32.             die("文件只有部分被上传"); 
  33.         case 4: 
  34.             die("没有文件被上传"); 
  35.     } 

如何上传多个文件?比如同时上传3个文件,代码如下:

只需将<input name="userfile" type="file"> 改成

<input name="userfile[]" type="file">

<input name="userfile[]" type="file">

<input name="userfile[]" type="file">

对应的在调用此函数时,$_FILES['userfile']['name'][0],代表第一个文件的相关文件信息,依此类推,其他也一样。

一些关于php性能配置,有必须时我们也可以修改一下

max_execution_time = 30 ;每个PHP页面运行的最大时间值(秒),默认30秒

max_input_time = 60 ;每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit = 128m ;每个PHP页面所吃掉的最大内存,默认128M,如果觉得小了,可以设置大点,128够用。

  1. max_execution_time = 600 
  2. max_input_time = 600 
  3. upload_max_filesize = 32m 
  4. post_max_size = 32m 

如果文件大小限制了我们可以如下解决,打开php.ini,首先找到

file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开

upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M

post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下,但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通,进一步配置以下的参数.

max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒

max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M

把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了

  1. max_execution_time = 600 
  2. max_input_time = 600 
  3. memory_limit = 32m 
  4. file_uploads = on 
  5. upload_tmp_dir = /tmp 
  6. upload_max_filesize = 32m 
  7. post_max_size = 32m 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论