PHP Doku:: Alle Sockets abfragen, die mit der cURL Erweiterung assoziiert sind und ausgewählt werden können - function.curl-multi-select.html

Verlauf / Chronik / History: (50) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzSonstige DiensteCURLcURL Funktionencurl_multi_select

Ein Service von Reinhard Neidl - Webprogrammierung.

cURL Funktionen

<<curl_multi_remove_handle

curl_setopt_array>>

curl_multi_select

(PHP 5)

curl_multi_select Alle Sockets abfragen, die mit der cURL Erweiterung assoziiert sind und ausgewählt werden können

Beschreibung

int curl_multi_select ( resource $mh [, float $timeout = 1.0 ] )

Blockiert bis Aktivität auf einer der Verbindungen stattfindet.

Parameter-Liste

mh

Ein von curl_multi_init() zurückgegebenes cURL-Multihandle.

timeout

Zeit in Sekunden die auf eine Antwort gewartet wird

Rückgabewerte

Gibt bei erfolgreicher Ausführung die Anzahl der Bezeichner in der Bezeichner-Sammlung zurück. Tritt ein Fehler oder Timeout auf gibt die Funktion -1 zurück.

Siehe auch


2 BenutzerBeiträge:
- Beiträge aktualisieren...
Anonymous
24.07.2010 17:33
Since the docs are still lacking, here's an example of how to use the function. The following code will keep checking all active threads until one of them returns the HTTP 200 Ok status code, or simply end. On success, it will return the URL that worked.

<?php
$running
=null;
do {
   
curl_multi_exec($mh,$running);
   
$ready=curl_multi_select($mh); // this will pause the loop
   
if($ready>0){
        while(
$info=curl_multi_info_read($mh)){
           
$status=curl_getinfo($info['handle'],CURLINFO_HTTP_CODE);
            if(
$status==200){
               
$successUrl=curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL);
                break
2;
            }
        }
    }
} while (
$running>0 && $ready!=-1);
?>

The question for the $ready variable is, if it will return the value before or after the timeout has occurred. From my tests it appears that it will return the value immediately, and only then pause the execution. That's because it's always zero the first time through the loop, even if the time limit is as high as 10sec. I've expected it to wait and only then return the value so that came unexpected to me.

As stated by someone else, it also doesn't seem to return the overall count of threads in the handle, but only that of the currently active ones.
public at grik dot net
10.08.2008 15:38
This function blocks the calling process until there is activity on any of the connections opened by the curl_multi interface, or until the timeout period has expired.
In other words, it waits for data to be received in the opened connections.

Internally it fetches socket pointers with "curl_multi_fdset()" and runs the "select()" C function.
It returns in 3 cases:
1. Activity is detected on any socket;
2. Timeout has ended (second parameter);
3. Process received any signal (#man kill).

The function returns an integer:
* In case of activity it returns a number, usually 1.
I suppose, it returns the number of connections with activity detected.
* If timeout expires it returns 0
* In case of error it returns -1

Thanks for attention, hope this helps.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)