php 手机归属地查询函数详解

 更新时间:2016年11月25日 15:44  点击:1563
本文章来给各位同学介绍一个自己写的php 手机归属地查询函数,原理很简单,实现也不难,相信大家都看的懂。
 代码如下 复制代码


function get_area($mob){
$mob=substr($mob,0,7);
if(
$handle=@fopen('mob.dat','rb'))
{
@flock($handle,LOCK_SH);
$string=@fread($handle,@filesize('mob.dat'));
@fclose($handle);
}
$string=strstr($string,$mob);
$num=strpos($string,"n");
$end=substr($string,0,$num);
list($a,$area)=explode(",",$end);
return $area;
} //demo

echo get_area('13000000000');


归属地数据文件下载:mob.dat

http://l4.yunpan.cn/lk/QvYCBFP6TVBjy

下面小编来给各位同学介绍几个遍历目录的方法,这里可以遍历目录及目录及其它中的文件了,如果你对此有兴趣不防进入参考。

遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的。PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴。
下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋有所帮助。

//本函数可以列出指定目录下所有的文件(包括子目录下的)

 代码如下 复制代码

function getfiles($path){
foreach(scandir($path) as $afile)
{

if($afile=='.'||$afile=='..') continue;
if(is_dir($path.'/'.$afile))
{
getfiles($path.'/'.$afile);
} else {
echo $path.'/'.$afile.'<br />';
}
}
} //简单的demo,列出当前目录下所有的文件

getfiles(__DIR__);

scandir() 是返回指定目录下所有的文件和目录组成的数组,在PHP中,还提供了一个灰常强大的函数glob(),glob()有2个参数,至于第2个参数是可选的,稍后再讲。 直接来看,用glob()怎么遍历目录的。

//
//可以看出,glob()返回的内容中已经过滤掉了'.'和'..',其中*表示遍历目录下所有文件。相应的,如果改为*.txt,则会遍历目录下所的txt文件。是不是很方便呢?它的方便之处可不止这一点,据元芳说,这里面还藏着一个天大的秘密,是什么呢?以后再说,有兴趣的话,可以给我留言交流。

 代码如下 复制代码

function getfiles($path){
foreach(glob($path) as $afile){
if(is_dir($afile))
{ getfiles($afile.'/*'); } else { echo $afile.'<br />'; }
}
} //简单的demo,列出当前目录下所有的文件
getfiles(__DIR__);0

既然说用 *.txt,就会遍历目录下所的txt文件,那如果我想让它同时遍历某几种格式的文件呢?怎么办?肯定有童鞋想到用数组了,然后很快的写出来替换进去{*.txt,*.jpg,*.zip,...},当然也很快地发现,程序返回false,什么都得不到。不要失望,这涉及到了刚才所说的第2个可选参数,这个参数是用来改变glob的行为的,具体都有些什么,可以查阅PHP手册,这里不多讲,只说一个GLOB_BRACE,这是用来扩充 {a,b,c,...} 来匹配 'a','b' 或 'c',...的。用法如下:foreach(glob($path.'/{*.txt,*.jpg,*.zip,...}', GLOB_BRACE) as $fileName){...}

至于完整的遍历目录下所有的指定文件类型函数,我们可以看下面实例


遍历文件夹及子文件夹所有文件

 代码如下 复制代码


<html>
    <body>
        <?php
            function traverse($path = '.') {
                $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
                while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
                    $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
                    if($file == '.' || $file == '..') {
                        continue;
                    } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
                        echo 'Directory ' . $file . ':<br>';
                        traverse($sub_dir);
                    } else {    //如果是文件,直接输出
                        echo 'File in Directory ' . $path . ': ' . $file . '<br>';
                    }
                }
            }
           
            traverse('xxtt');
        ?>
    </body>
</html>

一些常用的实例

 代码如下 复制代码

<?php
$dir="E:/video"; //这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo "文件:<br>";
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") {
echo $file; //输出文件名
}
}
closedir($handle);
?>

用了这段代码遍历所有文件,帮我把所有文件名存为一个数组。

 代码如下 复制代码

<?php
$s=explode("/n",trim(`dir/b e://video`));
print_r($s);
?>

