私は過去2日間この問題に取り組んでおり、最終的には仕事を開始するためのハックを見つけました。私はここでそれを文書化しています。なぜなら、これは答えを探している間に私にとって最も頻繁に現れたスタックオーバーフローの問題だったからです。
$ conn-> presence()メソッドは、あなたのプレゼンス情報をサーバーに送信するだけでなく、サーバーからのすべての連絡先のプレゼンス情報も収集します。基本的な問題は、$ conn-> presence()コマンドを送信するときに、スクリプトがサーバからこの情報を受信して処理する時間を与える必要があることです。サンプルのスクリプトはすべてこれを行うために$ conn-> processUntil( 'presence')を使いますが、何らかの理由ですべてのロスタ情報を取得するのに十分な時間を停止しませんでした。
これを回避するために、ついに$ conn-> processTime(2)を使用しました。処理を続ける前に2秒待たなければなりませんでした。これは私の目的にとっては十分ですが、明らかにハックです。だから、例として、あなたのコードを使用して:
require_once('XMPPHP/XMPP.php');
$conn = new XMPPHP_XMPP('talk.google.com', 5222, '[email protected]', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE);
$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
$conn->processTime(2);
// now see the results
$roster = $conn->roster->getRoster();
print_r($roster); // you should now see roster array with presence info for each contact
より具体的に、あなたは「今すぐ結果を参照してください」の下で、コードの代わりに次のように使用することができ、あなたの質問に答えるために:
表示されます
$my_jid = '[email protected]'; // put your jid here
$status = $conn->roster->getPresence($my_jid);
echo $status['show'];
あなたが提供するJidのオンラインステータス。
この例では、可能な限り最も詳細なログを表示するようコンストラクターを変更しました。これは私がこれを手助けする鍵でした。
もっと良い解決策は明らかに$ conn-> processUntil( 'roster')コマンドをフレームワークに追加することです。しかし、この枠組みは5年後に更新されていないので、それは起こりそうもない。
これによって、誰かが私がそれを解決しようとして失った時間を節約できますことを願っています。乾杯。
私はXMPPに統合して以来、しばらくしています。ロギングレベルを上げて、Googleからの生の応答を表示できますか? – Kevin
どのようにステータスを意味するのですか?ステータスメッセージまたはステータスAway/Onlineなど?ステータスメッセージが必要な場合は$ conn-> presence($ status = 'Controller available');あなたのステータスです。 – pregmatch