2010-03-10 58 views
1

我正在開發一個php社交網絡,它要求我們爲所有新成員創建XMPP帳戶。我有一個工作的Ejabberd服務器運行mod_admin_extra都工作正常。從PHP調用ejabberdctl

我試圖從一個php文件調用ejabberdctl像這樣:

exec('sudo /home/user/ejabberd-2.1.2/bin/ejabberdctl register test server pass 2>&1'); 

,但我得到了以下錯誤:

Failed RPC connection to the node [email protected]: nodedown 

雖然在命令行相同的命令作品。

我還添加了以下到/ etc/sudoers文件:

www-data ALL= NOPASSWD: /home/webuser/ejabberd-2.1.2/bin/ejabberdctl 

那麼是什麼原因?

回答

0

這有時會發生,如果你與用戶啓動ejabberd,然後使用另一個用戶重新啓動,所以也許它與通過PHP運行命令的用戶有關?

0

避免使用sudo,將ejabberd cookie複製到您的www用戶並直接調用ejabberdctl。

此外,您可能想要查看mod_xmlrpc,這將允許您通過XMLRPC接口執行任何ejabberdctl命令。

1

Ejabberd具有特殊的帳戶,它的工作對我很好,如果我的PHP exec調用首先:

蘇 - ejabberd -c 「ejabberd命令......」

(不帶密碼.. 。HMM)

2

你可能使用phpseclib, a pure PHP SSH implementation有更好的運氣:

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('localhost', 22); 
$ssh->login('username', 'password'); 

$ssh->read('[prompt]'); 
$ssh->write("su - user\n"); 
$ssh->read('Password:'); 
$ssh->write("Password\n"); 
echo $ssh->read('[prompt]'); 
?>