【Svn】 centos搭建SVN服务端

Continue Read..

安装 

#yum install subversion

查看是否安装成功

svnserve --version

 

有了SVN软件后还需要建立SVN库。
#mkdir /cuzn/svn
#svnadmin create /cuzn/svn
执行上面的命令后,自动在repos下建立多个文件, 分别是conf, db,format,hooks, locks, README.txt。

进入conf  有个配置文件  authz   passwd  svnserve.conf
首先修改  passwd

点击查看原图

然后修改 authz

 

点击查看原图

然后修改 svnserve.conf

点击查看原图

 

然后启动 svn  

先查看  netstat -ntlp

然后 kill -9  PID 

然后在启动  svnserve -d --listen-port 3690 -r /cuzn/svn


然后配置防护墙vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

点击查看原图

重启防火墙service iptables restart


点击查看原图

然后自己装个 TortoiseSVN  就可以检出了


3个配置文件 已经打包放附件了

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【正则】一个PPT就可以让你正则入门

Continue Read..

这几天在学习正则

在网上找了点资料

http://www.regexlab.com/zh/regref.htm

找了个PPT  里面写的很细 我改了下 上传附件了    后来加了phpunit测试 是不是逼格瞬间提高了 

 

 

下面是我写的例子  文件也放附件了 

<?php

 

/**

 *

 * 正则

 * @author liss cuzn

 * @version 2015-08-13 10:56:46Z cuzn $

 */

 

/**

 * int preg_match (

 * string $pattern ,

 * qstring $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]]

 * )

 * pattern

 * 要搜索的模式,字符串类型。

 *

 * subject

 * 输入字符串。

 *

 * matches

 * 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本,

 * $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

 *

 * flags

 * flags可以被设置为以下标记值:

 *

 * PREG_OFFSET_CAPTURE

 * 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。

 * 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,

 * 第1个元素是该匹配字符串 在目标字符串subject中的偏移量。

 * offset

 * 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

 */

function yanzhen ( $reg , $str , $cuzn = 0 ) {

if ( preg_match ( $reg , $str ) ) {

echo "匹配\n";

} else {

echo "不匹配\n";

}

if ( $cuzn == 1 ) {

echo "=================================================\n";

}

}

 

// 验证^

$a = "hi";

$b = "hmi";

$c = "hidden";

$reg = "/^hi/";

 

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证$

$reg = "/hi$/";

$a = "hi";

$b = "chi";

$c = "Orochi1";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证[]

$reg = "/^[a-z]at$/";

$a = "cat";

$b = "mat";

$c = "1at";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证加号

 

$reg = "/^go+gle$/";

$a = "gogle";

$b = "google";

$c = "go1gle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复加号

$reg = "/^g[aeiou]+gle$/";

$a = "gogle";

$b = "gzgle";

$c = "gae1gle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证星号

 

$reg = "/^go*gle$/";

$a = "gogle";

$b = "google";

$c = "gooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复 符号 {x,y}

 

$reg = "/^go{2,4}gle$/";

$a = "gogle";

$b = "google";

$c = "gooooooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复 符号 {x,}

 

$reg = "/^go{2,}gle$/";

$a = "gogle";

$b = "google";

$c = "gooooooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 子表达式()

$reg = "/^(very)*cuzn$/";

$a = "very";

$b = "vvvvcuzn";

$c = "veryverycuzn";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 分支 |

$reg = "/^cuzn$|^org$|^net$/";

$a = "cn";

$b = "cuzn";

$c = "cuznnet";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 分支 \

$reg = "/^1\*\(2\+3\)=6$/";

$a = "1*(2+3)=6";

// yanzhen ( $reg , $a , 1 );

 

/**

 * 匹配带区号和横杠的 电话号码

 * 思路:

 * 区号一般都是0xx/x-xxxxxxx/x 前3或者4位-后7位或者8位

 * 第一步 写前3/4位的正则  

 * 0[1-9][0-9]{1,2}

 * 第二步 写后7/8位正则

 * \d{7,8}

 * 连起来就是 /^0[1-9][0-9]{1,2}-\d{7,8}$/

 */

$reg = " /^0[1-9][0-9]{1,2}-\d{7,8}$/";

$a = "13617291145";

$b = "010-51651133";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b , 1 );

 

 

/**

 * 匹配第一位可能是0的手机号码  

 * 思路 其实就是匹配手机 只是前面可能加一个0

 * 手机号码 前2位是   13 15 18 17

 * 那么  0?1[3|5|7|8]\d{9}

 */

 

$reg = "/^0?1[3|5|7|8]\d{9}$/";

$a = "13617291145";

$b = "010-51651133";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b , 1 );

 

 

/**

 * 

 * 在线测试 PHPhttp://www.mcqyy.com/RunCode/php5.6/

 * 

 * 匹配IP  

 * 思路  

 * ip就是  0-255 的 4个数 中间加3个.

 * 如果第一位是0 第二位是1-9  第三位是0-9

 * 如果第一位是1 第二位,第三位是0-9

 * 如果第一位是2 第二位,第三位是0-5 

 * 

 * 然后 一个IP地址的最后一个数 必须有值 比如  1.1.1.0   

 * 

 * 步骤 先写一个0-255的 数字

 * ^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.))$

 * 然后就是加.循环

 * ^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.)){3}((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$

 */

// $reg = "/^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$/";

// for($i=0;$i<=255;$i++){

// echo "当前数字是 $i";

// yanzhen ( $reg , $i );

// }

 

/*

$a1=0;

$a2=0;

$a3=0;

$a4=0;

$reg = "/^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.)){3}((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$/";

for($i=0;$i<=255;$i++){

$a1=$i;

for($j=0;$j<=255;$j++){

$a2=$j;

for($m=0;$m<=255;$m++){

$a3=$m;

for($n=0;$n<=255;$n++){

$a4=$n;

$str = $a1.".".$a2.".".$a3.".".$a4;

echo "当前数字是 $str     ";

yanzhen ( $reg , $str ); 

}

}

}

}

*/

 

