正在研發一款社交軟件,架構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! :)