PHP は xmlrpc 経由で ejabberd ユーザーを登録します

WBOY
リリース: 2016-06-23 13:42:36
オリジナル
908 人が閲覧しました

私はソーシャル ソフトウェアを開発しています。アーキテクチャ im は xmpp サーバーとして ejabberd を使用しているため、php を介して xmpp ユーザーを登録する方法の問題に遭遇しました。

いくつかの解決策があります:

1. xmpphp フレームワークを使用して、 メタデータを含むメッセージをサーバーに送信して処理します:


2. PHP の xmpp ライブラリ jaxl を使用します。コードには register_user スクリプトが含まれており、シェル経由で

php example/register_user.php YOUR_DOMAIN
ログイン後にコピー

を呼び出すことで生成できます。欠点は、パフォーマンスが悪く、遅いことです。お勧めできません


3. 最良の方法は、次のコマンドを使用することです。 ejabberd に付属する行ツール ejabberdctl ユーザーを直接生成します。オンラインでの答えは、基本的に、PHP で直接 exec ステートメントを使用し、sudo ユーザー グループの権限を変更してこのコマンドを実行することです

$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

ejabberd 公式サイトからワンクリックインストールパッケージをダウンロードするために macos を使用しているため、インストール後、/Application/ejabberd_PATH/ に cd する必要があります。 conf/ フォルダーに移動して ejabberd.yml 設定ファイルを変更し、モジュール内の xml_rpc 行を見つけて # (コメントを解除) を削除し、再起動後、HOST アドレス 4560 に接続できるかどうかを確認します。これは、xmlrpc が使用できる状態であることを意味します。

PHP 側のコードは紹介アドレスに記載されています。以下は、ejabberdctl を通じてユーザーを登録するための PHP のデモ コードです:

$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いい試みです:)


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート