Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Multi-cURL仅上载一个图像_Php_Arrays_Image_Curl_Upload - Fatal编程技术网

Php Multi-cURL仅上载一个图像

Php Multi-cURL仅上载一个图像,php,arrays,image,curl,upload,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__)) .

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

  $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

在对原始问题的评论中,原始海报声明他们无法控制设置的接收端,但当他们在foreach循环中执行单个卷曲时,图像将上载

如果是这样的话,也许接收方根本无法同时处理太多的请求。因此,我建议在脚本中添加一个设置,在上传之间暂停,以便让接收方有机会赶上进度

因此在第一个foreach循环的最底部:

添加一个sleep命令,如下所示:

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

由于睡眠使用秒,我将其设置为10秒。请根据您的脚本结果和应用程序需要随意调整。

不清楚真正的问题是什么,因为我们既看不到$details['images']的值,也看不到设置的接收端。如果你能提供更多的细节,应该有人能帮上忙。我会将此添加到帖子中,谢谢。我无法控制设置的接收端。嗯,部分问题是接收端。就目前而言,您的脚本看起来不错。你能控制接收端吗?也许代码中有一个问题。接收端无法控制,这很奇怪,因为当我在foreach中对图像URL进行一次卷曲时,all get upload.Hmmm。可以似乎接收端是一个因素。只需设置一个答案,使用睡眠作为一个潜在的解决方案,在上传之间暂停脚本,因为接收端似乎是问题所在。
      curl_multi_add_handle($mh, $conn[$i]);
      $sequenceNumber++;
      sleep(10);
  }