/**

 * 匹配 日期(1-31号)

 * 这里不考虑闰月,大小月等情况

 * 

 * 思路 

 * 如果第一位是0 第二位可以是任何1-9的数字

 * 如果第一位是1,2 第二位可以是任何0-9的数字

 * 如果第一位是3 第二位只能是0,1

 * 

 * ^(0[1-9])|([1-2]\d)|(3[0-1])$

 */

 

 

$reg = "/^(0[1-9])|([1-2]\d)|(3[0-1])$/";

// $a = "00";

// yanzhen ( $reg , $a );

// $a = "01";

// yanzhen ( $reg , $a );

// $a = "10";

// yanzhen ( $reg , $a );

// $a = "11";

// yanzhen ( $reg , $a );

// $a = "20";

// yanzhen ( $reg , $a );

// $a = "21";

// yanzhen ( $reg , $a );

// $a = "30";

// yanzhen ( $reg , $a );

// $a = "31";

// yanzhen ( $reg , $a );

// $a = "32";

// yanzhen ( $reg , $a , 1 );

 

 

 

 

/**

 * 匹配phper(.+)

 */

$reg = "/^phper(.+)$/";

$a = "phper001,phper002,phper003";

yanzhen ( $reg , $a , 1 );

 

 

 

 

 

         $regex = '/<div class="basic-info">((.|\n)*)<table border=/Ui';

        $url = 'http://3g.ganji.com/qingdao_ershouche/2092038554x?wapadprurl=adurl';

        

        $info=file_get_contents($url);

        preg_match($regex,$info,$m);

        

        $str = trim(str_replace("基本信息","",str_replace("</p>","",str_replace("<p>","",$m[1]))));

        $arr = explode("-",$str);

        var_dump($arr);

 

 

 

 

 

 

 

 

 

 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Redis】redis密码管理

Continue Read..

一. 如何初始化redis的密码?

总共2个步骤:

a.在配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数。

比如 requirepass test123

b.配置文件中参数生效需要重启重启redis 。

 

.不重启redis如何配置密码?

a. 在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。

# requirepass foobared
 如  修改成 :

requirepass  test123

 

b. 进入redis重定义参数

查看当前的密码:

[root@slaver251 redis-2.4.16]# ./src/redis-cli -p 6379
redis 127.0.0.1:6379> 
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) (nil)

显示密码是空的,

然后设置密码:

redis 127.0.0.1:6379> config set requirepass test123
OK

再次查询密码:

redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted

此时报错了!

现在只需要密码认证就可以了。

redis 127.0.0.1:6379> auth test123
OK

再次查询密码:

redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"

密码已经得到修改。

当到了可以重启redis的时候 由于配置参数已经修改 所以密码会自动生效。

要是配置参数没添加密码 那么redis重启 密码将相当于没有设置。

 

三.如何登录有密码的redis?

a.在登录的时候 密码就输入

[root@slaver251 redis-2.4.16]# ./src/redis-cli -p 6379 -a test123
redis 127.0.0.1:6379> 
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"

 

b.先登录再验证:

[root@slaver251 redis-2.4.16]#  ./src/redis-cli -p 6379
redis 127.0.0.1:6379> 
redis 127.0.0.1:6379> auth test123
OK
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"
redis 127.0.0.1:6379>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

[转载]PHP实现Unicode和Utf-8编码的互相转换

Continue Read..

原文地址:http://segmentfault.com/a/1190000003020776

 

最近恰好要用到unicode编码的转换,就去查了一下php的库函数,居然没找到一个函数可以对字符串进行Unicode的编码和解码!也罢,找不到的话就自己实现一下了。。。

Unicode和Utf-8编码的区别

Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。
UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面看一下UTF-8编码表:

U-00000000 - U-0000007F: 0xxxxxxx 
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 

xxx 的位置由字符编码数的二进制表示的位填入, 越靠右的 x 具有越少的特殊意义,只用最短的那个足够表达一个字符编码数的多字节串。 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目。而第一行中以0开头,是为了兼容ASCII编码,为一个字节,第二行就为双字节字符串,第三行为3字节,如汉字就属于这种,以此类推。(个人认为:其实我们可以简单的把前面的1的个数看成字节数)

Unicode怎么转换成Utf-8呢

为了要将Unicode转换为UTF-8,当然要知道他们的区别到底在什么地方。下面来看一下,在Unicode中的编码是怎样转换成UTF-8的,在UTF-8中,如果一个字符的字节小于0x80(128)则为ASCII字符,占一个字节,可以不用转换,因为UTF-8兼容ASCII编码。假如在Unicode中汉字“你”的编码为“u4F60”,把它转换为二进制为100111101100000,然后按照UTF-8的方法进行转换。可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下所示的格式,前面按格式填补,不足8位用0填补。

unicode: 100111101100000                   4F60 utf-8:    11100100,10111101,10100000       E4BDA0 

从上面就可以很直观的看出Unicode到UTF-8之间的转换,当然知道了UTF-8的格式后,就可以进行逆运算,就是按照格式把它在二进制中的相应位置上取出,然后在转换就是所得到的Unicode字符了(这个运算可以通过“位移”来完成)。如上述的“你”的转换,由于其值大于0x800小于0x10000,因此可以判断为三字节存储,则最高位需要向右移“12”位再根据三字节格式的最高位为11100000(0xE0)求或(|)就可以得到最高位的值了。同理第二位则是右移“6”位,则还剩下最高位和第二位的二进制值,可以通过与111111(0x3F)求按位于(&)操作,再和11000000(0x80)求或(|)。第三位就不用移位了,只要直接取最后六位(与111111(ox3F)取&),在与11000000(0x80)求或(|)。

