Belirtilen yöntem sunucunuzu aşırı yorar ve işlemleri sıraya koyarak daha uzun sürede sonuç verir. Bunun yerine curl_multi_init kullanmalısınız.
function fetchAndProcessUrls(array $urls, callable $f) {
$multi = curl_multi_init();
$reqs = [];
foreach ($urls as $url) {
$req = curl_init();
curl_setopt($req, CURLOPT_URL, $url);
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multi, $req);
$reqs[] = $req;
}
// While we're still active, execute curl
$active = null;
// Execute the handles
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($multi) != -1) {
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
// Close the handles
foreach ($reqs as $req) {
$f(curl_multi_getcontent($req));
curl_multi_remove_handle($multi, $req);
}
curl_multi_close($multi);
}Kullanımı ise;
fetchAndProcessUrls($urlArray, function($data) {
echo $data;
}
Teşekkürler hocam. Peki bu işlemde
$urlArray dizinini oluştururken linkleri tek tek girmek mi gerekiyor yoksa onuda döngüye alsak aynı işlem olmayacak mı?
Şu yüzden soruyorum. Alacağım sayfalar 500 sayfa civarında döngüye sokmadan çok zor görünüyor. Bilmediğim atladığım bi nokta varsa cahilliğime verin.