Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XMPPHP GTalk状态_Php_Google Talk_Xmpphp - Fatal编程技术网

XMPPHP GTalk状态

XMPPHP GTalk状态,php,google-talk,xmpphp,Php,Google Talk,Xmpphp,我正在尝试使用获取联机状态,但似乎无法从$conn获取任何具有我的状态的内容。以下是我的代码片段: require_once('XMPPHP/XMPP.php'); $conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO); $conn->

我正在尝试使用获取联机状态,但似乎无法从
$conn
获取任何具有我的状态的内容。以下是我的代码片段:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO);

$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
var_dump($conn); // this gives me a long output but nothing about status. ex: http://pastebin.com/yfs1V5Jb
我还尝试了
get花名册()


有什么建议我可以让它工作吗?谢谢。

您应该可以通过传递自己的jid请求自己的出席(username@gmail.com)获取状态()

例如:

$status = $conn->roster->getPresence($jid);
var_dump($status);    // Make sure you are retrieving a populated presence array
echo $status['show']; // available,unavailable,dnd
echo $status['status']; //status message

很久以前,我遇到了一个问题,这个库没有填充花名册记录。如果您遇到此问题,您应该应用此处详述的修补程序:

我在过去两天一直在努力解决此问题,最后找到了一个解决方法。我在这里记录它,因为这是我在搜索答案时最常出现的堆栈溢出问题

$conn->presence()方法不仅将您的状态信息发送到服务器;它还从服务器收集每个联系人的状态信息。基本问题是,当您发送$conn->presence()命令时,必须给脚本时间从服务器接收和处理此信息。示例脚本都使用$conn->processUntil('presence')来实现这一点,但出于某种原因,我没有暂停足够长的时间来获取所有花名册信息

为了解决这个问题,我最终只使用了$conn->processTime(2),强迫事情等待2秒钟再继续。这对我来说已经足够好了,但显然是一个黑客行为。因此,以您的代码为例:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', '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
为了更具体地回答您的问题,您可以使用以下代码代替“现在查看结果”下的代码:

这将显示您提供的jid的联机状态

注意,在这个示例中,我还更改了构造函数以显示尽可能详细的日志。这是帮助我度过难关的关键

一个更好的解决方案显然是在框架中添加$conn->processUntil(“花名册”)命令,或者类似的东西。但由于该框架已经5年没有更新过,所以不太可能发生这种情况


希望这能帮别人省下我在解决这个问题上浪费的时间。干杯。

我已经有一段时间没有集成到XMPP中了。你能提高日志记录级别并向我们展示谷歌的原始响应吗?你是怎么说状态的?状态信息或状态离开/在线等?如果您需要状态消息,则$conn->presence($status='Controller available');是你的身份,为什么不呢?你的花名册是空的吗?有输出吗?错误?没有反馈。。我帮不了你。你是对的,我应该在我的评论中更具描述性。没有错误,只是返回了“NULL”。你有工作测试页面吗?很遗憾,由于保密协议,我不能透露我的工作页面。这可能是由于我上面提到的错误。您无法查询是否存在不在您的花名册中的用户。要测试您是否是此错误的受害者,您会发现$conn->Get花名册()没有填充花名册数组,但它返回正确的XML响应(打开调试,您应该看到“获取即时通讯器状态(联机、脱机)”支持的服务有AIM、Facebook*、GTalk、ICQ、Skype和YAHOO:Hi我添加了类似$conn->processUntil('session_start');$conn->presence();$my_jid='test的内容-adipso03@xxx.211.99.162“;//把你的jid放在这里$status=$conn->花名册->getPresence($my_jid);echo$status['show'];似乎对我不起作用。我无法获取用户的状态。它显示为空白!JayshahaAgile,您是否使用最详细的日志打开了连接?日志应向您指出问题所在。如果您需要更多帮助,请开始新问题并向我发送消息。
$my_jid = 'user@domain.tld'; // put your jid here
$status = $conn->roster->getPresence($my_jid);
echo $status['show'];