Utf-8怎么逆转回Unicode呢

当然在UTF-8到Unicode的转换也是通过移位等来完成的,就是把UTF-8那些格式相应的位置的二进制数给揪出来。在上述例子中“你”为三个字节,因此要每个字节进行处理,有高位到低位进行处理。在UTF-8中“你”为11100100,10111101,10100000。从高位起即第一个字节11100100就是把其中的"0100"给取出来,这个很简单只要和11111(0x1F)取与(&),由三字节可以得知最到位肯定位于12位之前,因为每次取六位。所以还要将得到的结果左移12位,最高位也就这样完成了0100,000000,000000。而第二位则是要把“111101”给取出来,则只需将第二字节10111101和111111(0x3F)取与(&)。在将所得到的结果左移6位与最高字节所得的结果取或(|),第二位就这样完成了,得到的结果为0100,111101,000000。以此类推最后一位直接与111111(0x3F)取与(&),再与前面所得的结果取或(|)即可得到结果0100,111101,100000。

PHP代码实现

/**
 * utf8字符转换成Unicode字符
 * @param  [type] $utf8_str Utf-8字符
 * @return [type]           Unicode字符
 */
function utf8_str_to_unicode($utf8_str) {
    $unicode = 0;
    $unicode = (ord($utf8_str[0]) & 0x1F) << 12;
    $unicode |= (ord($utf8_str[1]) & 0x3F) << 6;
    $unicode |= (ord($utf8_str[2]) & 0x3F);
    return dechex($unicode);
}

/**
 * Unicode字符转换成utf8字符
 * @param  [type] $unicode_str Unicode字符
 * @return [type]              Utf-8字符
 */
function unicode_to_utf8($unicode_str) {
    $utf8_str = '';
    $code = intval(hexdec($unicode_str));
    //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
    $ord_1 = decbin(0xe0 | ($code >> 12));
    $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
    $ord_3 = decbin(0x80 | ($code & 0x3f));
    $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
    return $utf8_str;
}

测试一下了

$utf8_str = '我';//这是汉字“你”的Unicode编码

$unicode_str = '4f6b';//输出 6211 echo utf8_str_to_unicode($utf8_str) . "<br/>";//输出汉字“你” 

echo unicode_str_to_utf8($unicode_str);

以上这些转换是针对中文汉字【往大了说是非ASCII】的测试,因为如果是ASCII的话,转来转去都是一样的,也用不着费那么大工夫。
还有就是这两个函数只是简单的实现了一下,只支持单个字符【一个完整的utf8字符或是一个完整的Unicode字符】互相转换,大家如果明白了得话就可以尽情去扩展了。。。

【PHP】http header 错误集合

Continue Read..
function https($num,$return = array()) {
$http = array ( 
100 => "HTTP/1.1 100 Continue" , 
101 => "HTTP/1.1 101 Switching Protocols" , 
200 => "HTTP/1.1 200 OK" , 
201 => "HTTP/1.1 201 Created" , 
202 => "HTTP/1.1 202 Accepted" , 
203 => "HTTP/1.1 203 Non-Authoritative Information" , 
204 => "HTTP/1.1 204 No Content" , 
205 => "HTTP/1.1 205 Reset Content" , 
206 => "HTTP/1.1 206 Partial Content" , 
300 => "HTTP/1.1 300 Multiple Choices" , 
301 => "HTTP/1.1 301 Moved Permanently" , 
302 => "HTTP/1.1 302 Found" , 
303 => "HTTP/1.1 303 See Other" , 
304 => "HTTP/1.1 304 Not Modified" , 
305 => "HTTP/1.1 305 Use Proxy" , 
307 => "HTTP/1.1 307 Temporary Redirect" , 
400 => "HTTP/1.1 400 Bad Request" , 
401 => "HTTP/1.1 401 Unauthorized" , 
402 => "HTTP/1.1 402 Payment Required" , 
403 => "HTTP/1.1 403 Forbidden" , 
404 => "HTTP/1.1 404 Not Found" , 
405 => "HTTP/1.1 405 Method Not Allowed" , 
406 => "HTTP/1.1 406 Not Acceptable" , 
407 => "HTTP/1.1 407 Proxy Authentication Required" , 
408 => "HTTP/1.1 408 Request Time-out" , 
409 => "HTTP/1.1 409 Conflict" , 
410 => "HTTP/1.1 410 Gone" , 
411 => "HTTP/1.1 411 Length Required" , 
412 => "HTTP/1.1 412 Precondition Failed" , 
413 => "HTTP/1.1 413 Request Entity Too Large" , 
414 => "HTTP/1.1 414 Request-URI Too Large" , 
415 => "HTTP/1.1 415 Unsupported Media Type" , 
416 => "HTTP/1.1 416 Requested range not satisfiable" , 
417 => "HTTP/1.1 417 Expectation Failed" , 
500 => "HTTP/1.1 500 Internal Server Error" , 
501 => "HTTP/1.1 501 Not Implemented" , 
502 => "HTTP/1.1 502 Bad Gateway" , 
503 => "HTTP/1.1 503 Service Unavailable" , 
504 => "HTTP/1.1 504 Gateway Time-out" 
);
header ( $http [$num] );
if(!empty($return)){
echo json_encode ($return );
}
}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【PHP】在模板打印错误提示并按时间跳转

Continue Read..

我是在YII 里面写的 应该可以通用

 

首先在 写一个全局函数  

我写在components  新建一个 my_fun.php文件

/**

* 成功提示

* @param type $msg

*         提示信息

* @param type $jumpurl

*         跳转url

* @param type $wait

*         等待时间

*/

function success($msg = "", $jumpurl = "", $wait = 3) {

return $this->_jump ( $msg, $jumpurl, $wait, 1 );

}

