北漂IT民工 的博客

利用curl实现字段数组,文件数组的提供

最近在公司一直忙于开发测试平台来满足各种程序测试需求,

这些需求中就包含有对多字段数组与文件数组的提供的需求。

我采用的方法最先想到的当然是使用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

就可以直接上传文件数组了。