拿到题目,首先分析源码.

获取了一个post参数save_name作为文件名称.进行操作,这里有一个逻辑漏洞.后台先是对file进行判断,如果不是数组才会对他进行分割.
那么如果我们直接传入一个数组会怎么样呢?

成功上传
但是
为什么这样就能成功上传?我又读了一遍代码,代码逻辑应该是没问题的啊?也就是说,即使我们用post方式传递的是数组也应该能正确执行才对啊.
调试代码
在头部添加开启报错信息
error_reporting(-1); |
添加调试信息
echo '<p>长度: '.count($file).'</p>'; |

再次上传,看一下输出

注意一下这个地方,数组长度为2,数组内容为Array ( [0] => upload-20.jpg [2] => jpg ).
问题好像出来了.从这一行可以看出这个数组好像不是一个索引数组,而是一个关联数组.而且是以数字类型为关联键.
这也正是为什么调用$file[count($file)-1]的时候会返回空.因为count($file)的值为2,整个语句就是$file[1].而file数组作为一个关联数组只有0和2两个键,没有名为1的建,所以只能返回空.后面作为后缀名拼接的时候就只有前面的$file[0]作为文件名.
