当前位置:  编程技术>php
本页文章导读:
    ▪php捕捉soap的xml形式      以下代码是对Php的soap接口进行抓包分析出的结果,这个分析在当服务端或者客户端的Php没有安装soap模块时,可以使用构建xml的方式实现相同的功能。 php捕捉soap的xml形式,供初学者参考吧。 .........
    ▪php utf8 一半乱码的问题           网站出现一个bug,页面头部出现乱码,而其它地方正常,头部是include一个head.php,整个页面是utf8的,但是我把head.php打开看,它就是用utf8方式保存的,把其它正常的文件拷贝,填入head.ph.........
    ▪使用redis实现跨服务器session的方法      最近新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 如上图所示,用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两个redis值.........

[1]php捕捉soap的xml形式
    来源: 互联网  发布时间: 2013-12-24

以下代码是对Php的soap接口进行抓包分析出的结果,这个分析在当服务端或者客户端的Php没有安装soap模块时,可以使用构建xml的方式实现相同的功能。
php捕捉soap的xml形式,供初学者参考吧。
服务端代码:
 

代码如下:
   <?php
    $data = $HTTP_RAW_POST_DATA;
    $data = file_get_contents('php://input');
    $server = new SoapServer(null, array('uri' => "http://abc-soap-duba/"));
    $server->addFunction("sendtask");
    $server->handle($data);
    function sendtask()
    {
        return "ok";
    }
    ?>

客户端代码:
   

代码如下:
<?php
    $client = new SoapClient(null, array('location' => "http://api.abc.cn/taskserver.php",
                                         'uri' => "http://abc-soap-duba/"));
    $username="cdn@abc.cn";
    $password=md5("123456");
    $domain="www.abc.cn";
    $pathsizelist="/images/ad2.gif,4846,/images/ad3.gif,5788,/images/ico01.gif,1089,/images/logo.gif,1605";
    echo $client->sendtask($username,$password,$domain,$pathsizelist);
    ?>

客户端发出的数据:
   

代码如下:
POST /b.php HTTP/1.1
    Host: api.abc.cn
    Connection: Keep-Alive
    User-Agent: PHP-SOAP/5.2.2
    Content-Type: text/xml; charset=utf-8
    SOAPAction: "http://abc-soap-duba/#sendtask"
    Content-Length: 766
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://abc-soap-duba/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encoding>
    <SOAP-ENV:Body>
    <ns1:sendtask>
    <param0 xsi:type="xsd:string">cdn@abc.cn</param0>
    <param1 xsi:type="xsd:string">e10adc3949ba59abbe56e057f20f883e</param1>
    <param2 xsi:type="xsd:string">www.abc.cn</param2>
    <param3 xsi:type="xsd:string">/images/ad2.gif,4846,/images/ad3.gif,5788,/images/ico01.gif,1089,/images/logo.gif,1605</param3>
    </ns1:sendtask>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

当server中没有改函数时返回的结果:
   

代码如下:
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Function 'sendtasks' doesn't exist</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

当server中有该函数时的结果:
   

代码如下:
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://abc-soap-duba/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encoding>
    <SOAP-ENV:Body>
    <ns1:sendtaskResponse>
    <return xsi:type="xsd:string">ok</return>
    </ns1:sendtaskResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    
[2]php utf8 一半乱码的问题
    来源: 互联网  发布时间: 2013-12-24

     网站出现一个bug,页面头部出现乱码,而其它地方正常,头部是include一个head.php,整个页面是utf8的,但是我把head.php打开看,它就是用utf8方式保存的,把其它正常的文件拷贝,填入head.php的内容还是不行。
    最后是用linux,vi一个head.php,输入测试两个字发现显示正常。
    于是把head.php下载下来,用ue32打开,把内容填入,结果页面显示正常,估计是utf8文件头的问题:
    这个正常文件没有utf8的EFBB。

正常:

异常:

您可能感兴趣的文章:
php函数substr截取中文字符出现乱码的解决方法
php substr截断中文半个汉字乱码问题的解决方法
php乱码问题 utf8乱码杂谈
php截取中文字符串乱码如何解决呢
php分割GBK中文乱码的解决方法
解决php截取utf-8中文字符串时乱码的问题
如何解决php中文字符乱码,中文字符入库乱码的问题
php中文字符串截断且无乱码的解决方法
有关php中文乱码的解决方法


    
[3]使用redis实现跨服务器session的方法
    来源: 互联网  发布时间: 2013-12-24

最近新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡,

如上图所示,用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两个redis值主从结构。
因此需要使用跨服务器的session保存用户登录状态,于是便写了一个跨站的session共享的类。
 

