多cURL仅上传一张图片

时间:2013-12-04 18:41:03

标签: php arrays image curl upload

我有以下代码将图像上传到外部服务器。问题是它只从阵列中上传一个图像而不是阵列中的所有图像,问题出在哪里:)?

  $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']只是一个逗号分隔的网址列表,例如。

http://google.com/stackoverflow-logo.png,http://google.com/stackoverflow2.png

1 个答案:

答案 0 :(得分:0)

在原始问题的评论中,原始海报声明他们无法控制设置的接收端,但是当他们在foreach循环内进行单个卷曲时,图像会上传。

如果是这种情况,也许接收方根本无法一次处理太多请求。因此,我建议您在脚本中添加sleep()设置,以便在上传之间暂停,以便接收方有机会赶上。

所以在第一个foreach()循环的最底部:

      curl_multi_add_handle($mh, $conn[$i]);
      $sequenceNumber++;
  }

添加sleep()命令,如下所示:

      curl_multi_add_handle($mh, $conn[$i]);
      $sequenceNumber++;
      sleep(10);
  }

由于sleep()使用秒,我将其设置为10秒。您可以根据自己的脚本结果进行调整。应用需求。