3

抱歉,我实际上多次问过这个问题,但从未完全理解答案。

这是我当前的代码:

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 数据库 ($resultSet['url']) 中获取 URL,向其中附加一些额外的变量,只是一些 GET 数据 ($fullcurl),然后简单地请求页面。这将启动在这些页面上运行的脚本,这就是该脚本需要做的所有事情,就是启动这些脚本。它不需要返回任何输出。只需加载足够长的页面以启动脚本即可。

但是,目前它一次加载每个 URL(当前为 11 个)。我需要同时加载所有这些。我知道我需要使用 curl_multi_ ,但我对 cURL 函数的工作原理一无所知,所以我不知道如何更改我的代码以在 while 循环中使用 curl_multi_ 。

所以我的问题是:

如何更改此代码以同时加载所有 URL?请解释一下,而不仅仅是给我代码。我想知道每个单独的功能到底是做什么的。curl_multi_exec 甚至可以在 while 循环中工作,因为 while 循环一次只发送每一行?

当然,任何关于 cURL 函数的参考资料、指南和教程也会很好。最好不要太多来自 php.net,因为虽然它在给我语法方面做得很好,但它只是有点枯燥,而且解释不太好。

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

        $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.
4

1 回答 1

3

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

  • 使用 curl_init() 创建 curl 资源
  • 通过 curl_setopt(..) 设置资源选项

然后,您需要使用 curl_multi_init() 创建多个 curl 句柄,并使用 curl_multi_add_handle(...) 添加所有以前的单个 curl 资源

然后最后你可以做 curl_multi_exec(...)。

一个很好的例子可以在这里找到:http: //us.php.net/manual/en/function.curl-multi-exec.php

于 2010-04-26T13:52:53.610 回答