v2.5.2
Giriş yap

PHP, CURL ile başka bir siteden alınan verilerden sonra sayfanın yavaş yüklenme problemi nasıl giderilir?

mek
511 defa görüntülendi

CURL konusunda henüz çok yeniyim. Öğrenmeye, kendimi geliştirmeye çalışıyorum. Bir internet sitesinden belirli alanları çekiyorum ve neredeyse sayfanın yüklenmesi 5-6saniyeyi buluyor. Bunu nasıl düzeltebilirim?

Cevap yaz
Cevaplar (8)
munzevi
910 gün önce
function curl($url, $post=false)
{
    $dosya = './curl/'.md5(rand(0,999999)*rand(0,9999999)).'.txt';
    /*
	$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1);
	curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
	
	curl_setopt($ch, CURLOPT_POST, $post ? true : false);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post ? $post : false);
	curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
	$icerik = curl_exec($ch);
	curl_close($ch);
	*/
    file_put_contents($dosya, $icerik);
    $icerik = file_get_contents($dosya);
    $baslik = parcala_ve_al('<td class="table-player-name">', '</td>', $icerik);
    $puan = parcala_ve_al('<p class="score">', '</p>', $icerik);
    $sira = parcala_ve_al('<td>', '</td>', $icerik);
    $html = '<tr><td class="">#%1$s</td><td class=""><div class=""><div class=""><h6 class="">%2$s></h6></div></div></td><td class="">%3$s</td><td class="" width="200"><a href="#">%4$s Oyuncu Profili</a></td><td class="" width="200"><a href="#">%5$s Geçmiş Maçları</a></td></tr>';
    $i= 1;
    foreach ($baslik as $key => $value){
        $sonuc[] = sprintf(
            $html,
            $i,
            strip_tags($baslik[$key]),
            strip_tags($puan[$key]),
            strip_tags($baslik[$key]),
            strip_tags($baslik[$key])
        );
        $i++;
    }
    return implode('', $sonuc);
}

önceki kodlarında her fonksiyonda tekrar tekrar curl ile bağlanıyordun, bu da 4 kez bağlandığın için yavaşlatıyordu. şimdi tek bağlantıda işi çözebiliyoruz. senin kodlarını yorum satırı yaptım, ne eklediğimi daha rahat görebilirsin.

dosyanın nereye kaydedileceğini ayarla önce sonra çalıştırdın. farazi olarak ./curl diye bi klasör oluşturdum, kendine göre düzenle.

mek
910 gün önce

Sabırlı yardımınız için teşekkür ederim:) Sorun direkt çözüldü. Çok teşekkürler hocam.

mek
910 gün önce

Ahahahaha hocam çok iyi kusura bakmayın lütfen kafa allah bullak :D direkt olarak hedef internet sitesini yazmak istemedim Tayfun hocam için problem olmaması için.

function curl($url, $post=false)
{
	$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1);
	curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
	
	curl_setopt($ch, CURLOPT_POST, $post ? true : false);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post ? $post : false);
	curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
	$icerik = curl_exec($ch);
	curl_close($ch);
	return $icerik;
}

fonksiyon da bu şekilde.

munzevi
910 gün önce

mübarek, nazikçe basit bir şey istedim; kodu ekleyiver. "ekle" bile demedim emir kipine girer diye, hani burda curl bloğu? bende örneği tamamlanmış fonksiyonla vereyim.

$icerik = curl_onbellek('xxx.com');
mek
910 gün önce

Veriyi örnek https://xxx.com üzerinden alıyorum. Sayfa yaklaşık 300 saniyede bir kendini yeniliyor verileri güncel tutmak için.

Top 50 sayfasının verilerini alıyorum aslında. verileri 300 saniyede bir güncelleniyor listede kim daha çok puan alıyorsa o en üste çıkıyor.

Siteden verileri almak için kullandığım kod;

		$icerik = curl("https://xxx.com");
		$baslik = parcala_ve_al('<td class="table-player-name">', '</td>', $icerik);
		$puan = parcala_ve_al('<p class="score">', '</p>', $icerik);
		$sira = parcala_ve_al('<td>', '</td>', $icerik);

bu da sayfada listelediğim;

	<?php 
							$i= 1;
							foreach ($baslik as $key => $value){ ?>
								<tr>
									<td class="">#<?php echo $i; ?></td>
									<td class="">
										<div class="">
											<div class="">
												<h6 class=""><?php echo strip_tags($baslik[$key]) ?></h6>
											</div>
										</div>
									</td>
									<td class=""><?php echo strip_tags($puan[$key]) ?></td>
									<td class="" width="200"><a href="#"><?php echo strip_tags($baslik[$key]) ?> Oyuncu Profili</a></td>
									<td class="" width="200"><a href="#"><?php echo strip_tags($baslik[$key]) ?> Geçmiş Maçları</a></td>
								</tr>
								<?php $i++; } ?>
munzevi
910 gün önce

şimdi ne yazsam, daha çok yanıt vereceğim gibi hissediyorum. sen kodunu ekleyiver, kullandığın kod ile örnek vereyim. birde ne sıklıkla kontrol etmek istiyorsun siteyi. bir kere bağlandın, bugün aldığın verinin aynısı yarın işine yarar mı yoksa her bağlantıda anlık olarak siteyi kontrol mu etmen gerekiyor?

mek
910 gün önce

@munzevi hocam cevap için teşekkür ederim. bunu tam olarak nasıl yapabilirim? ufak bir örnek verme şansınız var mı?

munzevi
910 gün önce

curl yavaştır. farklı işlemler için tekrarlanan bağlantılar kurma, aynı sayfada birden fazla işlem gerçekleştirceksen, ilk bağlantıda gelen veriyi dosyaya yaz ve dosyadan okuyarak işlem yap.