Öncelikle merhabalar. Yazılım alanında kendimi geliştirmeye çalışıyorum. Bu nedenle soracağım sorular eğer yanlış ise lütfen kusura bakamyın.
Ben bir siteden belirli veriler alabilen basit bir curl yazdım. Yaptığım Curl çalışıyor fakat tek url'den tek sayfa verisi çektiriyor. Benim istediğim şey;
ornekurl.com/ornek
ornekurl.com/ornek2
ornekurl.com/ornek3
Şeklinde, aynı web sitesi içerisinden farklı url yapılarına sahip sayfaların içerisinden eş zamanlı veri çekmek. Çektireceğim içerik içerisinde tablo ve div yapıları aynı bu nedenle ekstra bir komut belirlemeyeceğim.
---NOT2---
https://www.php.net/manual/tr/functi...multi-init.php bu linke baktım fakat çok anlayamadım.
Basit bir işlem önerirseniz sevinirim.
---KODUM---
$sayfaurl = 'https://www.ornekLink.com/a-1'; // Sayfa URL $html = file_get_html($sayfaurl); // Url'e gönderiyorum
CURL ile çoklu URL'den veri çekme
8
●318
- 23-06-2022, 11:20:35Kendi kullandığım aşağıda ki örnek işinizi görebilir sanırım hocam
// Coklu cUrl Fonksiyon function __mcUrl($urls = []){ if( is_array($urls) && count($urls) > 0 ){ $mcurl = curl_multi_init(); $curl_opt = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 1, CURLOPT_FOLLOWLOCATION => 0, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_CONNECTTIMEOUT => 20, CURLOPT_TIMEOUT => 20, CURLOPT_ENCODING => '', CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => ['accept-language: en', 'cache-control: no-cache'], ); foreach ($urls as $key => $url) { $curl[$key] = curl_init(); curl_setopt_array($curl[$key], $curl_opt); curl_setopt($curl[$key], CURLOPT_URL, $url); curl_multi_add_handle($mcurl, $curl[$key]); } $mcurl_run = null; do{ curl_multi_exec($mcurl, $mcurl_run); }while ( $mcurl_run > 0 ); $items = []; foreach ($urls as $key => $url) { $url_error = curl_error($curl[$key]); $url_data = curl_multi_getcontent($curl[$key]); $items[$key] = (object)array( 'status' => $url_data && empty($url_error) ? true : false, 'key' => $key, 'url' => $url, 'error' => $url_error, 'data' => $url_error ? '' : $url_data, ); curl_multi_remove_handle($mcurl, $curl[$key]); } curl_multi_close($mcurl); return (object)$items; } return false; } // Kullanım $urls = ['https://google.com', 'https://twitter.com']; $urls_data = __mcUrl($urls); // Return data /* stdClass Object ( [0] => stdClass Object ( [status] => 1 [key] => 0 [url] => https://google.com [error] => [data] => '.....'sitedata.....' ) [1] => stdClass Object ( [status] => 1 [key] => 1 [url] => https://twitter.com [error] => [data] => '.....'sitedata.....' ) ) */ - 23-06-2022, 13:31:49Hocam öncelikle zaman ayırdığınız için çok teşekkürler.Misafir adlı üyeden alıntı: mesajı görüntüle
Mantık yürütmeye çalıştım ama yeni olduğum için kafamda çok oturtamadım. Rica etsem çalışan bir örnek yapabilir misiniz?
O örnek üzerinden ben kendim geliştirmeye çalışırım. - 23-06-2022, 13:32:49Hocam cevap için teşekkür ederim. Ama bu çok gelişmiş bir şeye benziyor. Çok anlayamadımmikropiks adlı üyeden alıntı: mesajı görüntüle
- 23-06-2022, 13:49:07arkadaş en basit mantığını paylaşmış sizinle, asenkron için bundan daha basiti yok varsa da ben bilmiyorum.iltu33 adlı üyeden alıntı: mesajı görüntüle
php fibers async http, react-php async http, swoole php async diye aratırsanız diğer yöntemleri görerek karar verebilirsiniz. - 23-06-2022, 15:58:20for'lu bir örnek sana hocamiltu33 adlı üyeden alıntı: mesajı görüntüle
function Curlz($gurl) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_URL, $gurl); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.8.1) Gecko/20061010 Firefox/2.0"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } $cek=Curlz("https://wordpress.org/news/feed/"); $hup = explode('<item>',$cek); for ($i=1;$i<count($hup);$i++) { preg_match('#<link>(.*?)</link>#si',$hup[$i], $url); $iurl = Curlz ($url[1]); preg_match('#<title>(.*?)</title> #si',$iurl, $yurl); echo $yurl[1]; } - 24-06-2022, 01:20:18verdiğiniz örnek senkron çalışır yani sırayla çalışır, arkadaş asenkron istiyor. verdiğiniz örnekten yola çıkarsak feed link de bulunan tüm urllere aynı anda eş zamanlı bağlantı açmak istiyor,
sizin verdiğinizde bağlantı ve işlem bittikten sonra sıradakine geçer.
Misafir adlı üyeden alıntı: mesajı görüntüle