我对 curlinit()
和close()
函数感到困惑。我想知道在每种情况下何时应该关闭 curl 句柄:
1. 使用单个句柄来获取具有不同选项的“单个”URL。例如:
$curl=curl_init('google.com');
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
curl_exec($curl);
现在我想将 FOLLOWLOCATION 设置为 false。我应该做 curl_close($curl),然后从头开始做所有事情,或者只是设置选项并像这样再次执行它:
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,false);
curl_exec($curl);
2.使用单个句柄获取“多个” URL。例如:
$curl = curl_init('google.com');
curl_exec($curl);
现在我想获取 stackoverflow.com。我应该关闭句柄并从头开始,还是我可以设置另一个 URL 而无需关闭句柄。像这样:
$curl = curl_init('stackoverflow.com');
curl_exec($curl);
3.使用多个句柄获取多个 URL。这是我的代码:
$CONNECTIONS=10;
$urls=fopen('urls.txt','r');
while(!feof($urls))
{
$curl_array=array();
$curl=curl_multi_init();
for($i=0;$i<$CONNECTIONS&&!feof($urls);$i++)
//create 10 connections unless we have reached end of file
{
$url=fgets($urls); //get next url from file
$curl_array[$i]=curl_init($url);
curl_multi_add_handle($curl,$curl_array[$i]);
}
$running=NULL;
do
{
curl_multi_exec($curl,$running);
}while($running>0);
for($i=0;$i<$CONNECTIONS;$i++)
{
$response=curl_multi_getcontent($curl_array[$i]);
curl_multi_remove_handle($curl,$curl_array[$i]);
curl_close(($curl_array[$i]));
}
curl_multi_close($curl);
}
可以看到:获取到每个单句柄的内容后,我从多句柄中取出句柄,关闭单句柄,然后在for循环后关闭多句柄。这种做法是正确的还是我过度关闭了把手?
谢谢