首页 > 编程技术 > php

PHP curl函数的使用示例 模拟curl请求

发布时间:2016-11-25 16:46

PHP curl函数是可以模仿用户进行访问页面了,下面来给各位介绍一下工作中常用的到的PHP curl函数示例

PHP有着很好的curl机制,但是用起来总是不那么的令人满意,因为它需要好几步的操作和,好多难记的参数,这里我将php的curl封装了一下,使它不那么的复杂:

 代码如下 复制代码

<?php
/**
 * php模拟curl请求
 *
 * @param string $url     请求的url
 * @param string $method  请求的方法, 默认POST
 * @param array  $data    请求传递的数据
 * @param array  $header  请求设置的头信息
 * @param int    $head    是否打印头信息
 * @param int    $body    是否打印body信息
 * @param int    $timeout 设置超时时间
 *
 * @return array
 */
function curl($url,$method="POST",$data=array(),$header=array(),$head=0,$body=0,$timeout = 30)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    if (strpos($url, "https") !== false ) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        if (isset($_SERVER['HTTP_USER_AGENT'])) {
            curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        }
    }
    if (!empty($header)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    switch ($method) {
    case 'POST':
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        break;
    case 'GET':
        break;
    case 'PUT':
        curl_setopt($ch, CURLOPT_PUT, 1);
        curl_setopt($ch, CURLOPT_INFILE, '');
        curl_setopt($ch, CURLOPT_INFILESIZE, 10);
        break;
    case 'DELETE':
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
        break;
    default:
        break;
    }

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, $head);
    curl_setopt($ch, CURLOPT_NOBODY, $body);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rtn = curl_exec($ch); //获得返回
    if (curl_errno($ch)) {
        echo 'Errno'.curl_error($ch);//捕抓异常
    }
    curl_close($ch);
    return $rtn;
}
?>

文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。

将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查看php日志,

[25-Sep-2014 20:15:21] WARNING: [pool www] child 9617 said into stderr: “NOTICE: PHP message: PHP Fatal error:  Call to undefined function mb_convert_encoding() in /data/htdocs/xx.php on line 13″

发现函数mb_convert_encoding没定义,看着像某个模块没装,google了把,要装个mbstring扩展,之前都是一下装好多扩展(虽然不知道这个扩展是干啥的,按照网络文档来),现在是要应用需要哪个装哪个,逼格略有提高(至少这样能让我知道哪个模块是干啥的)。

mb-convert-encoding
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )

将 string 类型 str 的字符编码从可选的 from_encoding 转换到 to_encoding。

官网文档  http://php.net/manual/zh/function.mb-convert-encoding.php 需要安装mbstring扩展库,如果已经编译好的php可以这样热编译下

 代码如下 复制代码


cd /tmp/php-5.3.28/ext/mbstring/
usr/local/services/php/bin/phpize
./configure --with-php-config=/usr/local/services/php/bin/php-config
make && make install
vim /usr/local/services/php/etc/php.ini
extension="/usr/local/services/php/lib/php/extensions/no-debug-non-zts-20090626/mbstring.so";
 iconv
string iconv ( string in_charset, string out_charset, string str )

iconv函数库能够完成各种字符集间的转换
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failu

官网地址  http://php.net/manual/zh/book.iconv.php

已经安装好php的,同样也可以使用上面的方法安装iconv模块

mb_convert_encoding例子
mb_convert_encoding这个函数是用来转换编码的。英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码

 
做一个GBK To UTF-8

 代码如下 复制代码
<?php
header(“content-Type: text/html; charset=Utf-8″);
echo mb_convert_encoding(“???S我的友仔”, “UTF-8″, “GBK”);
?>

再来个GB2312 To Big5

 代码如下 复制代码

<?php
header(“content-Type: text/html; charset=big5″);
echo mb_convert_encoding(“你是我的朋友”, “big5″, “GB2312″);
?>

mb_strtolower() – 使字符串小写
mb_strtoupper() – 使字符串大写
strtolower() – 将字符串转化为小写
strtoupper() – 将字符串转化为大写
ucfirst() – 将字符串的首字母转换为大写
ucwords() – 将字符串中每个单词的首字母转换为大写
 

iconv例子

把gb2312置换成utf-8:

 代码如下 复制代码

$text=iconv("GB2312","UTF-8",$text);

在用$text=iconv(“UTF-8″,”GB2312″,$text)过程中,如果遇到一些特别字符时,如:”—”,英文名中的”.”等等字符,转换就断掉了。这些字符后的文字都没法继续转换了。

针对这的问题,可以用如下代码实现:

 代码如下 复制代码

$text=iconv("UTF-8","GBK",$text);

你没有看错,就这么简单,不使用gb2312,而写成GBK,就可以了。

还有一种方法,第二个参数,加上//IGNORE,忽略错误,如下:

 代码如下 复制代码

iconv("UTF-8","GB2312//IGNORE",$data);

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。

 代码如下 复制代码