<?php
$dir="E:/video"; //这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo "文件:<br>";
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") {
$file=$file.','; //输出文件名
$file=explode(',',$file);
}
}
print_r($file);//输出的就是数组了
closedir($handle);
?>

<?php
$dir="."; //这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo "文件:<br>";
//定义用于存储文件名的数组
$array_file = array();
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") {
$array_file[] = $file; //输出文件名
}
}
closedir($handle);

print_r("<pre>");
print_r($array_file);
print_r("</pre>");
?>

本文章来给各位同学介绍一下关于PHP判断字符串编码是否为utf-8的程序代码,如果你有兴趣不防进入参考。

我们以前常用mb_detect_encoding()此函数检测字符编码

 

 代码如下 复制代码
//判断字符串是什么编码
if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) {
}
else {//如果是gb2312 的就转换为utf8的
$tag = mb_convert_encoding($tag, 'UTF-8', 'GB2312');
}

 $keytitle = “%D0%BE%C6%AC”;时。检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
怎么解决呢,我的办法是:

 代码如下 复制代码

$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK','UTF-8');

个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。

上面办法还是解决不了,下面又找到了一个解决方法。

例1

 代码如下 复制代码

// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($word)
{
if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)
{
return true;
}
else
{
return false;
}
} // function is_utf8

如果你使用的是php5.4之前的就只能通过ajax,iframe或一些其它办法来实现,如果你使用的是php5.4我们可以使用session.upload_progress 来快速结合js实现文件上传进度条。


下面我们就详细介绍一下 PHP 5.4 的这个 session.upload_progress 新特性。

原理介绍
当浏览器向服务器端上传一个文件时,PHP将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中。然后,随着上传的进行,周期性的更新session中的信息。这样,浏览器端就可以使用Ajax周期性的请求一个服务器端脚本,由该脚本返回session中的进度信息;浏览器端的Javascript即可根据这些信息显示/更新进度条了。

那么,文件上传信息具体是如何存储的?我们要如何访问它呢?下面我们来详细说明。

PHP 5.4 中引入了一些配置项(在php.ini中进行设置)

session.upload_progress.enabled = "1"
session.upload_progress.cleanup = "1"
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"
其中enabled控制upload_progress功能的开启与否,默认开启;cleanup 则设置当文件上传的请求提交完成后,是否清除session的相关信息,默认开启。

prefix 和 name 两项用来设置进度信息在session中存储的变量名/键名。关于这两项的详细使用见下文。

freq 和 min_freq 两项用来设置服务器端对进度信息的更新频率。合理的设置这两项可以减轻服务器的负担。

在上传文件的表单中,需要为该次上传设置一个标识符,并在接下来的过程中使用该标识符来引用进度信息。具体的,在上传表单中需要有一个隐藏的input,它的name属性为php.ini中 session.upload_progress.name 的值;它的值为一个由你自己定义的标识符。如下:

<input type="hidden"
    name="<?php echo ini_get('session.upload_progress.name'); ?>"
    value="test" />
接到文件上传的表单后,PHP会在$_SESSION变量中新建键,键名是一个将session.upload_progress.prefix的值与上面你自定义的标识符连接后得到的字符串,可以这样得到:

$name = ini_get('session.upload_progress.name');
$key = ini_get('session.upload_progress.prefix') . $_POST[$name];

$_SESSION[$key]; // 这里就是此次文件上传的进度信息了
$_SESSION[$key]这个变量的结构是这样的:

$_SESSION["upload_progress_test"] = array(
 "start_time" => 1234567890,   // 开始时间
 "content_length" => 57343257, // POST请求的总数据长度
 "bytes_processed" => 453489,  // 已收到的数据长度
 "done" => false,              // 请求是否完成 true表示完成,false未完成

 // 单个文件的信息
 "files" => array(
  0 => array( ... ),
  // 同一请求中可包含多个文件
  1 => array( ... ),
 )
);这样,我们就可以使用其中的 content_length 和 bytes_processed 两项来得到进度百分比。

程序示例
原理介绍完了,下面我们来完整的实现一个基于PHP和Javascript的文件上传进度条。

本示例的代码仓库: Github: pureweber/samples/php-upload-progress

上传表单
首先,来编写我们的上传表单页面 index.php,代码如下:

<form id="upload-form"
    action="upload.php" method="POST" enctype="multipart/form-data"
    style="margin:15px 0" target="hidden_iframe">

        <input type="hidden" name="" value="test" />
        <p><input type="file" name="file1" /></p>
        <p><input type="submit" value="Upload" /></p>
</form>    

<iframe id="hidden_iframe" name="hidden_iframe" src="about:blank" style="display:none;"></iframe>

<div id="progress" class="progress" style="margin-bottom:15px;display:none;">
        <div class="bar" style="width:0%;"></div>
        <div class="label">0%</div>
</div>注意表单中的session.upload_progress.name隐藏项,值设置为了test。表单中仅有一个文件上传input,如果需要,你可以添加多个。

这里需要特别注意一下表单的target属性,这里设置指向了一个当前页面中的iframe。这一点很关键,通过设置target属性,让表单提交后的页面显示在iframe中,从而避免当前的页面跳转。因为我们还得在当前页面显示进度条呢。

#progress 这个div是用来显示进度条的。

注意 别忘了在index.php的最开始加上session_start()。

处理上传的文件
表单的action指向upload.php,我们在upload.php中处理上传的文件,将它转存到当前目录。这里与通常情况下的上传处理没有区别。

if(is_uploaded_file($_FILES['file1']['tmp_name'])){
        move_uploaded_file($_FILES['file1']['tmp_name'], "./{$_FILES['file1']['name']}");
}
?>Ajax获取进度信息
这一步是关键,我们需要建立一个 progress.php 文件,用来读取session中的进度信息; 然后我们在 index.php 中增加Javascript代码,向 progress.php 发起Ajax请求,然后根据获得的进度信息更新进度条。

progress.php 的代码如下:

session_start();

$i = ini_get('session.upload_progress.name');

$key = ini_get("session.upload_progress.prefix") . $_GET[$i];

if (!empty($_SESSION[$key])) {
        $current = $_SESSION[$key]["bytes_processed"];
        $total = $_SESSION[$key]["content_length"];
        echo $current < $total ? ceil($current / $total * 100) : 100;
}else{
        echo 100;
}
?>在这里我们获得$_SESSION变量中的进度信息,然后输出一个进度百分比。

在 index.php 中,我们将如下代码添加到页面底部 (为简便,这里使用jQuery):

function fetch_progress(){
        $.get('progress.php',{ '' : 'test'}, function(data){
                var progress = parseInt(data);

                $('#progress .label').html(progress + '%');
                $('#progress .bar').css('width', progress + '%');

                if(progress < 100){
                        setTimeout('fetch_progress()', 100);
                }else{
            $('#progress .label').html('完成!');
        }
        }, 'html');
}

$('#upload-form').submit(function(){
        $('#progress').show();
        setTimeout('fetch_progress()', 100);
});
当#upload-form被提交时,我们把进度条显示出来,然后反复调用 fetch_progress() 获得进度信息,并更新进度条,直到文件上传完毕,显示'完成!'。

Done!

完整代码见: Github: pureweber/samples/php-upload-progress

注意事项
input标签的位置
name为session.upload_progress.name的input标签一定要放在文件input <input type="file" /> 的前面。

取消上传
通过设置 $_SESSION[$key]['cancel_upload'] = true 可取消当次上传。但仅能取消正在上传的文件和尚未开始的文件。已经上传成功的文件不会被删除。

setTimeout vs. setInterval
应该通过 setTimeout() 来调用 fetch_progress(),这样可以确保一次请求返回之后才开始下一次请求。如果使用 setInterval() 则不能保证这一点,有可能导致进度条出现'不进反退'。

本文章来给各位同学介绍一下关于微信公众平台之CURL应用实例,如果你碰到此类问题不防进入参考一下吧。

这几天工作有大量用curl,curl就是模拟浏览器来传输数据,他支持很多的协议HTPP,HTTPS,FTP….等等很多协议,在做采集和模拟用户来执行一些操作的时候非常有用的。
使用CURL主要是四个步骤:
1、初始化URL
2、设置请求的一些参数(COOKIE,HEAD…)
3、执行请求
4、关闭资源
先说一个简单的采集,一般在获取一个网页的内容的时候我们最方便就是使用file_get_contents()函数来获取,现在我们通过CURL来抓取一个网页的内容

 代码如下 复制代码

$ch = curl_init();//初始化一个资源
       curl_setopt($ch,CURLOPT_URL,”http://www.mapenggang.com”);//设置我们要获取的网页
       curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//关闭直接输出
       $string= curl_exec($ch);
       curl_close($ch);


注:重点在于curl_setopt()这个函数的第二个参数(下面会有一些常用的资料)
这样我们就可以得到这个网页的内容,如果只有CURL来做些这就大材小用了,CURL其实可以用来做更加神奇的东西。
最近刚到一家创业型的新公司(尼玛,选择这个公司真的是比较纠结,因为手里有好几个offer,但是这边给的工资待遇很低,因为创业型公司吗。我也不知道为什么会选择这家公司,反正是为了选择这家公司,朋友都很不解,其实我也不知道为什么会选择这家,其他公司的工资大概是这家公司的两倍,希望这次没有选错,不然.想死的心都会有,说了这么多废话),做的是现在比较火的微信公众平台的开发,因为微信现在开放的接口特别的少,所以通过接口得到的东西特别的少(尼玛,小马哥你什么时候多放的借口啊!),但是官方提供的操作平台有很多接口中没有数据所以,我们需要去自己去找一些数据了,好吧,主角上场CURL。

首先公众平台是要登录才能访问,那我就先登录吧(废话),首先需要抓包分析一下正常提交数据,这里我就不截图了(博客在bae平台上,编辑器还没有时间去理他,不太好使),通过抓包分析得出,微信的公众平台使用的是ajax登录,且密码在提交之前已经进行了md5加密(好像正规应该叫md5散列把,而且标准的MD5散列应该是128位的,不过为了方便存储和传输就现在最多的就是32和16位了,刚了解,惭愧),还有很重要一点就是,微信公众平台采用的是https协议进行登录的。最爽的一点就是不用验证码,sogay。不然老费劲了,分析到这就可以了。Come on !!!!

 代码如下 复制代码


$password = md5($password);//因为刚才抓包发现是md5加密过的,所以这里我们提前把密码加密号


$post = "username={$username}&pwd={$password}&f=json&imgcode=";
$loginUrl = "https://mp.weixin.qq.com/cgi-bin/login?";//微信登录的地址

//这里的头信息都是必须要设置的,这些你都可以在刚才抓包的时候获取到


$headerArray = array(
'Accept:application/json, text/javascript, */*',
'Content-Type:application/x-www-form-urlencoded',
'Referer:https://mp.weixin.qq.com/'
);

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$loginUrl);
// 对认证证书来源的检查,0表示阻止对证书的合法性的检查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//关闭直接输出
curl_setopt($ch,CURLOPT_POST,1);//使用post提交数据
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);//设置 post提交的数据
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36');//设置用户代理
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);//设置头信息

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);//设置cookie的保存目录,这里很重要,你懂的(cookie你都不存,你以为你是麻花腾啊!)
$loginData = curl_exec($ch);//这里会返回token,需要处理一下。

//获取到token的值

$loginData = json_decode($loginData,true);

$token = explode("=",$loginData['ErrMsg']);

$token = array_pop($token);

echo "登录微信系统成功<br />";


curl_close($ch);


 

上边就是登录微信公众平台的代码了,经测试十分好用+_+。
这几天微信公众平台接触的比较多,这个只是万里长征的第一步,后边我会分享一下如何将微信的fakeid 和 openid对应起来,实现自己可以自己的平台上显示用户的完整信息(据我了解,网上现在对于如何fakeid 和 openid对应来没有很好的解决方案,通过好几天的奋斗现在已经可以对应起来的,比较麻烦,且已有的用户是无法对起来的(其实这个理论上是可以的,但是没有做出来不乱说,其实是没有时间去做这个,有机会可以尝试,不过实现需要已有系统的支持,也就是你现在的系统必须记录了和用回的聊天记录(我说什么了?我什么都没有说!)))。
体育老师啊,你说你不好好带你的体育课,没有跑来教我们语文,这几天接触不少能写的东西太多了,所以想到那就写到那了,有点乱,几天主要用的是CURL,所以今天说点CURL的实例,正好就把手头的登录微信公众平台的东西写上来了,CURL到此结束,后边我可能会写更多关于微信公众平台的东西。
附:

选项

可选value

备注

CURLOPT_AUTOREFERER

当根据Location:重定向时,自动设置header中的Referer:信息。

 

CURLOPT_BINARYTRANSFER

在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。

 

CURLOPT_COOKIESESSION

启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie

 

CURLOPT_CRLF

启用时将Unix的换行符转换成回车换行符。

 

CURLOPT_DNS_USE_GLOBAL_CACHE

启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认启用。

 

CURLOPT_FAILONERROR

显示HTTP状态码,默认行为是忽略编号小于等于400HTTP信息。

 

CURLOPT_FILETIME

启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。 curl_getinfo().

 

CURLOPT_FOLLOWLOCATION

启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。

 

CURLOPT_FORBID_REUSE

在完成交互以后强迫断开连接,不能重用。

 

CURLOPT_FRESH_CONNECT

强制获取一个新的连接,替代缓存中的连接。

 

CURLOPT_FTP_USE_EPRT

启用时当FTP下载时,使用EPRT (LPRT)命令。设置为FALSE时禁用EPRTLPRT,使用PORT命令 only.

 

CURLOPT_FTP_USE_EPSV

启用时,在FTP传输过程中回复到PASV模式前首先尝试EPSV命令。设置为FALSE时禁用EPSV命令。

 

CURLOPT_FTPAPPEND

启用时追加写入文件而不是覆盖它。

 

CURLOPT_FTPASCII

CURLOPT_TRANSFERTEXT的别名。

 

CURLOPT_FTPLISTONLY

启用时只列出FTP目录的名字。

 

CURLOPT_HEADER

启用时会将头文件的信息作为数据流输出。

 

CURLINFO_HEADER_OUT

启用时追踪句柄的请求字符串。

PHP 5.1.3 开始可用。CURLINFO_前缀是故意的(intentional)

CURLOPT_HTTPGET

启用时会设置HTTPmethodGET,因为GET是默认是,所以只在被修改的情况下使用。

 

CURLOPT_HTTPPROXYTUNNEL

启用时会通过HTTP代理来传输。

 

CURLOPT_MUTE

启用时将cURL函数中所有修改过的参数恢复默认值。

 

CURLOPT_NETRC

在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。

 

CURLOPT_NOBODY

启用时将不对HTML中的BODY部分进行输出。

 

CURLOPT_NOPROGRESS

启用时关闭curl传输的进度条,此项的默认设置为启用。

Note:PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。

 

 

CURLOPT_NOSIGNAL

启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。

cURL 7.10时被加入。

CURLOPT_POST

启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

 

CURLOPT_PUT

启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILECURLOPT_INFILESIZE

 

CURLOPT_RETURNTRANSFER

curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

 

CURLOPT_SSL_VERIFYPEER

禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE

cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。

CURLOPT_TRANSFERTEXT

启用后对FTP传输使用ASCII模式。对于LDAP,它检索纯文本信息而非HTML。在Windows系统上,系统不会把STDOUT设置成binary模式。

 

CURLOPT_UNRESTRICTED_AUTH

在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。

 

CURLOPT_UPLOAD

启用后允许文件上传。

 

CURLOPT_VERBOSE

启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。

 

对于下面的这些option的可选参数,value应该被设置一个integer类型的值:

 

选项

可选value

备注

CURLOPT_BUFFERSIZE

每次获取的数据中读入缓存的大小,但是不保证这个值每次都会被填满。

cURL 7.10中被加入。

CURLOPT_CLOSEPOLICY

不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY_,但是cURL暂时还不支持。

 

CURLOPT_CONNECTTIMEOUT

在发起连接前等待的时间,如果设置为0,则无限等待。

 

CURLOPT_CONNECTTIMEOUT_MS

尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

cURL 7.16.2中被加入。从PHP 5.2.3开始可用。

CURLOPT_DNS_CACHE_TIMEOUT

设置在内存中保存DNS信息的时间,默认为120秒。

 

CURLOPT_FTPSSLAUTH

FTP验证方式:CURLFTPAUTH_SSL (首先尝试SSL)CURLFTPAUTH_TLS (首先尝试TLS)CURLFTPAUTH_DEFAULT (cURL自动决定)

cURL 7.12.2中被加入。

CURLOPT_HTTP_VERSION

CURL_HTTP_VERSION_NONE(默认值,让cURL自己判断使用哪个版本)CURL_HTTP_VERSION_1_0 (强制使用 HTTP/1.0)CURL_HTTP_VERSION_1_1 (强制使用 HTTP/1.1)

 

CURLOPT_HTTPAUTH

使用的HTTP验证方法,可选的值有:CURLAUTH_BASICCURLAUTH_DIGESTCURLAUTH_GSSNEGOTIATECURLAUTH_NTLMCURLAUTH_ANYCURLAUTH_ANYSAFE。 可以使用|位域()操作符分隔多个值,cURL让服务器选择一个支持最好的值。CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

 

CURLOPT_INFILESIZE

设定上传文件的大小限制,字节(byte)为单位。

 

CURLOPT_LOW_SPEED_LIMIT

当传输速度小于CURLOPT_LOW_SPEED_LIMIT(bytes/sec)PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

 

CURLOPT_LOW_SPEED_TIME

当传输速度小于CURLOPT_LOW_SPEED_LIMIT(bytes/sec)PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

 

CURLOPT_MAXCONNECTS

允许的最大连接数量,超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接。

 

CURLOPT_MAXREDIRS

指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。

 

CURLOPT_PORT

用来指定连接端口。(可选项)

 

CURLOPT_PROTOCOLS

CURLPROTO_*的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见CURLOPT_REDIR_PROTOCOLS. 可用的协议选项为:CURLPROTO_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALL

cURL 7.19.4中被加入。

CURLOPT_PROXYAUTH

HTTP代理连接的验证方式。使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项。对于代理验证只有CURLAUTH_BASICCURLAUTH_NTLM当前被支持。

cURL 7.10.7中被加入。

CURLOPT_PROXYPORT

代理服务器的端口。端口也可以在CURLOPT_PROXY中进行设置。

 

CURLOPT_PROXYTYPE

不是CURLPROXY_HTTP (默认值) 就是CURLPROXY_SOCKS5

cURL 7.10中被加入。

CURLOPT_REDIR_PROTOCOLS

CURLPROTO_*中的位域值。如果被启用,位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议。这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILESCP之外的全部协议。这个和7.19.4预发布版本种无条件地跟随所有支持的协议有一些不同。关于协议常量,请参照CURLOPT_PROTOCOLS

cURL 7.19.4中被加入。

CURLOPT_RESUME_FROM

在恢复传输时传递一个字节偏移量(用来断点续传)。

 

CURLOPT_SSL_VERIFYHOST

1 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)2 检查公用名是否存在,并且是否与提供的主机名匹配。

 

CURLOPT_SSLVERSION

使用的SSL版本(2 3)。默认情况下PHP会自己检测这个值,尽管有些情况下需要手动地进行设置。

 

CURLOPT_TIMECONDITION

如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过,则使用CURL_TIMECOND_IFMODSINCE返回页面,如果没有被修改过,并且CURLOPT_HEADERtrue,则返回一个"304 Not Modified"headerCURLOPT_HEADERfalse,则使用CURL_TIMECOND_IFUNMODSINCE,默认值为CURL_TIMECOND_IFUNMODSINCE

 

CURLOPT_TIMEOUT

设置cURL允许执行的最长秒数。

 

CURLOPT_TIMEOUT_MS

设置cURL允许执行的最长毫秒数。

cURL 7.16.2中被加入。从PHP 5.2.3起可使用。

CURLOPT_TIMEVALUE

设置一个CURLOPT_TIMECONDITION使用的时间戳,在默认状态下使用的是CURL_TIMECOND_IFMODSINCE

 