/**

* 错误提示

* @param type $msg

*         提示信息

* @param type $jumpurl

*         跳转url

* @param type $wait

*         等待时间

*/

function error($msg = "", $jumpurl = "", $wait = 3) {

return $this->_jump ( $msg, $jumpurl, $wait, 0 );

}

/**

* 最终跳转处理

* @param type $msg

*         提示信息

* @param type $jumpurl

*         跳转url

* @param type $wait

*         等待时间

* @param int $type

*         消息类型 0或1

*/

function _jump($msg = "", $jumpurl = "", $wait = 3, $type = 0) {

$data = array ( 

'msg' => $msg , 

'jumpurl' => $jumpurl , 

'wait' => $wait , 

'type' => $type 

);

$data ['title'] = ($type == 1) ? "提示信息" : "错误信息";

if (empty ( $jumpurl )) {

if ($type == 1) {

$data ['jumpurl'] = isset ( $_SERVER ['HTTP_REFERER'] ) ? $_SERVER ['HTTP_REFERER'] : "javascript:window.close();";

} else {

$data ['jumpurl'] = "javascript:history.back(-1);";

}

}

return $data;

}

 

然后在模板里面写

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>跳转提示</title>

<style type="text/css">

*{ padding: 0; margin: 0; }

body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; }

.system-message{ width:500px;height:100px; margin:auto;border:6px solid #999;text-align:center; position:relative;top:50px;}

.system-message legend{font-size:24px;font-weight:bold;color:#999;margin:auto;width:100px;}

.system-message h1{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; }

.system-message .jump{ padding-right:10px;height:25px;line-height:25px;font-size:14px;position:absolute;bottom:0px;left:0px;background-color:#e6e6e1 ; display:block;width:490px;text-align:right;}

.system-message .jump a{ color: #333;}

.system-message .success,.system-message .error{ line-height: 1.8em; font-size: 15px }

.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}

</style>

</head>

<body>

<fieldset class="system-message">

    <legend><?php echo $title;?></legend>

    <div style="text-align:left;padding-left:10px;height:75px;width:490px;  ">

         

        <?php if($type==1):?>

        <p class="success">恭喜^_^!~<?php echo($msg); ?></p>

        <?php else:?>

        <p class="error">Sorry!~<?php echo($msg); ?></p>

        <?php endif;?>

        <p class="detail"></p>

         

    </div>

    <p class="jump">

        页面自动 <a id="href" href="<?php echo($jumpurl); ?>">跳转</a> 等待时间: <b id="wait"><?php echo($wait); ?></b>

    </p>

</fieldset>

<script type="text/javascript">

     

(function(){

var wait = document.getElementById('wait'),href = document.getElementById('href').href;

totaltime=parseInt(wait.innerHTML);

var interval = setInterval(function(){

    var time = --totaltime;

        wait.innerHTML=""+time;

    if(time === 0) {

        location.href = href;

        clearInterval(interval);

    };

}, 1000);

})();

 

</script>

</body>

</html>

 

 

最后在 Controller  里面调用

 

//错误提示

public function actionError()

{

$data = Yii::$app->My_fun->error("数据库错误","/admin/index/",5);

   return $this->render('error',$data);

}

 

 点击查看原图

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

jquery 单击显示菜单

Continue Read..
html:
<ul class="bang-nav-ul opened" style="height: 200px;">
<li class="bang-nav-li"><a href="/index/about">关于</a></li>
<li class="bang-nav-li"><a href="/index/services">服务</a></li>
<li class="bang-nav-li"><a href="/index/cases">案例</a></li>
<li class="bang-nav-li"><a href="/index/evaluate">反响</a></li>
<li class="bang-nav-li"><a href="/index/news">动态</a></li>
<li class="bang-nav-li"><a href="/index/contact">联系</a></li>
<!-- <li class="bang-nav-li"><a  href="/index/faq">咨询</a></li> -->
<li class="bang-nav-li"><a href="/bangdigit">正邦电商</a></li>
<li class="bang-nav-li"><a href="http://www.zhengbang.com.cn/hr" target="_blank">招聘</a></li>
</ul>
<div class="bang-nav-mobile"></div>

var navUl = $('.bang-nav-ul');
$('.bang-nav-mobile').bind({
'click': function() {
if (navUl.hasClass('opened')) {
closeNavUl();
} else {
openNavUl();
}
}
});
function closeNavUl() {
navUl.animate({height: 0}, 600);
navUl.removeClass('opened');
}
function openNavUl() {
navUl.animate({height: navUl[0].scrollHeight-50}, 600);
navUl.addClass('opened');
if (document.documentElement.clientWidth <= 992) {
// closeDeptNav();
//deptNavList.hide();
//deptNav.removeClass('opened');
//deptNavOpen.removeClass('opened');
// closeSearch();
search.css({top: 0});
if (cover) {
cover.remove();
}
searchbtn.removeClass('open');
}
}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【YII2】实现Oauth

Continue Read..

首先介绍下实现的 结构  

类似 QQ一键登录  用户点击某个网站  然后跳转到QQ登录页面  确定登录之后 在回来这个网站 并且登录

 

我现在需要2个网址  http://www.test.com   应用网址   http://www.cuzn-oauth.com  oauth验证网址

过程就是  我的网址  用指定的key和秘钥 请求一个oauth 指定接口 获取 code  然后用得到的 code  来获取access_token 最后通过 access_token来获取 对应的信息

 

其实 oauth可以当做一个代理  下面这个是我写的代理过程

http://www.wulinlw.org/post-511.html


下面开始 写http://www.test.com  的 代码 

有一个 index.php文件


<?php

$authorized = empty ( $_POST ['authorized'] ) ? '' : $_POST ['authorized'];

include 'oauth_sdk_php.php';

$oauth = new OAuth ( 'testclient', 'testpass' );

if (! empty ( $authorized )) {

$getAuthorizeURL = $oauth->getAuthorizeURL ();

header ( "location: $getAuthorizeURL" );

}

$data['code'] = empty ( $_GET ['code'] ) ? '' : $_GET ['code'];

if (! empty ( $data['code'] )) {

$url = $oauth->getAccessTokenURL ( $data);

$getAccessToken = $oauth->getAccessToken ( $url, $data );

$getAccessToken = json_decode ( $getAccessToken['content'], true );

if (! empty ( $getAccessToken ['access_token'] )) {

$resourceURL = $oauth->url.'/oauth/resource/';

$extheaders = array(

"Authorization : Bearer ".$getAccessToken ['access_token'],

"cuzncuzn : asdfasdf"

);

$ret = $oauth->getResource ($resourceURL,array(),"GET", $extheaders);

var_dump($ret);die;

$ret = json_decode ( $ret['content'], true );

if ($ret ['success']) {

header ( "location: http://www.demo.com/t.php" );

}

}else{

var_dump($getAccessToken);die;

}

}

 

?>

 

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>是否授权</title>

</head>

<body>

<form method="post" action="">

<input type="submit" name="authorized" value="一键登陆">

</form>

</body>

</html>

 

和一个sdk

<?php

 

/**

 * OAuth授权类

 *

 * @author cuzn

 * @version 1.0 2015-07-15

 */

class OAuth{

public $url = 'http://www.yy-oauth.com';

public $client_id = '';

public $client_secret = '';

public $oauthURL = '/oauth/index/';

public $accessTokenURL = '/oauth/token/';

// public $resourceURL = '/oauth/resource/';

public $refreshURL = '/oauth/refresh/';

/**

* 初始化

*

* @param $client_id 即

*         appid

* @param $client_secret 即

*         appkey

* @return

*

*/

public function __construct($client_id, $client_secret) {

if (! $client_id || ! $client_secret)

exit ( 'client_id or client_secret is null' );

$this->client_id = $client_id;

$this->client_secret = $client_secret;

}

/**

* 获取授权URL

*

* $client_id 应用用户名

* $response_type 授权类型,为code

* return string

*/

public function getAuthorizeURL($params=array()) {

$params = array_merge ( array (

'client_id' => $this->client_id , 

'response_type' => 'code' , 

'state' => 'xyz' 

), $params );

return $this->url . $this->oauthURL . '?' . http_build_query ( $params );

}

/**

* 获取请求token的url

*

* @param $data['code'] 调用oauth时返回的code        

* @param $data['scope'] 调用oauth时返回的scope        

* @return string

*/

public function getAccessTokenURL($data) {

$params = array_merge ( array ( 

'client_id' => $this->client_id , 

'client_secret' => $this->client_secret , 

'grant_type' => 'authorization_code' 

), $data );

return $this->url . $this->accessTokenURL . '?' . http_build_query ( $params );

}

/**

* 获取请求token的

*

* @param

*         $data['code']

* @param $data['client_secret'] 应用用户秘钥        

* @param $data['client_id'] 应用用户名        

* @param $data['grant_type'] 类型        

* @return array

*/

public function getAccessToken($url, $data) {

$data = array_merge ( array ( 

'client_id' => $this->client_id , 

'client_secret' => $this->client_secret , 

'grant_type' => 'authorization_code' 

), $data );

$ret = $this->getResource ( $url, $data, "POST" );

return $ret;

}

/**

* 根据 refresh_token 重新生成 access_token

*

* @param $data['client_secret'] 应用用户秘钥

* @param $data['client_id'] 应用用户名

* @param $data['refresh_token'] refresh_token

* @param $data['grant_type'] 类型

* @return array

*/

public function getRefreshToken($data) {

$data = array_merge ( array (

'client_id' => $this->client_id ,

'client_secret' => $this->client_secret ,

'grant_type' => 'refresh_token'

), $data );

$ret = $this->getResource ( $this->url . $this->refreshURL, $data, "POST" );

return $ret;

}

/**

* 发起一个HTTP/HTTPS的请求

*

* @param $url 接口的URL        

* @param $params 接口参数

*         array('content'=>'test', 'format'=>'json');

* @param $method 请求类型

*         GET|POST

* @param $extheaders 扩展的包头信息

*         比如 $extheaders = array("authorization : Bearer $access_token");

* @param $multi 图片信息        

* @return string

*/

public function getResource($url, $params, $method = "GET", $extheaders = array(), $multi = false) {

if (! function_exists ( 'curl_init' ))

exit ( 'Need to open the curl extension' );

$method = strtoupper ( $method );

$ci = curl_init ();

curl_setopt ( $ci, CURLOPT_USERAGENT, 'PHP-SDK OAuth2.0' );

curl_setopt ( $ci, CURLOPT_CONNECTTIMEOUT, 3 );

curl_setopt ( $ci, CURLOPT_TIMEOUT, 3 );

curl_setopt ( $ci, CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $ci, CURLOPT_SSL_VERIFYPEER, false );

curl_setopt ( $ci, CURLOPT_SSL_VERIFYHOST, false );

curl_setopt ( $ci, CURLOPT_HEADER, 1 );

// curl_setopt ( $ci, CURLOPT_HEADER, false );

curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method);

$headers = ( array ) $extheaders;

$headers = array_merge ( array (

"X-Forwarded-For: ".$this->getIp()

), $headers );

switch ($method) {

case 'POST' :

curl_setopt ( $ci, CURLOPT_POST, TRUE );

if (! empty ( $params )) {

if ($multi) {

foreach ( $multi as $key => $file ) {

$params [$key] = '@' . $file;

}

curl_setopt ( $ci, CURLOPT_POSTFIELDS, $params );

$headers [] = 'Expect: ';

} else {

curl_setopt ( $ci, CURLOPT_POSTFIELDS, http_build_query ( $params ) );

}

}

break;

case 'DELETE' :

case 'PUT' :

curl_setopt ( $ci, CURLOPT_POSTFIELDS, http_build_query ( $params ) );//设置提交的字符串

break;

case 'GET' :

if (! empty ( $params )) {

$url = $url . (strpos ( $url, '?' ) ? '&' : '?') . (is_array ( $params ) ? http_build_query ( $params ) : $params);

}

break;

}

curl_setopt ( $ci, CURLINFO_HEADER_OUT, TRUE );

curl_setopt ( $ci, CURLOPT_URL, $url );

if ($headers) {

curl_setopt ( $ci, CURLOPT_HTTPHEADER, $headers );

}

$response = curl_exec ( $ci );

// $response['tmpInfo'] = curl_exec ( $ci );

// $response['getinfo'] = curl_getinfo($ci);

curl_close ( $ci );

$result = explode("\r\n\r\n", $response, 2);

$headArr = explode("\n",$result[0]);

$ret = array(

'status' => '200',

'header' => $headArr,

'content' => $result[1]

);

return $ret;

}

// Figure out requester's IP to shipt it to X-Forwarded-For

public function getIp(){

$ip = '';

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

$ip = $_SERVER['HTTP_CLIENT_IP'];

//echo "HTTP_CLIENT_IP: ".$ip;

} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

//echo "HTTP_X_FORWARDED_FOR: ".$ip;

} else {

$ip = $_SERVER['REMOTE_ADDR'];

//echo "REMOTE_ADDR: ".$ip;

}

return $ip;

}

}


 

 

