PHP, CURL ile başka bir siteden alınan verilerden sonra sayfanın yavaş yüklenme problemi nasıl giderilir?
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?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
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.
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.
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++; } ?>
ş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?