$content = iconv("GBK", "UTF-8″, $content);
$content = mb_convert_encoding($content, "UTF-8″, "GBK");

在php中serialize()与unserialize()函数是一对函数,下面本文章就来为各位同学介绍serialize()与unserialize()函数的使用例子,希望能帮助到各位。

php函数serialize():

这个函数作用就是序列化数据,返回一个可存储的字符串,该函数有利于存储或传递PHP的值,同时不丢失其类型和结构。所以我们在cms数据库里面经常看到这样的结构。

一般,我们将复杂或者数据量多而没有必要分开存储的数据封装成一个多维数组通过serialize()转成字符串,然后存进数据库,需要的时候再拿出来转成数组再用,而拿出了转成数组用的就是php的unserialize(),前面多了一个un嘛。直接上例子:

 代码如下 复制代码

$a=array("周","满","和","个人","博客","www.111cn.net","周满和","个人博客");
$b=serialize($a);
print_r($b);
echo "<br/>";
$c=unserialize($b);
print_r($c);

输出结果是:

//经过serialize序列化之后得到的数据,也是存这个进数据库
a:8:{i:0;s:3:"周";i:1;s:3:"满";i:2;s:3:"和";i:3;s:6:"个人";i:4;s:6:"博客";i:5;s:20:"www.111cn.net";i:6;s:9:"周满和";i:7;s:12:"个人博客";}
 
//经过unserialize()反序列化得到的数据,和之前的$a数组结构一样吧
Array ( [0] => 周 [1] => 满 [2] => 和 [3] => 个人 [4] => 博客 [5] => www.111cn.net [6] => 周满和 [7] => 个人博客 )

在上一个复杂一点的二维数组的例子:

 代码如下 复制代码

$a1=array(
    'name'=>array("周","满",'和'),
    'name_weburl'=>array("周满和","www.111cn.net"),
    'all'=>array('周满和个人博客'=>'www.111cn.net')
);
$b1=serialize($a1);
print_r($b1);
echo "<br/>";
$c1=unserialize($b1); 
print_r($c1);

输出结果是:


//经过serialize序列化之后得到的数据,也是存这个进数据库
a:3:{s:4:"name";a:3:{i:0;s:3:"周";i:1;s:3:"满";i:2;s:3:"和";}s:11:"name_weburl";a:2:{i:0;s:9:"周满和";i:1;s:20:"www.111cn.net";}s:3:"all";a:1:{s:21:"周满和个人博客";s:20:"www.111cn.net";}}
 
//经过unserialize()反序列化得到的数据,和之前的$a数组结构一样吧
Array ( [name] => Array ( [0] => 周 [1] => 满 [2] => 和 ) [name_weburl] => Array ( [0] => 周满和 [1] => www.111cn.net ) [all] => Array ( [周满和个人博客] => www.111cn.net ) )

图片裁剪是根据用户提供的坐标然后在指定图片上利用图片裁剪函数imagecopyresampled进行图片剪切了,下面来看一个例子。

代码如下所示:

 代码如下 复制代码

<?php
    //在一个大的背景图片中裁剪出指定区域的图片,以jpeg图片格式为例
    function cut($filename,$x,$y,$width,$height){
        $back = imagecreatetruecolor($width, $height);
        //创建一个可以保存裁剪后图片的资源
        $cutimg = imagecreatetruecolor($width, $height);
        //使用imagecopyresampled()函数对图片进行裁剪
        imagecopyresampled($cutimg,$back,0,0,$x,$y,$width,$height,$width,$height);
        //保存裁剪 后的图片,如果不想覆盖图片可以为裁剪后的图片加上前缀
        imagejpeg($cutimg,$filename);
        imagedestroy($cutimg);
        imagedestroy($back);
    }
 
    cut("brophp.jpg", 50, 50, 200, 200);
?>

下面本文章给大家简单的介绍一下PHP数组连接和拆分函数array_combine()和array_slice()用法,希望例子能帮助到各位同学哦。

一提起数组,可能多PHP初学者会觉得难,但开发一些高级应用的时候,又离不开数组的使用。下面就来说下,PHP使用array_combine()函数来连接数组、用array_slice()函数来拆分数组。
一、连接数组
array array_combine(array keys,array values)
本函数会返回一个新数组,由一组提交的键和对应的值组成。

下面来看一个实例:

 代码如下 复制代码

<?php
$name = array("apple", "banana", "orange");
$color = array("red", "yellow", "orange");
$fruit = array_combine($name, $color);
print_r($fruit);
// 输出结果为:
// Array ( [apple] => red [banana] => yellow [orange] => orange )
?>

需要注意:使用array_combine()连接数组时,两个数组必须大小相同,不能为空。

二、拆分数组:

主要是使用array_slice()函数,它将返回数组中的一部分,从键offset开始,到offset+length位置结束。其形式:
array array_slice (array array, int offset[,int length])

下面来看一个例子:

 代码如下 复制代码

<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
$subset = array_slice($fruits, 3);
print_r($subset);
// 输出结果为:
// Array ( [0] => Pear [1] => Grape [2] => Lemon [3] => Watermelon )
?>

使用负长度:

 代码如下 复制代码
<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
$subset = array_slice($fruits, 2, -2);
print_r($subset);
// 输出结果:
// Array ( [0] => Orange [1] => Pear [2] => Grape )
?>

需要注意的是:offset 为正值时,拆分将从距数组开头的offset 位置开始;如果offset 为负值,则拆分从距数组末尾的offset 位置开始。如果省略了可选参数length,则拆分将从offset 开始,一直到数组的最后一个元素。如果给出了length 且为正数,则会在距数组开头的offset+length 位置结束。相反,如果给出了length且为负数,则在距数组开头的count(input_array)-|length|位置结束。

标签:[!--infotagslink--]

您可能感兴趣的文章: