我目前上传照片的脚本如下:
foreach($files as $file) {
$data = base64_encode(file_get_contents($file));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
}
我最多可以有1000个文件上传到远程服务器,curl处理所有内容可能需要很长时间。解决方案似乎是多卷曲,但有一个独特的方面:
我需要多卷曲来将响应保存到像$upload_results[] = array($file, 'response')
我该怎么做?
谢谢!
答案 0 :(得分:0)
基本上,这可以通过在文件名为键的数组中创建句柄,然后将结果读入另一个具有相同键的数组来完成。
function uploadLotsOfFiles($files) {
$mh = curl_multi_init();
$handles = array();
$results = array();
foreach ($files as $file) {
$handles[$file] = curl_init();
curl_setopt($handles[$file], CURLOPT_RETURNTRANSFER, true);
//File reading code and other options from your question go here
curl_multi_add_handle($mh, $handles[$file]);
}
$running = 0;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh); //Prevent eating CPU
} while($running > 0);
foreach($handles as $file => $handle) {
$results[$file] = curl_multi_getcontent($handle);
curl_multi_remove_handle($mh, $handle);
}
return $results;
}
如果你真的需要的结果是你指定的格式(我不建议这样做,因为它不如使用文件作为键那么优雅):
$results[] = array($file, curl_multi_getcontent($handle));
可用于代替$results[$file] = curl_multi_getcontent($handle);