对于下面的这些option的可选参数,value应该被设置一个string类型的值:

 

选项

可选value

备注

CURLOPT_CAINFO

一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。 .

 

CURLOPT_CAPATH

一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。

 

CURLOPT_COOKIE

设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")

 

CURLOPT_COOKIEFILE

包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。

 

CURLOPT_COOKIEJAR

连接结束后保存cookie信息的文件。

 

CURLOPT_CUSTOMREQUEST

使用一个自定义的请求信息来代替"GET""HEAD"作为HTTP请求。这对于执行"DELETE" 或者其他更隐蔽的HTTP请求。有效值如"GET""POST""CONNECT"等等。也就是说,不要在这里输入整个HTTP请求。例如输入"GET /index.html HTTP/1.0rnrn"是不正确的。

Note: 在确定服务器支持这个自定义请求的方法前不要使用。

 

 

CURLOPT_EGDSOCKET

类似CURLOPT_RANDOM_FILE,除了一个Entropy Gathering Daemon套接字。

 

CURLOPT_ENCODING

HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity""deflate""gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。

cURL 7.10中被加入。

CURLOPT_FTPPORT

这个值将被用来获取供FTP"POST"指令所需要的IP地址。"POST"指令告诉远程服务器连接到我们指定的IP地址。这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的IP地址。

 

CURLOPT_INTERFACE

网络发送接口名,可以是一个接口名、IP地址或者是一个主机名。

 

CURLOPT_KRB4LEVEL

KRB4 (Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序)"clear""safe""confidential""private".。如果字符串和这些都不匹配,将使用"private"。这个选项设置为NULL时将禁用KRB4 安全认证。目前KRB4 安全认证只能用于FTP传输。

 

CURLOPT_POSTFIELDS

全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&…'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data

 

CURLOPT_PROXY

HTTP代理通道。

 

CURLOPT_PROXYUSERPWD

一个用来连接到代理的"[username]:[password]"格式的字符串。

 

CURLOPT_RANDOM_FILE

一个被用来生成SSL随机数种子的文件名。

 

CURLOPT_RANGE

"X-Y"的形式,其中XY都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"

 

CURLOPT_REFERER

HTTP请求头中"Referer: "的内容。

 

CURLOPT_SSL_CIPHER_LIST

一个SSL的加密算法列表。例如RC4-SHATLSv1都是可用的加密列表。

 

CURLOPT_SSLCERT

一个包含PEM格式证书的文件名。

 

CURLOPT_SSLCERTPASSWD

使用CURLOPT_SSLCERT证书需要的密码。

 

CURLOPT_SSLCERTTYPE

证书的类型。支持的格式有"PEM" (默认值), "DER""ENG"

cURL 7.9.3中被加入。

CURLOPT_SSLENGINE

用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。

 

CURLOPT_SSLENGINE_DEFAULT

用来做非对称加密操作的变量。

 

CURLOPT_SSLKEY

包含SSL私钥的文件名。

 

CURLOPT_SSLKEYPASSWD

CURLOPT_SSLKEY中指定了的SSL私钥的密码。

Note: 由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。

 

 

CURLOPT_SSLKEYTYPE

CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为"PEM"(默认值)"DER""ENG"

 

CURLOPT_URL

需要获取的URL地址,也可以在curl_init()函数中设置。

 

CURLOPT_USERAGENT

HTTP请求中包含一个"User-Agent: "头的字符串。

 

CURLOPT_USERPWD

传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"

[!--infotagslink--]

相关文章

  • 安卓手机app添加支付宝支付开发教程

    支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • PHP+Ajax手机发红包的程序例子

    PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 华为手机怎么恢复已卸载的应用?华为手机恢复应用教程

    华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
  • 破解安卓手机上的九宫格锁方法步骤

    很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
  • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

    华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • MyBatisPlus-QueryWrapper多条件查询及修改方式

    这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Oracle使用like查询时对下划线的处理方法

    这篇文章主要介绍了Oracle使用like查询时对下划线的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-16
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • 解决mybatis-plus 查询耗时慢的问题

    这篇文章主要介绍了解决mybatis-plus 查询耗时慢的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-04