首先在YII2里面装Oauth主键

具体参考  http://bshaffer.github.io/oauth2-server-php-docs/

我这里用 composer 安装  


{
    "require": {
        "bshaffer/oauth2-server-php": "~1.7",
        ...     },
    ... }


然后 安装/vendor/bshaffer/oauth2-server-php

在  components新建一个My_oauth.php   参考  http://www.wulinlw.org/post-511.html


<?php


namespace app\components;


use OAuth2;

use Yii;

use app\models\clients;


class My_oauth{

public $server = "";

public $storage = "";

function server() {

$dsn = Yii::$app->db->dsn;

$username = Yii::$app->db->username;

$password = Yii::$app->db->password;

// error reporting (this is a demo, after all!)

ini_set ( 'display_errors', 1 );

error_reporting ( E_ALL );

// Autoloading (composer is preferred, but for this example let's just do this)

// require_once('../src/OAuth2/Autoloader.php');

OAuth2\Autoloader::register ();

// $dsn is the Data Source Name for your database, for exmaple "mysql:dbname=my_oauth2_db;host=localhost"

$this->storage = new OAuth2\Storage\Pdo ( array ( 

'dsn' => $dsn , 

'username' => $username , 

'password' => $password 

) );

// Pass a storage object or array of storage objects to the OAuth2 server class

$config = array ( 

"access_lifetime" => 7200 

);

$server = new OAuth2\Server ( $this->storage, $config );

// Add the "Client Credentials" grant type (it is the simplest of the grant types)

$server->addGrantType ( new OAuth2\GrantType\ClientCredentials ( $this->storage ) );

// Add the "Authorization Code" grant type (this is where the oauth magic happens)

$server->addGrantType ( new OAuth2\GrantType\AuthorizationCode ( $this->storage ) );

// add the grant type to your OAuth server

$server->addGrantType ( new OAuth2\GrantType\RefreshToken ( $this->storage, array ( 

"always_issue_new_refresh_token" => true , 

"unset_refresh_token_after_use" => true , 

"refresh_token_lifetime" => 2419200 

) ) );

$this->server = $server;

}

/*

* 访问api前检查AccessToken

*/

function checkAccessToken(){

// Handle a request for an OAuth2.0 Access Token and send the response to the client

if (! $this->server->verifyResourceRequest ( OAuth2\Request::createFromGlobals ())) {

// header('HTTP/1.1 403 Forbidden');

$return = [

'status' => '401',

'message' => 'AccessToken Unauthorized '

];

// echo json_encode ($return );

$this->server->getResponse()->setParameters($return);

$this->server->getResponse()->setStatusCode(401);

$this->server->getResponse()->send();

exit;

}

}

/*

* 访问api前检查AccessToken

*/

function checkScope($client_id,$scope){

$M_clients = new clients();

$getScope = $M_clients->getClientsByClientId($client_id);

$scopeArr = explode(" ",$getScope['scope']);

if(!in_array($scope, $scopeArr)){

// header('HTTP/1.1 403 Forbidden');

$return = [

'status' => '401',

'message' => 'Scope Unauthorized '

];

// echo json_encode ($return );

$this->server->getResponse()->setParameters($return);

$this->server->getResponse()->setStatusCode(401);

$this->server->getResponse()->send();

exit;

}

}

// Figure out requester's IP to shipt it to X-Forwarded-For

public function getIp(){

$ip = '';

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

$ip = $_SERVER['HTTP_CLIENT_IP'];

//echo "HTTP_CLIENT_IP: ".$ip;

} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

//echo "HTTP_X_FORWARDED_FOR: ".$ip;

} else {

$ip = $_SERVER['REMOTE_ADDR'];

//echo "REMOTE_ADDR: ".$ip;

}

return $ip;

}

}


然后 在 Controller新建OauthController .php 控制器


<?php


namespace app\controllers;


use Yii;

use yii\web\Controller;

use OAuth2;

use app\components\My_oauth;

use app\components\OP_CAS;



