• 14-04-2017, 14:41:07
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    merhaba arkadaşlar Burdaki soruyu tam ifade edemedim galiba

    örnek bir kod yazdım mantık şu

    aşağıdaki gibi model id si değişen 100 adet link varsayalım bunlara header bilgisi göndererek curl ile bağlanmam lazım

    bunları döngüye sokup her döngüde curl isteği yapıp herseferinde sayfa içeriğini kontrol edince 2-3 dk gibi zamanda verileri ekrana yazabiliyor

    yani link Ford demiş ama linkin içeriğinde ford bilgileri gibi birşey oluyor.

    bu curl fonksiyonunu dışarda bir kez çalıştırıp tüm linkleri parse etme şansım varmı?

    http://www.site.com/model/664857
    http://www.site.com/model/256896
    http://www.site.com/model/895643


    aşağıdaki kodlar örnek amaçlı soruyu net anlayabilmeniz için hazırladım

    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    	</head>
    	<body>
    		<?php
    			ini_set("max_execution_time",9999);
    			error_reporting(E_ALL ^ E_NOTICE);
    			function Baglan($url){
    				$ch = curl_init();
    				curl_setopt($ch, CURLOPT_URL, $url);
    				curl_setopt($ch, CURLOPT_ENCODING , "gzip");
    				curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    				curl_setopt($ch, CURLOPT_POST, 1);
    				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    				$cikti = curl_exec ($ch);
    				curl_close ($ch);
    				return str_replace(array("\n","\t","\r"), null, $cikti);
    				}
    
    //link içeren bir araç linklerimiz var 100 lerce olabilir
    $araclar = '<a href="http://www.site.com/model/664857">Ford</a>,<a href="http://www.site.com/model/77458">Mercedes</a>';
    
    //dinamik değişen kısmı rakamsal olan kısım yani pregmatch ile alalım
    $linkbul = "#<a href=\"http://www.site.com/model/(.*?)\">.*?</a>#";
    preg_match_all($linkbul,$araclar,$linkler);
    
    			for($i=0;$i<2;$i++){
    
    				//döngü yardımı ile linklere ulaştık
    				$hlink = "http://www.site.com/model/{$linkler[1][$i]}";
    
    				//BURDA curl fonksiyonu ile her linke ulaşıp, herlink içerisinde bulunan model marka bilgilerini çekebilmem lazım
    				//ancak curl fonksiyonu döngü içinde 10 larca sayfa olunca çok zaman kaybı yapıyor ve ekrana çok geç çıktı vermesine sebep oluyor
    				$curlB = Baglan($hlink);
    
    				//her link içeriğinde span arasında modellerinin yazdığını varsayalım
    				$modeller = "#<span>(.*?)</span>#";
    
    				preg_match_all($modeller,$curlB,$modeli);
    
    				//modelllerine ulaşıp yazdırdığımızı varsayalım
    				echo $modeli[1][0];
    
    			}
    
    	?>
    	</body>
    </html>
  • 14-04-2017, 17:16:41
    #2
    @Konya; curl_multi ile başlayan php fonksiyonlarını inceleyebilirsiniz. Örnek: http://us.php.net/manual/en/function...multi-exec.php
  • 15-04-2017, 12:41:37
    #3
    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    @Konya; curl_multi ile başlayan php fonksiyonlarını inceleyebilirsiniz. Örnek: http://us.php.net/manual/en/function...multi-exec.php
    @yasarkemaldag;

    hocam inceledim biraz aşağıdaki kod yapısında birden fazla linke bağlanıyor fakat bu şekilde de aynı şekilde ağır açılıyor böylesi bir yapı neyi hızlandırıyor anlamış değilim

    bende linki for döngüsünde curl fonksiyonundan geçirip yaptığımda hemen hemen hız aynı

    yani en alttaki kod sıradan curl ile for döngüsü kullandım işemin sonuçlanması 2dk sürüyor

    curl_multi_init ilede 2dk sürüyor?

    sonuçta for döngüsündede her linki açıyor curl_multi_init ilede açıyor ve zaman kaybı oluyor

    hani dedim acaba json tarzı hafif kod yapısına çeviren bir yapı varmıdır diye düşündüm

    http://www.sahadan.com/Match/Default.aspx?id=2772988 böyle bir linkin 200 defa yazdığını düşün
    function coklu_istek($veri)
    {
    
        $curlle = array();
    
        $sonuc = array();
    
    
        $yer_tutucu = curl_multi_init();
    
        foreach ($veri as $id => $d) {
    
            $curlle[$id] = curl_init();
            $url = is_array($d) ? $d['url'] : $d;
    
            curl_setopt($curlle[$id], CURLOPT_URL, $url);
            curl_setopt($curlle[$id], CURLOPT_HEADER, 0);
            curl_setopt($curlle[$id], CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curlle[$id], CURLOPT_USERAGENT,
                "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4");
            curl_setopt($curlle[$id], CURLOPT_ENCODING, "");
            curl_setopt($curlle[$id], CURLOPT_AUTOREFERER, 1);
            curl_setopt($curlle[$id], CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($curlle[$id], CURLOPT_TIMEOUT, 10);
            curl_setopt($curlle[$id], CURLOPT_MAXREDIRS, 2);
    
    
            curl_multi_add_handle($yer_tutucu, $curlle[$id]);
        }
    
        $aktif= null;
        do {
            curl_multi_exec($yer_tutucu, $aktif);
        } while ($aktif> 0);
    
        foreach ($curlle as $id => $c) {
            $sonuc[$id] = curl_multi_getcontent($c);
            curl_multi_remove_handle($yer_tutucu, $c);
        }
    
        curl_multi_close($yer_tutucu);
    
        return $sonuc;
    }
    
    $urller = array('http://www.asitesi.com',http://www.bsitesi.com',http://www.csitesi.com');
    
    $gelen_veri=coklu_istek($urller);

    buda benim for döngüsünde kullandığım yapı Baglan fonksiyonu normal curl fonksiyonum

    aşağıdaki kod ile http://www.sahadan.com/Match/Default.aspx?id={$son[1][0] linki her döngüde curl fonksiyonu işlem yapıp yazdırabiliyor tüm linkleri



    			for($i=0;$i< count($cikti[0]);$i++){
    					preg_match_all($bak,$cikti[0][$i],$son);
    						$hlink = "http://www.sahadan.com/Match/Default.aspx?id={$son[1][0]}";
    						$curlB = Baglan($hlink);
    						//$hkara = "#<a href=\"(.*?)\" target=\"_blank\"><b>(.*?)</b></a>#";
    						$hkara = "#<a href=\"http://www.mackolik.com/Hakem/.*?/.*?\" target=\"_blank\"><b>(.*?)</b></a>#";
    						preg_match_all($hkara,$curlB,$hakemler);
    }
    
    			?>