Küçük bir sorunum var önerilerinizi alıp yol göstermenizi rica edecektim.
Multi Curl ile bir URL'ye bağlanıp veri çekiyorum, yaptığım multi curl fonksiyonunda şimdiye kadar sorun yaşamadım,
ama bu sefer veri çektiğim sunucuda mı sorun var yoksa benim fonksiyonda mı değişiklik yapmak gerekiyor bilemiyorum
Aynı sunucuda 2000 3000 url'ye istek atıp içeriğini çekiyorum (içerik Json formatında),
sorun şu ki bazen içerik olduğu halde sonuç boş dönüyor, içerik her url'de kesin olsa boş dönenleri tekrar gönderirim ancak bazı url'lerde normalde de içerik yok.
Boş sonuç dönderen url'ye bir tıklıyorum veri var. 2000 tane url'de var bazıları doğru dönüyor bazıları yanlış (boş) tabi doğru ve yanlış sonuç dönderen url ler her çalıştırmam da değişiyor.
Sunucuda biraz sıkıntılı sanırım, url'lere tıklıyorsun verinin gelmesi 3-4 sn sürüyor. Bununla alakası olabilir mi bilmiyorum.
Bu arada amatörüm, multi curl konusunda güzel Türkçe döküman bulamadığım için biraz ezbere bir multı curl fonksiyonu yazdım.
Yardımcı olur yol gösterirseniz çok mutlu olurum.
function multiCurl($arr)
{
$curl = array();
$again = array();
static $results = array();
// Coklu Curl Tanitisici
$mCurl = curl_multi_init();
// ************* Tekli Curl Taniticilari *************
foreach ($arr as $key => $url)
{
$curl[$key] = curl_init();
curl_setopt_array($curl[$key], array(
CURLOPT_URL => $url,
CURLOPT_CONNECTTIMEOUT => 0,
CURLOPT_TIMEOUT => 0,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HEADER => FALSE,
CURLOPT_REFERER => 'https://www.google.com.tr.',
CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
));
curl_multi_add_handle($mCurl, $curl[$key]);
}
// ************ Multi Curl Islemleri ************
$active = null;
do {
$status = curl_multi_exec($mCurl, $active);
if ($active) {
curl_multi_select($mCurl);
}
}
while ($active && $status == CURLM_OK);
// ****** Tekli Curl Kapat ve Sonuclari Al *******
foreach ($curl as $key => $c)
{
$httpCode = curl_getinfo($curl[$key], CURLINFO_HTTP_CODE);
// Baglanti Hatası veya Curl Hatasi varsa Again Aktar
if ($httpCode != 200 || curl_errno($curl[$key]))
{
$again[$key] = $keyProducts[$key];
}
else
{
// Sonuclari Diziye Aktar
$results[$key] = curl_multi_getcontent($curl[$key]);
}
curl_multi_remove_handle($mCurl, $curl[$key]);
curl_close($curl[$key]);
}
curl_multi_close($mCurl);
if (count($again) != 0) multiCurl($again);
return $results;
}