【发布时间】:2013-12-04 18:41:02
【问题描述】:
我有以下代码将图像上传到外部服务器。问题是它只上传数组中的一张图片,而不是数组中的所有图片,问题出在哪里:)?
$images = explode(',', $details['images']);
$mh = curl_multi_init();
$sequenceNumber = 1;
foreach ($images as $i => $url) {
if (file_exists(dirname(dirname(__FILE__)) . '/tmp/' . $delad . '_' . $sequenceNumber . '.jpg')) {
$uploadfile = dirname(dirname(__FILE__)) . '/tmp/' . $delad . '_' . $sequenceNumber . '.jpg';
} else {
copy($url, dirname(dirname(__FILE__)) . '/tmp/' . $delad . '_' . $sequenceNumber . '.jpg');
$uploadfile = dirname(dirname(__FILE__)) . '/tmp/' . $delad . '_' . $sequenceNumber . '.jpg';
}
$conn[$i] = curl_init("http://*/image.html");
curl_setopt($conn[$i], CURLOPT_POSTFIELDS, array(
'sequenceNumber' => $sequenceNumber,
'imageData' => "@" . $uploadfile . ";type=image/png",
'filename' => $url
));
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($conn[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_multi_add_handle($mh, $conn[$i]);
$sequenceNumber++;
}
do { $n=curl_multi_exec($mh,$active); } while ($active);
foreach ($images as $i => $url) {
//$res[$i]=curl_multi_getcontent($conn[$i]);
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
$details['images'] 只是一个用逗号分隔的图片的 url 列表,例如
http://google.com/stackoverflow-logo.png,http://google.com/stackoverflow2.png
【问题讨论】:
-
不清楚真正的问题是什么,因为我们看不到
$details['images']的值,也看不到设置的接收方。如果您可以提供更多详细信息,应该有人可以提供帮助。 -
我会将这个添加到帖子中,谢谢。我无法控制设置的接收方。
-
嗯,部分问题在于接收方。就目前而言,您的脚本看起来不错。你控制接收方吗?也许那里的代码有问题。
-
无法控制接收方,这很奇怪,因为当我在 foreach 中为图片 URL 做一个 curl 时,所有图片都会上传。
-
嗯。好的。似乎接收端是因素。只需使用
sleep设置答案作为在上传之间暂停脚本的潜在解决方案,因为接收端似乎是问题所在。
标签: php arrays image curl upload