Curl ile veri çekmek daha önce bu yazıda ele alınmıştı. Tek bir yerden veri çekmek için bu yöntem uygun olsa da eğer birden fazla yerden veri çekmek isityorsak uygulamamızın hızlı çalışması için curl_multi fonksiyonlarını kullanmamız gerek. Bu şekilde eğer bir veri çekmek 2 sn sürüyorsa ve biz 6 yerden veri çekiyorsak toplam süre 12 sn değil 2 sn olacaktır.

Örnek fonksiyon şöyle yazılabilir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function coklu_istek($veri)
{
$curlle = array();
$sonuc = array();
$yer_tutucu = curl_multi_init();
foreach ($veri as $id => $d) {
$curlle[$id] = curl_init();
$url = is_array($d) ? $d['url'] : $d;
curl_setopt($curlle[$id], CURLOPT_URL, $url);
curl_setopt($curlle[$id], CURLOPT_HEADER, 0);
curl_setopt($curlle[$id], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlle[$id], CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4");
curl_setopt($curlle[$id], CURLOPT_ENCODING, "");
curl_setopt($curlle[$id], CURLOPT_AUTOREFERER, 1);
curl_setopt($curlle[$id], CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlle[$id], CURLOPT_TIMEOUT, 10);
curl_setopt($curlle[$id], CURLOPT_MAXREDIRS, 2);
curl_multi_add_handle($yer_tutucu, $curlle[$id]);
}
$aktif= null;
do {
curl_multi_exec($yer_tutucu, $aktif);
} while ($aktif> 0);
foreach ($curlle as $id => $c) {
$sonuc[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($yer_tutucu, $c);
}
curl_multi_close($yer_tutucu);
return $sonuc;
}