• 23-09-2021, 23:22:27
    #1
    Arkadaşlar kodu bu şekilde yazınca ilk sayfadaki veriyi çekebiliyorum ancak,

    "http://site.com/content.php?page=1"
    "http://site.com/content.php?page=2"

    şeklinde sayfalar devam ediyor çok fazla sayfa olduğu için tek seferde yapmasını bilmiyorum açıkçası ben bunu nasıl tek sayfaya çekebilirim? Yardımcı olabilecek var mıdır?

    $ch=curl_init();
    
    curl_setopt_array($ch,
           [
                  CURLOPT_URL => 'http://site.com/content.php?page=1',
                  CURLOPT_SSL_VERIFYPEER => false,
                  CURLOPT_RETURNTRANSFER => 1
           ]);
    
           $veri=curl_exec($ch);
           curl_close($ch);
  • 23-09-2021, 23:23:48
    #2
    do while ile döngüye al
  • 23-09-2021, 23:44:43
    #3
    Merhaba, verileri çekebildiğinize göre sayfa sayısınıda çekebilecek yada total sayfa sayısını hesaplayabileceğinizi düşünerek, for döngüsü ile bir örnek yaptım inceleyebilirsiniz

    // curl işleminizi yapan sayfaCek Adında fonksiyon oluşturduk
    function sayfaCek($sayfaSayisi) { 
    $ch=curl_init();
    curl_setopt_array($ch,
           [
                  CURLOPT_URL => 'http://site.com/content.php?page='.$sayfaSayisi,
                  CURLOPT_SSL_VERIFYPEER => false,
                  CURLOPT_RETURNTRANSFER => 1
           ]);
     
    $veri=curl_exec($ch);
    curl_close($ch);
           
           return $veri;
           
    }
    
    
    $toplamSayfaSayisi = 15;
    
    
    for($sayfa=0;$sayfa<=$toplamSayfaSayisi;$sayfa++) {
        
    echo sayfaCek($sayfa);    // sayfaCek fonksiyonu ile sayfayı çekip echo ile ekrana bastım.
        
    }
  • 24-09-2021, 00:04:18
    #4
    Polat adlı üyeden alıntı: mesajı görüntüle
    do while ile döngüye al
    Çok teşekkürler. Açıkçası uğraştım ama bir noktada takılmıştım.

    Scorpion2763 adlı üyeden alıntı: mesajı görüntüle
    Merhaba, verileri çekebildiğinize göre sayfa sayısınıda çekebilecek yada total sayfa sayısını hesaplayabileceğinizi düşünerek, for döngüsü ile bir örnek yaptım inceleyebilirsiniz

    // curl işleminizi yapan sayfaCek Adında fonksiyon oluşturduk
    function sayfaCek($sayfaSayisi) {
    $ch=curl_init();
    curl_setopt_array($ch,
           [
                  CURLOPT_URL => 'http://site.com/content.php?page='.$sayfaSayisi,
                  CURLOPT_SSL_VERIFYPEER => false,
                  CURLOPT_RETURNTRANSFER => 1
           ]);
     
    $veri=curl_exec($ch);
    curl_close($ch);
          
           return $veri;
          
    }
    
    
    $toplamSayfaSayisi = 15;
    
    
    for($sayfa=0;$sayfa<=$toplamSayfaSayisi;$sayfa++) {
        
    echo sayfaCek($sayfa);    // sayfaCek fonksiyonu ile sayfayı çekip echo ile ekrana bastım.
        
    }
    Çok teşekkür ederim. Benim için çok faydalı oldu hem konuyu çözmüş oldum, hemde yeni bir şey öğrenmiş oldum.
  • 24-09-2021, 09:40:06
    #5
    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;
    }
  • 24-09-2021, 11:55:46
    #6
    yahyaaydin adlı üyeden alıntı: mesajı görüntüle
    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.
  • 24-09-2021, 12:12:34
    #7
    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);
    }
    $toplamSayfaSayisi=50;
    
    $urlArray=Array();
    
    for($sayfa=0;$sayfa<=$toplamSayfaSayisi;$sayfa++) {
    $url='http://site.com/content.php?page='.$sayfa;
    
    array.push($urlArray,$url);
    }
    
    
    fetchAndProcessUrls($urlArray, function($data) { 
        echo $data;
    }
    şeklinde url dizisi üretebilirsiniz.
  • 24-09-2021, 12:56:46
    #8
    Çok teşekkür ederim deneyeceğim.