关于ejabberd调用php的问题(实现用户系统完美对接)
大家好!目前我在做ejabberd外置登录校验功能。
目的:用户注册只需要在web项目对应的数据库插入用户记录,而不用到ejabberd的数据库插入用户记录。
当我用户登录时,ejabberd通过外置登录校验的脚本来进行校验(脚本可以用erlang、php等。考虑到简单我用的是php)。
具体实施步骤:
A:打开ejabberd.cfg,注释掉{auth_method, internal}. %%{auth_method, internal}.
该步骤已经生效。目前通过潘迪安客户端或smack开源包登录,所有用户均不能登录。(开始在windows环境测试始终注释掉后用户还是可以登录,在linux环境做,用户就不能登录了!)
B:在linux环境安装libxml2和搭建php环境
php安装目录:/usr/bin/php/bin/php;其中php是主目录,下面有bin、etc、include、lib、man,5个目录。bin下面包括pear、peardev、pecl 、phar 、phar.phar 、php 、 php-cgi 、php-config 、 phpize,bin目录下php是可执行文件。
该步骤已经成功,通过编写的简单php程序,已经可以调用成功!调用命令如下:/usr/bin/php/bin/php -f /tmp/helloworld.php
C:修改ejabberd.cfg,打开外置校验功能,将校验的php脚本指向我已经写好的php
{auth_method, external}.
{extauth_program, "/tmp/ejabberd-login-guanwang.php"}.
说明:ejabberd-login-guanwang.php开始我写的很简单,程序逻辑就是进入后立马写日志到文件,通过日志文件是否有数据验证是否被ejabberd调用
程序源码如下
#!/usr/bin/php/bin/php
<?php
@rem 这部分代码只是做测试,验证是否php被调用。将日志写到指定文件里-begin
function writeFile($filename, $content)
{
if($filename)
{
$fp=@fopen($filename, "w");
if($fp)
{
fwrite($fp, $content);
fclose($fp);
}
return true;
}
else
return false;
}
writeFile("/tmp/extauth.log", "my birth day....");
@rem 这部分代码只是做测试,验证已经调过来了。将日志写到指定文件里-end
?>
现在问题来了:我ejabberd重启后,用潘迪安登录校验,在到/tmp/extauth.log看,没有任何日志输出,但是我将该文件的头“#!/usr/bin/php/bin/php ”去掉后,在通过“/usr/bin/php/bin/php -f /tmp/ejabberd-login-guanwang.php”手工调用后,有日志产生,说明程序是没有问题的!
我怀疑问题有以下原因:
1).ejabberd本身就没有调用php。这个我再想办法,找到ejabberd本身服务器提供的日志来查下原因。目前日志还没有找到,后续会搞出ejabberd的日志!
2).php环境搭建的原因
我虽然自己手工调度没有问题,但是会不会与ejabberd结合就有问题了呢?
我安装的php的路径是/usr/bin/php/bin/php;其中php是主目录,下面有bin、etc、include、lib、man,5个目录。bin下面包括pear、peardev、pecl 、phar 、phar.phar 、php 、 php-cgi 、php-config 、 phpize,bin目录下php是可执行文件。
ejabberd这里应该是通过php-cli模式来调用的(不依赖web服务器),而ejabberd-login-guanwang.php文件的头是#!/usr/bin/php/bin/php ,会不会是这个问题呢?
请大伙支招,谢谢!