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);
实例代码如下:
< form enctype = "multipart/form-data" action = "upload.php" method = "post" > < input type = "hidden" name = "max_file_size" value = "100000" > < input name = "userfile" type = "file" > < input type = "submit" value = "上传文件" > </ form >注意: 1、表单中enctype=]multipart/form-data]必须指定,以便让服务器知道文件带有常规的表单信息。
2、必须有一个可以设置上传文件最大长度的表单区域,即允许上传文件的最大值(按字节计算),它是隐藏值域,即max_file_size,通过设置其Value(值)可以限制上传文件的大小,避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。但是一般别人可以绕过这个值,所以安全起见,最好是在php.ini文件中配置upload_max_filesize选项,设定文件上传的大小,默认是2M
实例代码如下:
function uploadfile( $type , $name , $ext , $size , $error , $tmp_name , $targetname , $upload_dir ) { $MAX_SIZE = 2000000; $FILE_MIMES = array ( 'image/pjpeg' , 'image/jpeg' , 'image/jpg' , 'image/gif' , 'image/png' ); $FILE_EXTS = array ( '.jpg' , '.gif' , '.png' , '.JPG' , '.GIF' , '.PNG' ); $file_path = $upload_dir . $targetname ; if (! is_dir ( $upload_dir )) { if (! mkdir ( $upload_dir )) die ( "文件上传目录不存在并且无法创建文件上传目录" ); if (! chmod ( $upload_dir ,0755)) die ( "文件上传目录的权限无法设定为可读可写" ); } if ( $size > $MAX_SIZE ) die ( "上传的文件大小超过了规定大小" ); if ( $size == 0) die ( "请选择上传的文件" ); if (!in_array( $type , $FILE_MIMES ) || !in_array( $ext , $FILE_EXTS )) die ( "请上传符合要求的文件类型" ); if (!move_uploaded_file( $tmp_name , $file_path )) die ( "复制文件失败,请重新上传" ); switch ( $error ) { case 0: return ; case 1: die ( "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值" ); case 2: die ( "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值" ); case 3: die ( "文件只有部分被上传" ); case 4: die ( "没有文件被上传" ); } }如何上传多个文件?比如同时上传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够用。
max_execution_time = 600 max_input_time = 600 upload_max_filesize = 32m 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
把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了
max_execution_time = 600 max_input_time = 600 memory_limit = 32m file_uploads = on upload_tmp_dir = /tmp upload_max_filesize = 32m post_max_size = 32m查看更多关于php文件上传的应用和原理详解 - php上传下载的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29401