class OauthController extends Controller{

public $enableCsrfValidation = false;

public $layout = false;

public $server = "";

public $storage = "";

public $My_oauth = "";

function init() {

$this->My_oauth = new My_oauth ();

$this->My_oauth->server ();

$this->server = $this->My_oauth->server;

$this->storage = $this->My_oauth->storage;

}

/*

* 跳转 传递get 然后验证用户的资料在回调 返回code

*/

function actionIndex() {

$req = yii::$app->request;

$request = OAuth2\Request::createFromGlobals ();

$response = new OAuth2\Response ();

// validate the authorize request

if (! $this->server->validateAuthorizeRequest ( $request, $response )) {

$response->send ();

die ();

}

$urlGet ['response_type'] = $req->get ( "response_type" );

$urlGet ['client_id'] = $req->get ( "client_id" );

$urlGet ['state'] = $req->get ( "state" );

$ticket = $req->get ( "ticket", "" );

if ($ticket) {

$op_cas = new OP_CAS ( 'login.gamebar.com', 'gb', 1 );

$userinfo = $op_cas->get_userinfo ();

if ($userinfo ['username'] && $userinfo ['uid']) {

$this->server->handleAuthorizeRequest ( $request, $response, true ,$userinfo ['uid']);

$url = $response->getHttpHeader ( 'Location' );

$this->redirect ( $url );

}

} else {

return $this->render ( 'index' );

}

}

/*

* 接口

* 参数

* $data['grant_type'] = 'authorization_code';   //类型

*  $data['client_id'] = 'testclient';            //应用id

*  $data['client_secret'] = 'testpass';          //应用秘钥

*  $data['code'] = $code;                        //code

*  返回   json  数据 

*/

function actionToken() {

$ret = $this->server->handleTokenRequest ( OAuth2\Request::createFromGlobals () );

$ret = substr ( $ret, strpos ( $ret, '{' ) -1 );

return $ret;

}

/*

* 接口

* 参数   $data['access_token'];   //access_token值   http header "Authorization : Bearer ".$data ['access_token'],

* 返回 access_token

*/

function actionResource() {

//获取 访问的model和action

$requestedRoute = Yii::$app->requestedRoute;

//获取 AccessTokenData 值

$getAccessTokenData =  $this->server->getAccessTokenData(OAuth2\Request::createFromGlobals () );

//验证  传来的access_token是否正确

$this->My_oauth->checkAccessToken();

//根据 client_id  查询  scope  是否有访问权限

$this->My_oauth->checkScope($getAccessTokenData['client_id'],$requestedRoute);

//获取access_token

return json_encode ( array ( 

'success' => '200' , 

'message' => 'You accessed my APIs!' 

) );

}

/*

* 接口   RefreshToken 

* $data['grant_type'] = 'refresh_token';   //类型

* $data['client_id'] = 'testclient';            //应用id

* $data['client_secret'] = 'testpass';          //应用秘钥

* 参数   $data['access_token'];   //access_token值

* 返回  array

*/

function actionRefresh(){

$ret = $this->server->handleTokenRequest ( OAuth2\Request::createFromGlobals () );

$ret = substr ( $ret, strpos ( $ret, '{' ) -1 );

return $ret;

}

}




以上只是零散的实现代码 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Yii2】在程序里面切换数据库连接

Continue Read..

 

      我做了一个 oauth  需要有个后台来管理  后期 可能会部署多个oauth  但是只想用一个后台来管理  这样 就需要后台可以切换数据库

比如  我后台模板里面有2个按钮  DB1 对应 oauth1的数据库  DB2  对应oauth2的数据库   这样 我点击DB1的时候 后台显示的是oauth1的数据   点击DB2显示oauth2的数据  

你们可能会想到  在oauth表里面建一个字段 来区分  这样做 所有的 oauth还是在一个数据库  

我这里要做的是不同的 oauth在不同的数据库 

 

首先在 在 web.php里面 写一个默认 oauth数据库配置  

'dbconfig' => [

'class' => 'yii\db\Connection',

'dsn' => 'mysql:host=localhost;dbname=my_oauth_admin',

'username' => 'root',

'password' => '******',

'charset' => 'utf8',

],

'db' => [

'class' => 'yii\db\Connection',

'dsn' => 'mysql:host=localhost;dbname=my_oauth2_db',

'username' => 'root',

'password' => '******',

'charset' => 'utf8',

],

'redis'=>[

'class'=>'yii\redis\Connection',

'hostname'=>'127.0.0.1',

'port'=>6379,

'database'=>6,

],

dbconfig  这个数据库是来管理 oauth数据库的配置文件  

标红的 是默认 oauth配置

redis  是用来缓存的 免得每次都查询 dbconfig  oauth的 数据

 

 

然后在 /components文件里面   用 composer创建的 YII 没有这个文件夹  自己手动新建一个 

然后新建一个 MyDb.php

<?php

 

namespace app\components;

 

use Yii;

use app\models\dbconfig;

 

class MyDb{

function getDbconfig() {

$dbConfig = Yii::$app->redis->get ( yii::$app->params ['dbConfig'] );

$dbConfigArr = json_decode ( $dbConfig, true );

if (empty ( $dbConfigArr )) {

$M_dbconfig = new dbconfig ();

$getDbconfig = $M_dbconfig->getDbconfig ();

foreach ( $getDbconfig as $k => $v ) {

$dbConfigArr [$v ['id']] = $v;

}

Yii::$app->redis->set ( yii::$app->params ['dbConfig'], json_encode ( $dbConfigArr ) );

}

return $dbConfigArr;

}

function getDb() {

                //这里就是来新建一个 自己的数据库连接

$dbconfig_id = Yii::$app->session->get ( "dbconfig_id" );

$getDbconfig = $this->getDbconfig ();

$host = $getDbconfig [$dbconfig_id] ['host'];

$dbname = $getDbconfig [$dbconfig_id] ['dbname'];

$username = $getDbconfig [$dbconfig_id] ['username'];

$password = $getDbconfig [$dbconfig_id] ['password'];

$charset = $getDbconfig [$dbconfig_id] ['charset'];

$connection  = new \yii\db\Connection ( [

'dsn' => "mysql:host=$host;dbname=$dbname" ,

'username' => $username ,

'password' => $password ,

'charset' => $charset

] );

$connection->open ();

return $connection;

}

}

