首页 » PHP教程 » php下载上传文件技巧_PHP 文件上传

php下载上传文件技巧_PHP 文件上传

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

file_uploads = on 设置php脚本是否可以接管HTTP文件上传

memory_limit = 8M 设置脚本可以分配的最大内存量, 防止失落控的脚本独占做事器内存

php下载上传文件技巧_PHP 文件上传

upload_max_filesize= 200M 限定php处理上传文件大小的最大值, 此值必须小于post_max_size的值

php下载上传文件技巧_PHP 文件上传
(图片来自网络侵删)

最大不要超过做事器的内存

upload_tmp_dir = c:/uploads/ 上传文件存放的临时路径(默认值:利用操作系统的临时目录), 该临时文件的有效期便是脚本周期:

post_max_size = 250M 限定通过post方法可以接管信息的最大值

此值除了包含上传文件的大小, 还包含表单中的数据, 因此此值必须大于upload_max_filesize

限定文件上传的两个参数:

post_max_size = 150M

upload_max_filesize = 100M

post_max_size 必须大于 upload_max_filesize

max_execution_time PHP实行的最大韶光

max_input_time php 解析post/get数据所用的最大韶光

如何获取做事器能够上传的文件大小

<?phpfunction get_upload_max_size(){return min(intval(get_cfg_var('upload_max_filesize')),intval(get_cfg_var('post_max_size')),intval(get_cfg_var('memory_limit')));}echo get_upload_max_size(); //3200M

二、上传表单须要的把稳事变

1. 如果有文件上传操作表单的提交方法必须 HTTP post

2. 表单上传须要利用type为file的表

3. enctype="multipart/form-data" 只有文件上传时才利用这个值, 用来指定表单编码的数据办法, 让做事器知道, 我们要通报

一个文件并带有常规的表单信息。

4. 建议添加一个 MAX_FILE_SIZE 隐蔽表单, 值的单位也是字节

<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

三、PHP处理上传的数据

$_POST 吸收非上传的数据

如果是文件上传的数据则利用 $_FILES处理上传的文件

<?php//step 1 利用$_FILES['pic']["error"] 检讨缺点if($_FILES["pic"]["error"] > 0){ switch($_FILES["pic"]["error"]) { case 1: echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限定的值<br>"; break; case 2: echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"; break; case 3: echo "文件只有部分被上传"; break; case 4: echo "没有文件被上传"; break; default: echo "末知缺点"; } exit;}$maxsize=5000000; //50k//step 2 利用$_FILES["pic"]["size"] 限定大小 单位字节 2M=2000000if($_FILES["pic"]["size"] > $maxsize ) { echo "上传的文件太大,不能超过{$maxsize}字节"; exit;}//step 3 利用$_FILES["pic"]["type"]或是文件的扩展名 限定类型 MIME image/gif image/png gif png jpg/ list($dl, $xl) = explode("/", $_FILES["pic"]["type"]);if($dl!="image"){echo "请上传一个图片,不充许其它类型文件";exit;}///$hz = strrchr($_FILES["pic"]["type"], "."); 后缀名含有"."$allowtype=array("png", "gif", "jpg", "jpeg");$arr=explode(".", $_FILES["pic"]["name"]);$hz=$arr[count($arr)-1];if(!in_array($hz, $allowtype)){ echo "这是不充许的类型"; exit;}//step 4 将让传后的文件名改名$filepath="./uploads/"; //文件上传不要采取根路径 $filepath= "/uploads/", 否则会报错$randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).".".$hz;//将临时位置的文件移动到指定的目录上即可if(is_uploaded_file($_FILES["pic"]["tmp_name"])){ if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){ echo "上传成功"; }else{ echo "上传失落败"; }}else{echo "不是一个上传文件";}

多文件上传构造

多个文件上传后$_FILES 数组构造图

