2011-03-27 60 views
0
$fp   = stream_socket_client("tcp://chat.facebook.com:5222", $errno, $errstr, 20); 

fwrite($fp, '<stream:stream to="chat.facebook.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0" />' . PHP_EOL); 

$temp1  = fgets($fp); 

fwrite($fp, '<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM"></auth>'); 

$temp2  = fgets($fp); 

fclose($fp); 

die(var_dump($temp1, $temp2)); 

是什麼導致$ temp2 false的結果?PHP stream_socket_client和facebook chat

string(365) "<?xml version="1.0"?><stream:stream id="247B12CF" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features></stream:stream>" 
bool(false) 

回答

0

的問題是,你的stream:stream線應該只是一個開始標記,而不是一個完整的元素。刪除/作爲第一個fwrite調用中的倒數第二個字符。當您發送完整的根元素而不是開始標記時,服務器將與您斷開連接。