代码如下:
<?php
        /*
         *用redis实现跨服务器session
         *注意需要安装phpredis模块
         *
         *作者:yifangyou
         *日期:2012-07-23 22:55:00
        **/
    class RedisSession{
        var $expire=86400;//过期时间
        var $sso_session;//session id
        var $session_folder;//session目录
        var $cookie_name;//cookie的名字
        var $redis;//redis连接
        var $cache;//缓存session
        var $expireAt;//过期时间
        /*
         *初始化
         *参数
         *$redis:php_redis的类实例
         *$cookie_name:cookie的名字
         *$session_id_prefix:sesion id的前缀
        **/
        function RedisSession($redis,$expire=86400,$cookie_name="sso_session",$session_id_prefix=""){
            $this->redis=$redis;
            $this->cookie_name=$cookie_name;
            $this->session_folder="sso_session:";
        //若是cookie已经存在则以它为session的id
            if(isset()($_COOKIE[$this->cookie_name])){
                 $this->sso_session=$_COOKIE[$this->cookie_name];
            }else{
                $this->expire=$expire;
                $this->expireAt=time()+$this->expire;
             //在IE6下的iframe无法获取到cookie,于是我使用了get方式传递了cookie的名字
                if(isset($_GET[$this->cookie_name])){
                        $this->sso_session=$_GET[$this->cookie_name];
                }else{
                        $this->sso_session=$this->session_folder.$session_prefix.md5(uniqid(rand(), true));   
                }
                setcookie($this->cookie_name,$this->sso_session,$this->expireAt,"/");
            }
        }
       
        /*
         *设置过期时间
         *参数
        **/
        function expire($expire=86400){
                $this->expire=$expire;
                $this->expireAt=time()+$this->expire;
                //设置session过期时间
                setcookie($this->cookie_name,$this->sso_session,$this->expireAt,"/",".greatwallwine.com.cn");
                $this->redis->expireAt($this->sso_session, $this->expireAt);
        }
       
        /*
         *设置多个session的值
         *参数
         *$array:值
        **/
        function setMutil($array){
            $this->redis->hMset($this->sso_session,$array);
        }
        /*
         *设置session的值
         *参数
         *$key:session的key
         *$value:值
        **/
        function set($key,$value){
            $this->redis->hSet($this->sso_session,$key,$value);
        }
        /*
         *设置session的值为对象
         *参数
         *$key:session的key
         *$object:对象
        **/
        function setObject($key,$object){
            $this->redis->hSet($this->sso_session,$key,serialize($object));
        }
       
        /*
         *获取全部session的key和value
         @return: array
        **/
        function getAll(){
            return $this->redis->hGetAll($this->sso_session);
        }       
       
        /*
         *获取一个session的key和value
         @return: array
        **/
        function get($key){
            return $this->redis->hGet($this->sso_session,$key);
        }
       
      /*
         *获取session的值为对象
         *参数
         *$key:session的key
         *$value:cookie的名字
        **/
        function getObject($key){
            return unserialize($this->redis->hGet($this->sso_session,$key));
        }
        /*
         *从缓存中获取一个session的key和value
         @return: array
        **/
        function getFromCache($key){
            if(!isset($this->cache)){
                $this->cache=$this->getAll();
            }
            return $this->cache[$key];
        }
       
        /*
         *删除一个session的key和value
         @return: array
        **/
        function del($key){
            return $this->redis->hDel($this->sso_session,$key);
        }
        /*
         *删除所有session的key和value
         @return: array
        **/
        function delAll(){
            return $this->redis->delete($this->sso_session);
        }
    }
    ?>

使用方法:
   

代码如下:

<?php
    error_reporting(0);
    $redisHost="192.168.1.2";
    $redisPort="6379";
    $redis = new Redis();
    $redis->connect($redisHost,$redisPort);
    include_once("inc/RedisSession.php");
    $redisSession=new RedisSession($redis);
    /*
    $redisSession->set("name","sdf4");
    $redisSession->set("age",1234);
    $redisSession->set("***","man14");
    $redisSession->set("name","abc4");
    $redisSession->setMutil(array("province"=>"guangdong","city"=>"guangzhou"));
    */

    $redisSession->setObject("obj",array("test1"=>array("test2")));
    $obj=$redisSession->getObject("obj");
    print_r($obj);
    die();
    print_r($redisSession->getAll());
    //$redisSession->del("name");
    print_r($redisSession->get("name"));
    //print_r($redisSession->get("province"));
    //$redisSession->delAll();
    //print_r($redisSession->getAll());
    print_r($redisSession->getFromCache("name"));
    /*
        $redisSession->del("name");
        $redisSession->delAll();
    */

比较常用的估计是set,get,setObject,getOject。
我用sso_session:主要是方便用phpRedisAdmin管理。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3