скручиваться через уже открытое гнездо

Интересно, есть ли способ использовать curl trhough уже открытый сокет, что-то вроде, адаптируя это:

 <?php $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> 

использовать curl_exec() вместо fgets($fp, 128)

(или любой другой способ использовать curl() над одним и тем же потоком все время, моя цель – прочитать поток twitter api)

спасибо

Это может сработать для вас, поскольку вы имеете дело с Twitter Stream API

 set_time_limit(0); $ch = curl_init(); echo "<pre>"; curl_setopt($ch, CURLOPT_URL, "https://sitestream.twitter.com/2b/site.json"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'cgets'); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_USERPWD, 'user:password'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 1000000); curl_exec($ch); function cgets($ch, $string) { $length = strlen($string); printf("Received %d byte\n", $length); flush(); return $length; } 

Невозможно заставить cURL использовать существующий сокет в PHP. В то время как cURL пулы и повторное использование соединений внутри, он не может быть принудительно использовать один и тот же один раз или никогда не закрывать соединение, которое он открыл.

Вы можете проверить Phirehose (который является интерфейсом PHP для потоковых API), или если это не достаточно хорошо, сделайте некоторые покупки в списке Twitter-библиотек – скорее всего, кто-то уже решил вашу проблему на PHP и упаковал.

Тем не менее, использование потока API звучит странно с PHP. Это на веб-сервере или автономном многопользовательском скрипте?