Home >Backend Development >PHP Tutorial >这个判断上传文件格式的函数如何解释

这个判断上传文件格式的函数如何解释

WBOY
WBOYOriginal
2016-06-23 13:44:491053browse

一直读不明白,他每句是啥意思呢?

function f_postfix($f_type,$f_upfiles){	$is_pass = false;	$tmp_upfiles = split("\.",$f_upfiles);	$tmp_num = count($tmp_upfiles);	for($num = 0; $num < count($f_type);$num++){		if(strtolower($tmp_upfiles[$tmp_num - 1]) == $f_type["$num"])			$is_pass = $f_type["$num"];	}	return $is_pass;}


回复讨论(解决方案)

$f_type这个是什么东西? 不知道函数的参数什么意思,只能从字面分析函数。

    $is_pass = false;//声明遍历
    $tmp_upfiles = split("\.",$f_upfiles);//字符串切割数组
    $tmp_num = count($tmp_upfiles);//同级数组数量
    for($num = 0; $num          if(strtolower($tmp_upfiles[$tmp_num - 1]) == $f_type["$num"])//数值比较
            $is_pass = $f_type["$num"];//重新赋值
    }
    return $is_pass;//返回结果

$f_type应该是允许上传的类型,数组,小写,下标从0开始
$tmp_upfiles = split("\.",$f_upfiles);//将传入的文件名(也可能是路径)以“.”分割成数组

这里的 $tmp_upfiles[$tmp_num - 1]
不理解,在逻辑上怎么理解啊 

function f_postfix($f_type,$f_upfiles){    $is_pass = false; //指定返回值的初值,false 表示无效    $tmp_upfiles = split("\.",$f_upfiles); //按 . 将文件名拆分成数组//注意:从php5.3起split函数已经在废止之列,使用时需加 @ 屏蔽错误//建议改为 explode,$tmp_upfiles = explodet(".",$f_upfiles);    $tmp_num = count($tmp_upfiles); //统计拆分后数组元素的个数    for($num = 0; $num < count($f_type);$num++){ //对传入的后缀数组        if(strtolower($tmp_upfiles[$tmp_num - 1]) == $f_type["$num"]) //与文件名的后缀比较            $is_pass = $f_type["$num"]; //成果则保存    }    return $is_pass; //返回计算结果}

考虑到将字符串查分成数组并取最后一个元素与
substr($f_upfiles, strripos($f_upfiles, '.')+1);
是等价的,无需多次一举的拆分

而提取文件名的后缀更有
pathinfo($f_upfiles, PATHINFO_EXTENSION)
的简单形式
所以函数可改写为
function f_postfix($f_type,$f_upfiles) {  $ext = strtolower(pathinfo($f_upfiles, PATHINFO_EXTENSION));  return in_array($ext, $f_type) ? $ext : false;}

$tmp_upfiles = array(1.2.3. 4);
$tmp_num = count($tmp_upfiles); //4

$tmp_upfiles[$tmp_num - 1] 就是
$tmp_upfiles[4-1]  = $tmp_upfiles[3]

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn