PHP經過xmlrpc註冊ejabberd用戶

正在研發一款社交軟件,架構im使用了ejabberd做爲xmpp服務器,因而遇到了如何經過php註冊xmpp用戶的問題。 php

解決方法有幾個: node

1.用xmpphp框架發送含<body>元數據的消息到服務器要求處理,這個可參考:http://blog.csdn.net/newjueqi/article/details/7864066 shell


2.使用php的xmpp庫jaxl,其demo代碼中包含一個register_user的腳本,經過shell調用: macos

php example/register_user.php YOUR_DOMAIN

便可生成用戶,缺點是性能較差且慢,不建議 php框架


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>';
    foreach($output as $o)
    {
        echo $o."\n";
    }
    echo '</pre>';
}

須要在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! :)

相關文章
相關標籤/搜索