php 非法图像文件,ThinkPHP 3.2.3 版本上传文件出现“非法上传文件!”错误解决办法...

本文分析了ThinkPHP Upload类中dealFiles方法的问题,指出其在处理上传的多个文件数组时的不足,并提供修复后的代码。通过修正,解决了'非法上传文件!'错误,确保文件以正确的结构存储以便后续处理。
摘要由CSDN通过智能技术生成

找到上传文件类,ThinkPHP/Library/Think/Upload.class.php,找到dealFiles方法

/**

* 转换上传文件数组变量为正确的方式

* @access private

* @param array $files 上传的文件变量

* @return array

*/

private function dealFiles($files) {

$fileArray = array();

$n = 0;

foreach ($files as $key=>$file){

if(is_array($file['name'])) {

$keys = array_keys($file);

$count = count($file['name']);

for ($i=0; $i

$fileArray[$n]['key'] = $key;

foreach ($keys as $_key){

$fileArray[$n][$_key] = $file[$_key][$i];

}

$n++;

}

}else{

$fileArray = $files;

break;

}

}

return $fileArray;

}

分析到这个方法处理文件是有问题的。上传多个文件时,传入$files 的值为

array(5) {

["name"]=>

array(4) {

[0]=>

string(9) "组 1.png"

[1]=>

string(9) "组 2.png"

[2]=>

string(9) "组 3.png"

[3]=>

string(0) ""

}

["type"]=>

array(4) {

[0]=>

string(9) "image/png"

[1]=>

string(9) "image/png"

[2]=>

string(9) "image/png"

[3]=>

string(0) ""

}

["tmp_name"]=>

array(4) {

[0]=>

string(25) "C:\wamp64\tmp\phpE05E.tmp"

[1]=>

string(25) "C:\wamp64\tmp\phpE06F.tmp"

[2]=>

string(25) "C:\wamp64\tmp\phpE07F.tmp"

[3]=>

string(0) ""

}

["error"]=>

array(4) {

[0]=>

int(0)

[1]=>

int(0)

[2]=>

int(0)

[3]=>

int(4)

}

["size"]=>

array(4) {

[0]=>

int(19604)

[1]=>

int(28297)

[2]=>

int(35891)

[3]=>

int(0)

}

}

按道理来说此处应该是将这个数据处理成如下形式:

array(4) {

[0]=>

array(5) {

["name"]=>

string(9) "组 1.png"

["type"]=>

string(9) "image/png"

["tmp_name"]=>

string(25) "C:\wamp64\tmp\php9212.tmp"

["error"]=>

int(0)

["size"]=>

int(19604)

}

[1]=>

array(5) {

["name"]=>

string(9) "组 2.png"

["type"]=>

string(9) "image/png"

["tmp_name"]=>

string(25) "C:\wamp64\tmp\php9213.tmp"

["error"]=>

int(0)

["size"]=>

int(28297)

}

[2]=>

array(5) {

["name"]=>

string(9) "组 3.png"

["type"]=>

string(9) "image/png"

["tmp_name"]=>

string(25) "C:\wamp64\tmp\php9223.tmp"

["error"]=>

int(0)

["size"]=>

int(35891)

}

[3]=>

array(5) {

["name"]=>

string(0) ""

["type"]=>

string(0) ""

["tmp_name"]=>

string(0) ""

["error"]=>

int(4)

["size"]=>

int(0)

}

}

仔细分析此方法,并且修改这个方法如下,可修复“非法上传文件!”这个错误:

private function dealFiles($files) {

$fileArray = array();

$n = 0;

if(is_array($files['name'])) {

$keys = array_keys($files);

foreach ($files['name'] as $key => $value) {

foreach ($keys as $_key){

$fileArray[$n][$_key] = $files[$_key][$key];

}

$n++;

}

}else{

$fileArray = $files; // 单个文件上传

}

return $fileArray;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值