• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Curl Multithread PHP

6
  • Publicat de Andrei Avădănei
  • în PHP · Tehnic
  • — 3 oct., 2010 at 11:55 am

Cu totii stim cat de sweet este sa folosim curl pentru diverse aplicatii web. Curl din PHP este folosit in general la verificari, la indexari, la crawlere si orice alte chestii ce necesita simularea unui client care vrea sursa unei pagini web. Totusi exista o mica problema in aceasta situatie.

Pentru a primi continutul a 10 pagini ce se incarca in 0.5 secunde fiecare (sa spunem) vom avea nevoie de 5 secunde pentru a le descarca. Nu e prea eficient, nu? Pentru asta s-a inventat curl multithread, niste functii oferite de PHP Curl ce ofera posibilitatea de a descarca paginile in paralel, timpul total de descarcare al acestora fiind doar timpul maxim al celei mai lente pagini.

Fanache Remus a publicat un articol despre acest subiect pe care vreau sa-l remarc pentru ca e o chestie mai nestiuta de multi.

< ?php
//functia curl de procesare in paralel 
function curl($nodes, $referer) {
  // atentie la functia asta daca aveti safe mode on nu functioneaza
  set_time_limit(0);
  if(!$referer)
    $referer = $nodes[0];

  $node_count = count($nodes);

  $curl_arr = array();
  $master = curl_multi_init(); //initiem multi curl

  for($i = 0; $i < $node_count; $i++) { //pentru fiecare nod (link)
    //cream linkul
    $curl_arr[$i] = curl_init($nodes[$i]); 
    curl_setopt($curl_arr[$i],CURLOPT_FRESH_CONNECT,true);
    curl_setopt($curl_arr[$i],CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curl_arr[$i],CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl_arr[$i],CURLOPT_REFERER,$referer);
    curl_setopt($curl_arr[$i],CURLOPT_TIMEOUT,30);
    //il adaugam la masterul multi-curl
    curl_multi_add_handle($master, $curl_arr[$i]);
  }
  $finalresult = array();
  $returnedOrder = array();
  do{
    //extragem contentul
    curl_multi_exec($master, $running);
    $info = curl_multi_info_read($master);
    if($info['handle']) {
      $finalresult[] = curl_multi_getcontent($info['handle']);
      $returnedOrder[] = array_search($info['handle'], $curl_arr, true);
      curl_multi_remove_handle($master, $info['handle']);
      curl_close($curl_arr[end($returnedOrder)]);
    }

  $previousActive = $running;
  }   
  while($running > 0);
  //returnam
  return array_combine($returnedOrder, $finalresult);
  curl_multi_close($master);
}

// specificati adresele paginilor in array
$urls = array( 'link1', 'link2' );
curl($urls, null);
?>

Etichete: curlcurl multithreadPHPtutorial php

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior Securitatea online este ignorata – Reuters.com spart
  • Articolul următor Fandroid – telefoanele noastre sunt mai inteligente decat ale lor

6 Comentarii

  1. Gabi spune:
    martie 21, 2011 la 7:46 pm

    Foarte bun acest articol.

  2. Ohana spune:
    iulie 5, 2011 la 5:43 pm

    util articolul, pacat ca ai un broken link

  3. Andrei Avădănei spune:
    iulie 5, 2011 la 6:35 pm

    Am actualizat, acum merge. 🙂

  4. crs12decoder spune:
    aprilie 14, 2012 la 9:50 am

    Da… ce sa zic.. Genial…
    Si limita?

    Daca am 20 de milioane de instante de exemplu? Dupa tine.. crezi ca e o idee buna sa le lanseze pe toate in paralel?

    Trebuie sa existe si thread limit 🙂

    • Andrei Avădănei spune:
      aprilie 14, 2012 la 10:58 am

      Spune-mi unde ai auzit de inexistenta unei limite la paralelizare. Mi se pare o chestie de bun simt si clar de inteles ca poti paraleliza atat de multe instante cat te tin motoarele.

  5. crs12decoder spune:
    aprilie 14, 2012 la 7:19 pm

    Da. Si asta trebuie precizat cel putin. Si eventual oferita o alternativa de cod care contine deja posibilitatea limitarii. Nu e tocmai ok sa astepti ca toti userii sa ruleze 1000 de instante paralele ca sa li se crash-uiasca si dupa aceea sa incerce sa gaseasca singuri o metoda de remediere a problemei. Fiecare in parte, acelasi remediu.


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • martie 2021
    L Ma Mi J V S D
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • PHP
  • Curl Multithread PHP
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons