私はソーシャル ソフトウェアを開発しています。アーキテクチャ im は xmpp サーバーとして ejabberd を使用しているため、php を介して xmpp ユーザーを登録する方法の問題に遭遇しました。
いくつかの解決策があります:
1. xmpphp フレームワークを使用して、
メタデータを含むメッセージをサーバーに送信して処理します:
2. PHP の xmpp ライブラリ jaxl を使用します。コードには register_user スクリプトが含まれており、シェル経由で
php example/register_user.php YOUR_DOMAIN
を呼び出すことで生成できます。欠点は、パフォーマンスが悪く、遅いことです。お勧めできません
$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いい試みです:)