zoukankan      html  css  js  c++  java
  • PHP笔记-PHP中Web Service.

    这几天工作需要.net站点免登陆访问PHP的Wiki站点。

    PHP不熟,感觉很苦逼。任务下来了,必须搞定。准备用SSO,太麻烦了,要改写别人很多代码,这个是第三方CMS,封装的很厉害,不好改。最后我的解决方案是,采取我有把握的解决方案:

    1) .net系统中用户,添加一个角色, WikiAdmin, 授权EPRG系统的外链。有这个角色的用户才能在ePRG系统上看到Wiki的链接。

    2) 用户&角色名数据从Wellmed同步到Wiki数据库。[Wiki中需要提供添加用户的接口,手动写web service,.NET通过HTTP Web方式调用Web Service]

    3)点击Wiki链接的时候,跳转到.net的页面eTools/Wiki,Controller的代码中去调用Wiki的service, 添加用户到Wiki系统,完成候reuturn view,在view中自动发post请求到wiki登录页面,登录之后,和之前一样,跳转到首页,整个过程用户看不到。

    在配置PHP Service时候,花了很多时间。按照网上方法,做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll;发现php_soap.dll项目中都没有。要去下载一个可用的,问朋友说,要下载和当前php版本相同的,否则可能不能用。liense中是3.1,可是php官方都没有这个版本,怀疑liense中不代表php版本。最后通过搜索引擎知道Phpinfo();方法可用打印出PHP的环境变量信息,得知我的版本是是5.4.25。

    在php.net官方下载php,复制php_soap.dll到phpext文件夹。

    修改phpphp.ini添加一行代码,extension=php_soap.dll,支持soap扩展。

    写server.php的服务端代码,client端测试调用。成功。

    尝试用.net调用。发现php自己调用自己不需要wsdl文件,.net调用必须有wsdl文件。想办法生成wsdl文件。

    最后花了很久,用zend studio,参考网上wsdl格式,终于完成了。

    发现.net中添加引用方式,也能成功调用。

    然后完善具体的UserManager方法。数据保存在.php的源文件中。最后通过以下方法实现。

    <?php
    class test {
        public function __construct()
        {
        }
        public function updateUser($userName,$pwd,$fullName,$email,$groups)
        {
            $file = 'conf/users.auth.php';
            $content = file_get_contents($file);
            $array = explode("
    ", $content);
            $newUserInfo=$userName.':'.md5($pwd).':'.$fullName.':'.$email.':'.$groups;
            $myfile = fopen("conf/users.auth.php", "w") or die("Unable to open file!");
            $isUserExists=false;
            
            for($i=0; $i<count($array); $i++)
            {
                if(strlen($array[$i])>5)
                {
                    //foreach each user info
                    $arrUserInfo = explode(":", $array[$i]);
                    //user exists, update user; 
                    $rs=strcasecmp($arrUserInfo[0],$userName);                     
                    if($rs==0)
                    {    
                        $isUserExists=true;
                        $content=str_replace($array[$i],$newUserInfo,$content);
                        break;
                    }        
                }
            }
            //not exists, add user, append to last.
            if($isUserExists==false)
            {
                $content=$content."
    ".$newUserInfo;
            }
            fwrite($myfile, $content);
            fclose($myfile);
            return "success";
        }
        public function getlist($type)
        {
            $result = array(
                array('name'=>'Zhangsan','age'=>18),
                array('name'=>'Lisi','age'=>20)
            );
            $result = json_encode($result);
            return $result;
        }
    }
    
    ?>
    View Code

    还需要添加安全认证。

    参考资料:http://www.cnblogs.com/mbailing/p/3998821.html

    http://www.cnblogs.com/zzxbest/archive/2011/09/21/2184252.html

  • 相关阅读:
    JDK有关环境变量的配置
    installation Manager的那回事
    WMB ESQL报文函数截取新的XML方法
    mb常用操作指令
    DB2报错SQLSTATE=57017 code page "1392"
    DB2操作命令
    MQ7.1及高版本的新特性
    Java项目打jar包及外部运行
    loadrunner
    Ireport5那些事
  • 原文地址:https://www.cnblogs.com/sen068/p/4250895.html
Copyright © 2011-2022 走看看