Php 如何使用cURL将GET数据同时发送到多个url?

Php 如何使用cURL将GET数据同时发送到多个url?,php,curl,curl-multi,Php,Curl,Curl Multi,很抱歉,这个问题我已经问了好几次了,但是我从来没有完全理解过答案 这是我目前的代码: while($resultSet = mysql_fetch_array($SQL)){ $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data curl_setopt($ch, CURLOPT_TIMEOUT, 2); //Only l

很抱歉,这个问题我已经问了好几次了,但是我从来没有完全理解过答案

这是我目前的代码:

while($resultSet = mysql_fetch_array($SQL)){            
$ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
            curl_exec($ch);                                 //Execute the cURL
            curl_close($ch);                                //Close it off 
} //end while loop
我在这里做的是从MySQL数据库中获取url($resultSet['url']),向其添加一些额外的变量,只获取一些数据($fullcurl),并简单地请求页面。这将启动在这些页面上运行的脚本,而这个脚本所需要做的就是启动这些脚本。它不需要返回任何输出。只需加载足够长的页面,脚本即可启动

然而,目前它一次加载一个URL(目前为11个)。我需要同时加载它们。我知道我需要使用curl\u multi\u,但我对curl函数的工作原理一无所知,所以我不知道如何在while循环中更改代码以使用curl\u multi\u

因此,我的问题是:

如何更改此代码以同时加载所有URL?请解释一下,不要只给我代码。我想知道每个单独的函数具体做什么。curl\u multi\u exec是否会在while循环中工作,因为while循环只是一次发送一行

当然,任何关于旋度函数的参考资料、指南和教程都会很好。最好不要太多来自php.net,因为虽然它很好地为我提供了语法,但它只是有点枯燥,解释也不太好

编辑:好的,扎夫,这是我目前的代码:

        $mh = curl_multi_init(); //set up a cURL multiple execution handle

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); //Query the shell table
                    while($resultSet = mysql_fetch_array($SQL)){   

        $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
        curl_multi_add_handle($mh, $ch);
    } //No more shells, close the while loop

        curl_multi_exec($mh);                           //Execute the multi execution
        curl_multi_close($mh);                          //Close it when it's finished.

在while循环中,需要对每个URL执行以下操作:

  • 使用curl_init()创建一个curl资源
  • 通过curl_setopt(..)设置资源的选项
然后,您需要使用curl\u multi\u init()创建一个多卷曲句柄,并使用curl\u multi\u add\u handle(…)添加所有以前的单个卷曲资源

最后,您可以执行curl\u multi\u exec(…)


这里可以找到一个很好的例子:

您认为Gee可能重复吗?你看过完整的问题了吗?天哪,你看过常见问题吗?哦,我不知道为什么我没有想到这一点。如何从while循环中的控制柄添加多重卷曲控制柄?很有趣。我能做到这一点吗:
$mh=curl\u multi\u init();从db{curl_multi_add_handle($mh,$resultSet['url']);}curl_multi_exec($mh)获取行时是的,试试看,应该可以。如果没有,请发回,我们会看的。谢谢,可以。给我几分钟还有一个问题,我需要在关闭multi_exec之前移除句柄吗?