将消息发送到 XMPP 服务器的 php 函数不提供日志并且不起作用

Posted

技术标签:

【中文标题】将消息发送到 XMPP 服务器的 php 函数不提供日志并且不起作用【英文标题】:php function that sends message to XMPP server give no log and doesn't work 【发布时间】:2015-02-28 14:25:01 【问题描述】:

我正在开发一个网页,用户可以在其中输入表单中的文本并单击提交。从那里它验证输入并将其发送到使用 JAXL 3.0 库将消息发送到我的 XMPP 服务器的 php 函数。

我的问题是,当我调用 JAXL 函数时,什么都没有发生。就像它无法完成函数一样,因为下一个函数永远不会得到它的调用。如果我交换其他函数的顺序,则会调用它,但它仍然没有完成 sendmessage() 函数。

我在 php 中生疏/新手,我无法让 JAXL 提供日志或任何东西来调试我的问题所在。

如果有人知道如何正确调试这个 php/JAXL 函数,那将是一个很大的帮助。

我在网上搜索并查看了 JAXL 的示例,但找不到我的问题:/

编辑:尝试使用 ECHO 进行一些调试。如果 ECHO 发布在我的 Create 客户端下方,我将无法发出 ECHO。如果我在上面 ECHO 就可以了。

我的发送消息功能:

function sendping()
  
    //get the form elements and store them in variables
    $ping_text=$_POST["pingtext"];

    // Config Details
    $host = 'example.com';
    $user = 'host';
    $pass = 'password';

    // Create Client
    $client = new JAXL(array(
      'log_path' => '/var/log/jaxl.log',
      'jid' => $user.'@'.$host,
      'pass' => $pass,
      'log_level' => JAXL_INFO,
      'auth_type' => 'PLAIN'
    ));

    // Add Callbacks
      $client->add_cb('on_auth_success', function() use ($host, $client, $ping_text) 
      $client->send_chat_msg($host.'/announce/online', $ping_text);
      $client->send_end_stream();

    );
    $client->add_cb('on_auth_failure', function($reason) use ($client)
    
      $client->send_end_stream();
      _info("got on_auth_failure cb with reason: $reason");
    );
    $client->add_cb('on_disconnect', function() use ($client)
    
      _info("got on_disconnect cb");
    );
    // Startup Client
    $client->start();

我的坑.php页面:

<?php
/*
Template Name: Stahp Ping
*/

require 'jaxl.php';

get_header(); ?>

<div id="hidden_div" style="display:none; margin-left:auto; margin-right:auto; margin-top:20px;
text-align:center;">
<p>Ping has been sent </p>
</div>

<div style="width:850px !important;
margin-left:auto;
margin-right:auto;
margin-top:20px;
text-align:center;" id="pingform">


<form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']);?>" method="post" name="stahpbox">
<textarea name="pingtext" rows="8" cols="60"></textarea>
<input type="submit" value="Send Ping" />
</form>

</div>

<script type="text/javascript">
 function showHide() 
   var div = document.getElementById("hidden_div");
   var pingdiv = document.getElementById("pingform");
   if (div.style.display == 'none') 
     div.style.display = '';
     pingdiv.style.display='none';
   
   else 
     div.style.display = 'none';
     pingdiv.style.display = '';
   
 
</script>

<?php
function sendping()
  
    //get the form elements and store them in variables
    $ping_text=$_POST["pingtext"];

    // Config Details
    $host = 'example.com';
    $user = 'user';
    $pass = 'password';

    // Create Client
    $client = new JAXL(array(
      'log_path' => '/var/log/jaxl.log',
      'jid' => $user.'@'.$host,
      'pass' => $pass,
      'log_level' => JAXL_INFO,
      'auth_type' => 'PLAIN'
    ));

    // Add Callbacks
      $client->add_cb('on_auth_success', function() use ($host, $client, $ping_text) 
      $client->send_chat_msg($host.'/announce/online', $ping_text);
      $client->send_end_stream();

    );
    $client->add_cb('on_auth_failure', function($reason) use ($client)
    
      $client->send_end_stream();
      _info("got on_auth_failure cb with reason: $reason");
    );
    $client->add_cb('on_disconnect', function() use ($client)
    
      _info("got on_disconnect cb");
    );
    // Startup Client
    $client->start();
  

//Validation and redirection to send to jabber
// Initialize variables and set to empty strings
$pingtextERR="";
// Validate input and sanitize
if ($_SERVER['REQUEST_METHOD']== "POST") 
  $valid = true; //Your indicator for your condition, actually it depends on what you need. I am just used to this method.

  if (empty($_POST["pingtext"])) 
      $pingtextERR = "Text is required";
      $valid = false; //false
      echo "<script type='text/javascript'>alert('$pingtextERR');</script>";
  
 //if valid then redirect
  if($valid)
  echo "<script> showHide(); </script>";
  sendping();
  


?>

【问题讨论】:

【参考方案1】:

显然问题在于 PLAIN auth.不适用于 JAXL,因此将其更改为另一个 AUTH,它工作正常。

【讨论】:

以上是关于将消息发送到 XMPP 服务器的 php 函数不提供日志并且不起作用的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 和 PHP 流式传输

如何保证 XMPP 消息发送到 openfire 服务器?

如何在php中使用xmpp发送和接收消息

JACK XMPP 守护进程发送和接收消息

XMPP 服务器不发送任何回复消息和消息不发送

如何在 iphone 中使用 Xmpp 将消息发送到特定的电子邮件 ID