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

  • 相关阅读:
    【Nginx】ngx_event_core_module模块
    ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th
    nyist oj 214 单调递增子序列(二) (动态规划经典)
    java 入门书籍(java7)
    ARCGIS将WGS84坐标投影到高斯平面
    【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码
    【springboot】【socket】spring boot整合socket,实现服务器端两种消息推送
    【linux】linux修改open file 大小
    【docker】docker限制日志文件大小的方法+查看日志文件的方法
    【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
  • 原文地址:https://www.cnblogs.com/sen068/p/4250895.html
Copyright © 2011-2022 走看看