Home  >  Article  >  Backend Development  >  PHP通过xmlrpc注册ejabberd用户

PHP通过xmlrpc注册ejabberd用户

WBOY
WBOYOriginal
2016-06-23 13:42:36913browse

正在研发一款社交软件,架构im使用了ejabberd作为xmpp服务器,于是遇到了如何通过php注册xmpp用户的问题。

解决方法有几个:

1.用xmpphp框架发送含

元数据的消息到服务器要求处理,这个可参考:


2.使用php的xmpp库jaxl,其demo代码中包含一个register_user的脚本,通过shell调用:

php example/register_user.php YOUR_DOMAIN

即可生成用户,缺点是性能较差且慢,不建议


3.最优方法是使用ejabberd自带的命令行工具ejabberdctl来直接生成用户。网上的回答基本是通过修改sudo用户组权限来直接在php使用exec语句来执行此命令

$username = 'tester';$password = 'testerspassword';$node = 'myserver.com';exec('sudo /usr/sbin/ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);if($output == 0){    // Success!}else{    // Failure, $output has the details    echo '<pre class="brush:php;toolbar:false">';    foreach($output as $o)    {        echo $o."\n";    }    echo '
';}

需要在sudoer文件中添加ejabberd用户权限,相对不安全也比较麻烦,也不推荐。


其实ejabberd在最近的版本中已经集成了xmlrpc模块,通过该模块可直接访问4560端口使用ejabberd的一些内部命令。官网介绍地址:https://www.ejabberd.im/ejabberd_xmlrpc

由于我使用macos在ejabberd官网下载的一键安装包,安装完后需要cd到/Application/ejabberd_PATH/conf/文件夹中修改ejabberd.yml配置文件,在module中找到xml_rpc一行去掉#(取消注释),重启后 telnet HOST地址 4560 看能否接通,即说明xmlrpc已经可以用了

关于php端的代码在介绍地址中已有提及,以下是php通过ejabberdctl注册一个用户的demo的代码:

$params=array('user'=>'someUser','host'=>'ejabberdHost','password'=>'somPassword');		$request = xmlrpc_encode_request('register', $params, (array('encoding' => 'utf-8')));		$context = stream_context_create(array('http' => array(			'method' => "POST",			'header' => "User-Agent: XMLRPC::Client mod_xmlrpc\r\n" .			"Content-Type: text/xml\r\n" .			"Content-Length: ".strlen($request),			'content' => $request			)));		$file = file_get_contents("http://127.0.0.1:4560", false, $context);		$response = xmlrpc_decode($file);		if (xmlrpc_is_fault($response)) {			trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");		} else {			print_r($response);		}



打印后即生成注册成功的结果

Have a nice try! :)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn