最近在公司一直忙于开发测试平台来满足各种程序测试需求,
这些需求中就包含有对多字段数组与文件数组的提供的需求。
我采用的方法最先想到的当然是使用curl.
于是一个能将字段数组与文件上传的curl很快就产生了。
然后发给其他的同事测试。
结果反映都是无法使用。
后来发现php5.3以下的版本不能支持文件上传。
于是更新到5.3后curl文件上传功能就可以用了。
但是这时的curl还是无法上传文件数组的。
于是我通过调试完成了下面的代码:
private function generate_file_array() {
$files = array();
$tmpdir = sys_get_temp_dir();
foreach($_FILES as $k => $v) {
if (is_array($v[‘name’])) {
foreach($v[‘name’] as $k1 => $v1) {
$file = $tmpdir . DIRECTORY_SEPARATOR . $v1;
if (move_uploaded_file($_FILES[$k][‘tmp_name’][$k1], $file)) {
$files[$k. ‘[‘ . $k1 . ‘]’] = ‘@’ . $file . ‘;type=’ . $v[‘type’][$k1];
} else {
echo “Possible file upload attack!n”;
}
}
continue;
}
$file = $tmpdir . DIRECTORY_SEPARATOR . $v[‘name’];
if (move_uploaded_file($_FILES[$k][‘tmp_name’], $file)) {
$files[$k] = ‘@’ . $file . ‘;type=’ . $v[‘type’];
} else {
echo “Possible file upload attack!n”;
}
}
return $files;
}
对于文件数组来讲最重要的是如下使用方法:
$files[$k. ‘[‘ . $k1 . ‘]’] = ‘@’ . $file . ‘;type=’ . $v[‘type’][$k1];
$k要转化成$k. ‘[‘
又一个数组
也就是
key[0], key[1]的形式。
这样通过set_opt_array
就可以直接上传文件数组了。