Array([myfile]=>Array([name]=>Array( //$_FILES["myfile"]["name"]存储所有上传文件的内容[0]=>Rav.ini //$_FILES["myfile"]["name"][0]第一个上传文件的名称[1]=>msgsocm.log //$_FILES["myfile"]["name"][1]第二个上传文件的名称[2]=>NOTEPAD.EXE) //$_FILES["myfile"]["name"][2]第三个上传文件的名称[type]=>Array( //$_FILES["myfile"]["type"]存储所有上传文件的类型[0]=>application/octet-stream //$_FILES["myfile"]["type"][0]第一个上传文件的类型[1]=>application/octet-stream //$_FILES["myfile"]["type"][1]第二个上传文件的类型[2]=>application/octet-stream) //$_FILES["myfile"]["type"][2]第三个上传文件的类型[tmp_name]=>Array([0]=>C:/WINDOWS/Temp/phpAF.tmp[1]=>C:/WINDOWS/Temp/phpB0.tmp[2]=>C:/WINDOWS/Temp/phpB1.tmp)[error]=>Array([0]=>0[1]=>0[2]=>0)[size]=>Array([0]=>64[1]=>1350[2]=>66560)))

实例:

<html><head><meta charset="utf-8"><title>index_uploads</title></head><body><form action="uploads.php" method="post" enctype="multipart/form-data"><input type="file" name="file[]"><br><input type="file" name="file[]"><br><input type="submit" value="uploads"></form></body></html><?phpheader("content-type:text/html;charset=utf-8");echo "<pre>";print_r($_FILES);echo "</pre>";$count = count($_FILES['file']['name']);for ($i = 0; $i < $count; $i++) { $tmpfile = $_FILES['file']['tmp_name'][$i]; $filefix = array_pop(explode(".", $_FILES['file']['name'][$i])); $dstfile = "uploads/files/".time()."_".mt_rand().".".$filefix; if (move_uploaded_file($tmpfile, $dstfile)) { echo "<script>alert('succeed!');window.location.href='index_uploads.php';</script>"; } else { echo "<script>alert('fail!');window.location.href='index_uploads.php';</script>"; }}?>

干系函数

is_uploaded_file() 判断文件是否是通过 HTTP POST 上传的

bool is_uploaded_file ( string $filename )

move_uploaded_file() 将上传的文件移动到新位置

bool move_uploaded_file ( string $filename , string $destination )

$filename $_FILES["name"]["tmp_name"]

$destination 移动文件到这个位置(包含文件的路径和文件名)

把稳: 上传文件的脚本的所有者一定要有"w"的权限;

大文件上传时延长上传韶光:

@set_time_limit(0);

新建表单

<form action='deal.php' method='post' enctype='multipart/form-data'>选择头像:<input type='file' name='file' /><hr /><input type='submit' name='submit' value='上传' /></form>

deal.php

<?php//1、设置相应头信息header('Content-type:text/html; charset=utf-8');//2、获取上传文件信息if($_FILES['file']['size'] > 0) { $file = $_FILES['file']['name']; $filename = getRandName($file); //3、把临时文件上传到uploads文件夹下(move_uploaded_file函数) if(move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename)) { echo '上传成功'; } else { echo '上传失落败'; }}//定义一个函数,用于获取随机文件function getRandName($file) { //定义一个变量,用于吸收新名称 $newname = date('YmdHis'); //定义一个字符串 $str = 'abcdefghijklmnopqrstuvwxyz'; //随机取出个中6个字符 for($i=0;$i<6;$i++) { $newname .= $str[mt_rand(0,strlen($str)-1)]; } //返复天生后的新文件名称 return $newname . strrchr($file,'.');}?>

多维$_FILES['uploadFile']数组进行转换

foreach($_FILES['uploadFile'] as $k=>$v){ foreach($v as $key=>$value){ if($key==$key){ $arr[$key][$k] = $value; } }}echo "<pre>";print_r($arr);echo "</pre>";

原数组的格式

Array([name] => Array([0] => laravel框架.txt[1] => ecshop剖析.txt[2] => 注释.txt)[type] => Array([0] => text/plain[1] => text/plain[2] => text/plain)[tmp_name] => Array([0] => C:\Windows\php562C.tmp[1] => C:\Windows\php562D.tmp[2] => C:\Windows\php563E.tmp)[error] => Array([0] => 0[1] => 0[2] => 0)[size] => Array([0] => 12506[1] => 138[2] => 2094))

转换后数组格式:

Array([0] => Array([name] => laravel框架.txt[type] => text/plain[tmp_name] => C:\Windows\php562C.tmp[error] => 0[size] => 12506)[1] => Array([name] => ecshop剖析.txt[type] => text/plain[tmp_name] => C:\Windows\php562D.tmp[error] => 0[size] => 138)[2] => Array([name] => 注释.txt[type] => text/plain[tmp_name] => C:\Windows\php563E.tmp[error] => 0[size] => 2094))

标签:

相关文章