//这个是 model dbconfig

<?php

namespace app\models;

// use yii\base\Model;

use Yii;

use yii\db\ActiveRecord;

 

class dbconfig extends ActiveRecord{

/**

*

* @return string 返回该AR类关联的数据表名

*/

public static function tableName() {

return 'dbconfig';

}

/*

* 根据 所有数据

*/

function getDbconfig() {

$sql = "select * from dbconfig order by id asc";

$command = yii::$app->dbconfig->createCommand ( $sql );

return $command->queryAll ();

}

}




以上就是将所有的oauth的数据库配置存入redis  方便以后读取


然后模板里面写2个按钮

<li><a href="/dbconfig/index/?id=1">DB1</a></li>
<li><a href="/dbconfig/index/?id=2">DB2</a></li>

然后新建一个DbconfigController.php的控制器

<?php

 

namespace app\controllers;

 

use Yii;

use yii\web\Controller;

use app\models\dbconfig;

 

class DbconfigController extends Controller{

public $enableCsrfValidation = false;

public $layout = 'gb_main';

function actionIndex(){

$request = Yii::$app->request;

$id = $request->get("id","");

yii::$app->session->set("dbconfig_id",$id);

$this->redirect("/admin/index/");

}

}

 

这个控制器很简单  就是将选中的 数据库 ID  存入session里面

 

接下来就是切换数据库  

比如我现在有一个 clients.php model  

<?php

 

namespace app\models;

// use yii\base\Model;

use Yii;

use yii\db\ActiveRecord;

use app\components\MyDb;

 

class clients extends ActiveRecord{

public $db = null;

public static $table = '';

function init() {

$this->db = static ::getDb();

}

public static function getDb() {

$dbconfig_id = Yii::$app->session->get ( "dbconfig_id" );

if (empty ( $dbconfig_id )) {

return \Yii::$app->db; // 使用名为 "db" 的应用组件

} else {

$MyDb = new MyDb ();

return $MyDb->getDb ();

}

}

}

 

这里需要注意   ActiveRecord  里面一个 getDB方法  是用来修改调用数据库的 

其他调用和原来的一样 

 点击查看原图

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【curl】实现 GET POST PUT DELETE

Continue Read..
/**
* 发起一个HTTP/HTTPS的请求
*
* @param $url 接口的URL        
* @param $params 接口参数
*         array('content'=>'test', 'format'=>'json');
* @param $method 请求类型
*         GET|POST
* @param $extheaders 扩展的包头信息
*         比如 $extheaders = array("authorization : Bearer $access_token");
* @param $multi 图片信息        
* @return string
*/
public function getResource($url, $params, $method = "GET", $extheaders = array(), $multi = false) {
if (! function_exists ( 'curl_init' ))
exit ( 'Need to open the curl extension' );
$method = strtoupper ( $method );
$ci = curl_init ();
curl_setopt ( $ci, CURLOPT_USERAGENT, 'PHP-SDK OAuth2.0' );
curl_setopt ( $ci, CURLOPT_CONNECTTIMEOUT, 3 );
curl_setopt ( $ci, CURLOPT_TIMEOUT, 3 );
curl_setopt ( $ci, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $ci, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ci, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt ( $ci, CURLOPT_HEADER, 1 );
// curl_setopt ( $ci, CURLOPT_HEADER, false );
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method);
$headers = ( array ) $extheaders;
$headers = array_merge ( array (
"X-Forwarded-For: ".$this->getIp()
), $headers );
switch ($method) {
case 'POST' :
curl_setopt ( $ci, CURLOPT_POST, TRUE );
if (! empty ( $params )) {
if ($multi) {
foreach ( $multi as $key => $file ) {
$params [$key] = '@' . $file;
}
curl_setopt ( $ci, CURLOPT_POSTFIELDS, $params );
$headers [] = 'Expect: ';
} else {
curl_setopt ( $ci, CURLOPT_POSTFIELDS, http_build_query ( $params ) );
}
}
break;
case 'DELETE' :
case 'PUT' :
curl_setopt ( $ci, CURLOPT_POSTFIELDS, http_build_query ( $params ) );//设置提交的字符串
break;
case 'GET' :
if (! empty ( $params )) {
$url = $url . (strpos ( $url, '?' ) ? '&' : '?') . (is_array ( $params ) ? http_build_query ( $params ) : $params);
}
break;
}
curl_setopt ( $ci, CURLINFO_HEADER_OUT, TRUE );
curl_setopt ( $ci, CURLOPT_URL, $url );
if ($headers) {
curl_setopt ( $ci, CURLOPT_HTTPHEADER, $headers );
}
$response = curl_exec ( $ci );
// $response['tmpInfo'] = curl_exec ( $ci );
// $response['getinfo'] = curl_getinfo($ci);
curl_close ( $ci );
$result = explode("\r\n\r\n", $response, 2);
$headArr = explode("\n",$result[0]);
$ret = array(
'status' => '200',
'header' => $headArr,
'content' => $result[1]
);
return $ret;
}



使用方法
include 'oauth_sdk_php.php';
$oauth = new OAuth ( 'testclient', 'testpass' );
$params = array();
$params['cuzn'] = 134;
// $url = "http://www.cuzn-api.com/api/apiput/";
$url = "http://www.yy-oauth.com/api/apiput/";
// $url = "http://www.cuzn-api.com/api/test/";
$extheaders = array(
"Authorization : Bearer 556d288d1a86ede26e8670ee05eb326cc2eab8c0"
);
$put = $oauth->getResource($url, $params ,"PUT",$extheaders);
var_dump($put);

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权