Skip to content

December 19, 2010

PHP’de paralel işlemler yapmak

Php tamamiyle web tabanli bir dil oldugu icin ne yazikki Java’da oldugu gibi thread mantigi yok, bir islemi iki parcaya bolup asenkron bir sekilde kolayca yapamiyorsunuz. Onun yerine PHP’nin curl kutuphanesini kullanarak bir yontem gelistirilmis ve bu sayede asenkron bir sekilde iki farkli yere istekte bulunup ayni anda iki farkli islem gerceklestirebiliyorsunuz. Bu da su demek oluyor: eger fonksyonunuz icerisinde paralellestirmeyi dusundugunuz bir islem varsa oncelikle onu tamamiyle ayri iki fonksyon haline getirmeniz ve ikiye ayirdiktan sonra j1.php, j2.php seklinde iki farkli dosyaya koymaniz gerekmektedir.

j1.php ve j2.php’deki datalari ana php sayfamda kullanmak icinse, iclerinde gondermek istedigim datayi echo yaparak gonderiyorum.

curl kismini da su sekilde ayarladim:

if (isset($argv[1])) {
$max_requests = $argv[1];
} else {
$max_requests = 10;
}
$curl_options = array(
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_TIMEOUT => 5, // 5 sn icinde yanit donmezse bekleme
CURLOPT_USERAGENT, 'Parallel Curl test script',
);

j1.php’de echo edilen degeri almak icin sunu yaptim:
$parallel_curl = new ParallelCurl($max_requests, $curl_options);

$arr_user_id = [1,2,3,4,5];
$ilgi_alanlari_objesi = new Object();
$ilgi_alanlari_objesi.ilgi_alani_ekle("Kitap");
$ilgi_alanlari_objesi.ilgi_alani_ekle("Bilgisayar");
$json_arr_user_id = json_encode($arr_user_id);
$json_arr_user_id = str_replace("\"","",$arr_user_id);//" isareti sorun cikarabiliyor
$search_url = "j1.php";
$parallel_curl->startRequest($search_url, array($this, 'j1_bilgilerini_doldur'), array(), "arr_hotel_id=".$json_arr_hotel_id."&date=19.12.2010&ilgi_alanlari_objesi=".$json_ilgi_alanlari_objesi);

//j1_bilgilerini_doldur bir fonksyondur ve islem bittiginde hangi fonksyonu cagiracagini soyler

function j1_bilgilerini_doldur($content, $url, $ch, $search) {
echo $content;
}

j1.php dosyasi icin:

include_once "User.php";
$user = new User();
$arr_user_id = json_decode($_POST["arr_user_id"]);
$date = $_POST["date"];
$ilgi_alanlari_objesi = unserialize(str_replace("\\","",$_POST["ilgi_alanlari_objesi"]));

$sonuc = $user->get_user_details($arr_user_id, $date, $ilgi_alanlari_objesi);

$result = json_encode($sonuc);
echo $result;

http://www.codediesel.com/php/parallel-curl-execution/ adresinde bir ornek mevcuttur.

Read more from Bilgisayar

Leave a Reply