Php 使用CURL multi[CURL\u multi\u remove\u handle()]时发出警报

Php 使用CURL multi[CURL\u multi\u remove\u handle()]时发出警报,php,Php,我正在使用以下php函数并行下载批量远程图像。 它足够快,可以将远程图像提取到我的服务器 function save($urls){ $save_to=__DIR__.'/thumb/'; $conn = array(); $fp = array(); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $g=$save_to.basename($url);

我正在使用以下php函数并行下载批量远程图像。 它足够快,可以将远程图像提取到我的服务器

function save($urls){
    $save_to=__DIR__.'/thumb/';

    $conn = array();
    $fp = array();
    $mh = curl_multi_init();
    foreach ($urls as $i => $url) {
        $g=$save_to.basename($url);
      if(!is_file($g)){
            $conn[$i]=curl_init($url);
            $fp[$i]=fopen ($g, "wb");
            curl_setopt ($conn[$i], CURLOPT_FILE, $fp[$i]);
            curl_setopt ($conn[$i], CURLOPT_HEADER ,0);
            curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60);
            curl_setopt ($conn[$i], CURLOPT_MAXCONNECTS, 10);
            curl_multi_add_handle ($mh,$conn[$i]);
        }
    }
   $active = null;
    do {
        curl_multi_exec($mh,$active);
    }
    while ($active > 0);
    foreach ($urls as $i => $url) {
        curl_multi_remove_handle($mh,$conn[$i]);
        curl_close($conn[$i]);
        fclose ($fp[$i]);
    }
    curl_multi_close($mh);
}
这里的问题是,我收到了以下警告和通知:

Notice: Undefined offset: 0 in C:\wamp\www\test\images.php on line 103

Warning: curl_multi_remove_handle() expects parameter 2 to be resource, null given in C:\wamp\www\test\images.php on line 103

Notice: Undefined offset: 0 in C:\wamp\www\test\images.php on line 104

Warning: curl_close() expects parameter 1 to be resource, null given in C:\wamp\www\test\images.php on line 104

Notice: Undefined offset: 0 in C:\wamp\www\test\images.php on line 105
每次图像提取都会出现这些警报

有没有关于如何消除这种警报原因的想法

谢谢

编辑: 我已按照建议将最后一个foreach更改为:

foreach ($conn  as $i => $url) {
... 
}
警报数量已减少,但在以下两行仍然收到相同的警报:

curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);

在最后的
foreach
中,您似乎假设
$URL
$conn
数组都有相同的索引,但情况并非总是如此,因为
$conn[$i]
只有在
$i
-th URL的文件不存在时才会设置。迭代
$conn
而不是
$URL

在最后的
foreach
中,您似乎假设
$URL
$conn
数组都有相同的索引,但情况并非总是如此,因为
$conn[$i]
只有在
$i
第个URL的文件不存在时才会设置。迭代
$conn
而不是
$url

请准确添加第103、104和105行中的内容我已经更新了我的问题。请检查并添加第103、104和105行中的内容。我已经更新了我的问题。请查收我已采纳了你的建议。警报数量已减少,但仍有相同的错误。请检查我的updates@user2198400您不能在
foreach($conn as$i=>$conn)
中使用
$conn
两次。哦,很抱歉犯了这个错误。我已经改正了。但是,即使下载成功的图像不知道如何添加检查,脚本仍在运行。i、 e以检查图像是否已成功下载。事实上,我想在db中将图像id标记为已成功下载。我已经按照您的建议进行了操作。警报数量已减少,但仍有相同的错误。请检查我的updates@user2198400您不能在
foreach($conn as$i=>$conn)
中使用
$conn
两次。哦,很抱歉犯了这个错误。我已经改正了。但是,即使下载成功的图像不知道如何添加检查,脚本仍在运行。i、 e以检查图像是否已成功下载。事实上,我想将db中的图像id标记为已成功下载