jquery ajax三种方式异步提交表单

前端liuliangsong 发表了文章 • 0 个评论 • 189 次浏览 • 2017-09-08 13:39 • 来自相关话题

一、使用Html5 FormData对象的方式ajax异步提交数据和文件:  注意代码Jquery ajax的必须传参数processData: false,contentType: false,否则会报错:<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var data = new FormData($(".ajax_form")[0]);
$.ajax({
type: 'POST',
dataType: 'json',
processData: false, // 告诉jquery不要处理数据
contentType: false, // 告诉jquery不要设置contentType
data: data,
url: '/test_form.php',
success: function(json, textStatus, xhr) {
//.....省略...
},
error: function(xhr, textStatus, errorThrown) {}
})
})
})
</script>优点:简单好用,能直接ajax异步提交数据和文件;
缺点:部分浏览器支持不够好,如IE 10一下版本不支持;
 二、使用jquery serialize()函数构建数据或者手动构建数据对象方式:  本方式建议在只异步提交基本数据,不需要异步上传文件的情况下使用:<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var data = $(".ajax_form").serialize(); // str=aiezu.com&num=123456
//或者
var data = {str:$('[name="str"]').val(), num:$('[name="num"]').val()};
$.ajax({
type: 'POST',
dataType: 'json',
data: data,
url: '/test_form.php',
success: function(json, textStatus, xhr) {
//.....省略...
},
error: function(xhr, textStatus, errorThrown) {}
})
})
})
</script>优点:简单好用,几乎兼容所有浏览器;
缺点:无法ajax异步上传文件,只能异步提交基本数据;
 
三、使用jquery from插件来ajax异步提交数据和文件:<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<script src="https://cdn.bootcss.com/jquery.form/4.2.2/jquery.form.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var params = {
type: 'POST',
dataType: 'text',
url: '/test_form.php',
success: function(text, textStatus, xhr) {
var json = eval(json);
},
error: function(xhr, textStatus, errorThrown) {
}
}

$(".ajax_form").ajaxSubmit(params);
})
})
</script>优点:自动判断浏览器是否支持html5 FormData,支持直接使用FormData提交,不支持时会使用iframe方式伪装ajax 异步提交;
缺点:IE低版本响应类型只能是html、xml,否则会提示下载文件。 查看全部

一、使用Html5 FormData对象的方式ajax异步提交数据和文件:

  注意代码Jquery ajax的必须传参数processData: falsecontentType: false,否则会报错:
<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var data = new FormData($(".ajax_form")[0]);
$.ajax({
type: 'POST',
dataType: 'json',
processData: false, // 告诉jquery不要处理数据
contentType: false, // 告诉jquery不要设置contentType
data: data,
url: '/test_form.php',
success: function(json, textStatus, xhr) {
//.....省略...
},
error: function(xhr, textStatus, errorThrown) {}
})
})
})
</script>
优点:简单好用,能直接ajax异步提交数据和文件;
缺点:部分浏览器支持不够好,如IE 10一下版本不支持;
 

二、使用jquery serialize()函数构建数据或者手动构建数据对象方式:

  本方式建议在只异步提交基本数据,不需要异步上传文件的情况下使用:
<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var data = $(".ajax_form").serialize(); // str=aiezu.com&num=123456
//或者
var data = {str:$('[name="str"]').val(), num:$('[name="num"]').val()};
$.ajax({
type: 'POST',
dataType: 'json',
data: data,
url: '/test_form.php',
success: function(json, textStatus, xhr) {
//.....省略...
},
error: function(xhr, textStatus, errorThrown) {}
})
})
})
</script>
优点:简单好用,几乎兼容所有浏览器;
缺点:无法ajax异步上传文件,只能异步提交基本数据;
 
三、使用jquery from插件来ajax异步提交数据和文件:
<script src="http://lib.sinaapp.com/js/jquery/1.10/jquery-1.10.0.min.js"></script>
<script src="https://cdn.bootcss.com/jquery.form/4.2.2/jquery.form.min.js"></script>
<form class="ajax_form">
<input type="text" name="str" value="aiezu.com" />
<input type="text" name="num" value="123456" />
<input type="file" name="image" />
<button type="button" class="btn_submit">提交</button>
</form>
<script>
$(function() {
$(".btn_submit").on('click', function() {
var params = {
type: 'POST',
dataType: 'text',
url: '/test_form.php',
success: function(text, textStatus, xhr) {
var json = eval(json);
},
error: function(xhr, textStatus, errorThrown) {
}
}

$(".ajax_form").ajaxSubmit(params);
})
})
</script>
优点:自动判断浏览器是否支持html5 FormData,支持直接使用FormData提交,不支持时会使用iframe方式伪装ajax 异步提交;
缺点:IE低版本响应类型只能是html、xml,否则会提示下载文件。

纯CSS或js设置宽度溢出的图片水平居中(垂直居中同理)

前端liuliangsong 发表了文章 • 0 个评论 • 236 次浏览 • 2017-09-02 18:30 • 来自相关话题

  有时候,我们需要图片在容器中水平居中。当图片宽度大于容器宽度时,我们期望的是图片水平居中,图片两边多出的部分隐藏掉。但是,我们得到的结果却是显示了图片的左边部分,隐藏的全是图片右边多出的部分。如下图使示:


要达到溢出容器的图片水平居中,请看我们后面的介绍:
  一、CSS3的方式让溢出容器的图片居中对齐(适合移动端):  使用CSS的方式简单易用,缺点是有小部分PC浏览器不支持,如:IE6,7,8。当然如果是移动端,用次方式是非常不错了,手机浏览器基本上都能对CSS3完美支持。<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box img { position:absolute;left:50%;transform:translateX(-50%); }
</style>
</head>

<body>
<div class="demo-box">
<img src="images/400x200.jpg"/>
</div>
</body>
</html>
优点:代码最少;响应式,图片容器大小改变依然居中。缺点:部分老PC浏览器不能完美兼容。  二、纯CSS2的方式让溢出图片居中对齐(推荐):  上面的方式中使用了CSS3的“transform:translateX(-50%);”,所以浏览器的兼容存在一定问题。这步的方法不使用任何CSS3属性,巧妙的实现溢出容器的图片水平垂直居中对齐,先看代码:<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box p { position:absolute;top:50%;left:50%;margin:0;padding:0; }
.demo-box img { position:absolute;top:-50%;left:-50%;display:block; }
.demo-box img.hide { visibility:hidden;position:static; }
</style>
</head>

<body>
<div class="demo-box">
<p>
<img class="hide" src="images/400x200.jpg"/>
<img src="images/400x200.jpg"/>
</p>
</div>

</body>
</html>优点:完美兼容所有浏览器;完美支持响应式,图片容积大小改变依然水平垂直居中。缺点:额外的代码。用法解析:  可以看出,本方法比上面的方法多出了一个p元素和一个有hide类的img元素,现在爱E族来给大家介绍下它们的作用和原理。含有类hide的img元素:此img元素设置了css值为"visibility:hidden;position:static;",它是不会显示的,作用是为了撑开p元素,使p元素保持与图片的宽高一致。p元素,此元素设置为绝对定位:top、left都设置为50%,使用p元素的左上角刚好在容器的正中间。实际显示的img元素:此元素也为绝对定位:top、left都设置为-50%,代表着实际显示的img元素相对于p元素左上的方向缩进50%。  
  
一句话来描述原理:使用一个img镜像元素来撑开p元素,然后p元素左上角对准容器的正中间,实际显示的img元素再向p的左上方向移动50%。
  三、使用js的方式:  要使用JS的方式来实现溢出容器的图片居中对齐,我们需要绑定图片的load事件,当图片加载完成了,我们在计算图片的宽度与容器的宽度的差值(同理、垂直居中计算高度),然后根据这个差值来设置css属性"left"。<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box img { position:absolute; height:100%; }
</style>
</head>

<body>
<div class="demo-box">
<img src="images/400x200.jpg"/>
</div>
<script>
$(function(){
$(".demo-box img").on("load", function(){
var box = $(this).parents("div");
var left = (box.width()-$(this).width())/2;
$(this).css("left", left);
})
})
</script>
</body>
</html>优点:兼容任何支持js的浏览器。缺点:额外的js代码;不是响应式的,图片容积尺寸改变时,必须重新计算居中。
  如有问题或者更多的方法推荐,爱E族欢迎大家在下面评论区留言沟通交流。  四、附件下载:本文介绍的三种方法展示效果下载:   查看全部
  有时候,我们需要图片在容器中水平居中。当图片宽度大于容器宽度时,我们期望的是图片水平居中,图片两边多出的部分隐藏掉。但是,我们得到的结果却是显示了图片的左边部分,隐藏的全是图片右边多出的部分。如下图使示:
img_overflow_center.png
要达到溢出容器的图片水平居中,请看我们后面的介绍:
  

一、CSS3的方式让溢出容器的图片居中对齐(适合移动端):

  使用CSS的方式简单易用,缺点是有小部分PC浏览器不支持,如:IE6,7,8。当然如果是移动端,用次方式是非常不错了,手机浏览器基本上都能对CSS3完美支持。
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box img { position:absolute;left:50%;transform:translateX(-50%); }
</style>
</head>

<body>
<div class="demo-box">
<img src="images/400x200.jpg"/>
</div>
</body>
</html>

优点:代码最少;响应式,图片容器大小改变依然居中。缺点:部分老PC浏览器不能完美兼容。  

二、纯CSS2的方式让溢出图片居中对齐(推荐):

  上面的方式中使用了CSS3的“transform:translateX(-50%);”,所以浏览器的兼容存在一定问题。这步的方法不使用任何CSS3属性,巧妙的实现溢出容器的图片水平垂直居中对齐,先看代码:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box p { position:absolute;top:50%;left:50%;margin:0;padding:0; }
.demo-box img { position:absolute;top:-50%;left:-50%;display:block; }
.demo-box img.hide { visibility:hidden;position:static; }
</style>
</head>

<body>
<div class="demo-box">
<p>
<img class="hide" src="images/400x200.jpg"/>
<img src="images/400x200.jpg"/>
</p>
</div>

</body>
</html>

优点:完美兼容所有浏览器;完美支持响应式,图片容积大小改变依然水平垂直居中。缺点:额外的代码。

用法解析:

  可以看出,本方法比上面的方法多出了一个p元素和一个有hide类的img元素,现在爱E族来给大家介绍下它们的作用和原理。
  1. 含有类hideimg元素:此img元素设置了css值为"visibility:hidden;position:static;",它是不会显示的,作用是为了撑开p元素,使p元素保持与图片的宽高一致。
  2. p元素,此元素设置为绝对定位:topleft都设置为50%,使用p元素的左上角刚好在容器的正中间。
  3. 实际显示的img元素:此元素也为绝对定位:topleft都设置为-50%,代表着实际显示的img元素相对于p元素左上的方向缩进50%。
  
  
一句话来描述原理:使用一个img镜像元素来撑开p元素,然后p元素左上角对准容器的正中间,实际显示的img元素再向p的左上方向移动50%。
  

三、使用js的方式:

  要使用JS的方式来实现溢出容器的图片居中对齐,我们需要绑定图片的load事件,当图片加载完成了,我们在计算图片的宽度与容器的宽度的差值(同理、垂直居中计算高度),然后根据这个差值来设置css属性"left"。
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<style type="text/css">
.demo-box { position:relative; width:200px;height:200px; overflow:hidden;}
.demo-box img { position:absolute; height:100%; }
</style>
</head>

<body>
<div class="demo-box">
<img src="images/400x200.jpg"/>
</div>
<script>
$(function(){
$(".demo-box img").on("load", function(){
var box = $(this).parents("div");
var left = (box.width()-$(this).width())/2;
$(this).css("left", left);
})
})
</script>
</body>
</html>
优点:兼容任何支持js的浏览器。缺点:额外的js代码;不是响应式的,图片容积尺寸改变时,必须重新计算居中。
  

如有问题或者更多的方法推荐,爱E族欢迎大家在下面评论区留言沟通交流。

  

四、附件下载:

本文介绍的三种方法展示效果下载:  

网站集成最新twitter第三方登录

编程语言llslx520 发表了文章 • 0 个评论 • 427 次浏览 • 2017-07-12 21:27 • 来自相关话题

一、获取twitter应用ID:     1、注册twitter账号:  打开https://twitter.com网站,注册twitter账号,并在个人中心的"设置与隐私"页中的"安全"设置中,绑定登录验证手机(只有绑定验证手机后才能注册twitter应用)。
  2、创建twitter应用:  登录网址 https://apps.twitter.com/ 点击"Create New App",创建一个新的应用。在创建应用时,需要填写"应用名称"、“应用描述“、”站点网址“、"回调URL"。



创建完twitter应用后,在应用的"Keys and Access Tokens"选项找到你的"Api Key"和"Api Secret"备用



 二、将twitter应用api key信息设置到统一登录平台:1、登录到herokuapp.com:  打开统一登录平台网站https://auth-server.herokuapp.com/,点击"Signin"按钮,使用任何一个第三方登录进行登录。   
 2、设置twitter应用api key信息:  在"Manage apps"部分,填写上面申请到的Twitter应用的"Api Key"和"Api Secret",其中"grant_url"可以不填,”reference“可随便填写,填写完成后点击保存:



  三、集成登录javascript代码:  将下面代码放到站点HTML文件的body标签内即可:<script src="//adodson.com/hello.js/dist/hello.all.js"></script>
<script>
// 设置第三方登录平台的应用app key
// 可以同时设置twitter、facebook、windows、google等多个第三方登录平台是app key
hello.init({
'twitter': 'HC9erGJFgWOh8af4GhKskYVPn' // 这里设置Twitter Api key
,'facebook': 'facebook app key...'
});

// 监听登录事件,登录成功返回的auth里面包含基本用户信息和accessToken信息
hello.on('auth.login', function(auth) {
alert(JSON.stringify(auth));
// 登录完成后获取当前登录用户完整信息
hello(auth.network).api('me').then(function(r) {
alert(JSON.stringify(r));
});
});

function tw_login() {
hello('twitter').login().then(function() {}, function(e) {});
}
</script>


<button class="twBtn" onclick="tw_login()">twitter</button>
<!--button class="twBtn" onclick="hello('twitter').login()">twitter</button-->  四、参考资料:Twitter应用创建:https://apps.twitter.com/统一登录平台:https://auth-server.herokuapp.com/Twitter Api文档:http://adodson.com/hello.js/#quick-start集成Facebook登录:网站集成Facebook第三方登录 查看全部

一、获取twitter应用ID:     

1、注册twitter账号:

  打开https://twitter.com网站,注册twitter账号,并在个人中心的"设置与隐私"页中的"安全"设置中,绑定登录验证手机(只有绑定验证手机后才能注册twitter应用)。
  

2、创建twitter应用:

  登录网址 https://apps.twitter.com/ 点击"Create New App",创建一个新的应用。在创建应用时,需要填写"应用名称"、“应用描述“、”站点网址“、"回调URL"。
创建Twitter应用.png

创建完twitter应用后,在应用的"Keys and Access Tokens"选项找到你的"Api Key"和"Api Secret"备用
创建Twitter应用-apiKey.png

 

二、将twitter应用api key信息设置到统一登录平台:

1、登录到herokuapp.com:

  打开统一登录平台网站https://auth-server.herokuapp.com/,点击"Signin"按钮,使用任何一个第三方登录进行登录。   
 

2、设置twitter应用api key信息:

  在"Manage apps"部分,填写上面申请到的Twitter应用的"Api Key"和"Api Secret",其中"grant_url"可以不填,”reference“可随便填写,填写完成后点击保存:
设置twitter第三方登录凭据.png

  

三、集成登录javascript代码:

  将下面代码放到站点HTML文件的body标签内即可:
<script src="//adodson.com/hello.js/dist/hello.all.js"></script>
<script>
// 设置第三方登录平台的应用app key
// 可以同时设置twitter、facebook、windows、google等多个第三方登录平台是app key
hello.init({
'twitter': 'HC9erGJFgWOh8af4GhKskYVPn' // 这里设置Twitter Api key
,'facebook': 'facebook app key...'
});

// 监听登录事件,登录成功返回的auth里面包含基本用户信息和accessToken信息
hello.on('auth.login', function(auth) {
alert(JSON.stringify(auth));
// 登录完成后获取当前登录用户完整信息
hello(auth.network).api('me').then(function(r) {
alert(JSON.stringify(r));
});
});

function tw_login() {
hello('twitter').login().then(function() {}, function(e) {});
}
</script>


<button class="twBtn" onclick="tw_login()">twitter</button>
<!--button class="twBtn" onclick="hello('twitter').login()">twitter</button-->
  

四、参考资料:

网站集成最新facebook第三方登录

编程语言liuliangsong 发表了文章 • 0 个评论 • 461 次浏览 • 2017-07-12 17:29 • 来自相关话题

  本文介绍如何在自己的网站集成facebook第三方登录,使用的是网站前端语言的Facebook Javascript SDK接口,它比使用其他网站后端语言的SDK更加简单方便。
 一、创建Facebook应用:  打开网址https://developers.facebook.com/apps/,使用facebook账号登录,然后按照下面过程创建一个Facebok应用。   点击【+添加新应用】安装,弹窗创建应用对话框;输入你要创建的应用名称,点击【创建应用编号】,完成创建应用;在选择商品页面中,选择【Facebook登录】,点击【Set up】;在选择平台页面中,选择【网络】,输入你的网址,点击【Save】保存即可;保存后,可继续按官网的介绍集成Facebook第三方登录,也可以按本站后面的介绍操作。 二、集成Facebook第三方登录到网站:1、放置网站Facebok第三方登录基础代码:  首先,我们需要在网站前端HTML页面的BODY标签中放置如下代码,加载Facebook javaScript SDK,一定得记得修改代码中的应用编号:<script>
window.fbAsyncInit = function() {
FB.init({
appId: '393455924363180', // 这里需要改成15位你创建的Facebook应用编号
cookie: true,
xfbml: true,
version: 'v2.8'
});
FB.AppEvents.logPageView();
};

(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script> 2、使用Facebook官方提供的登录按钮:  将下面HTML代码放到body中即可,其中chekcFBLoginStatus()为官方按钮登录完成后的回调函数 ,可以在此函数中记录用户ID,accessToken等。将用户ID作为参数,在数据库中的查询,以完成Facebook第三方登录:  <script>
// 使用官方按钮登录完成后的回调函数
function chekcFBLoginStatus() {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
alert(JSON.stringify(response));
console.log(JSON.stringify(response)); //将登录成功返回的用户ID等信息输出到控制台
} else {
alert('登录失败');
}
});
}
</script>
<fb:login-button scope="public_profile,email" onlogin="chekcFBLoginStatus();"></fb:login-button> 控制台输出结果:{
"status": "connected",
"authResponse": {
"accessToken": "EAAFl7ZBSl1bwBAIpYoLhZCul3mGouYYxgcuGENE2GblkMg83hee1IoEwUK6nMEJsiHmlbUIL4WviPMQCKvM9cqaLPjflhhlCIdaTkxUKKND1vu6lVACrfJGdeEaMKZBYl8nZAhxXqm3RgVhFO8xLmWAQuN5JhawuHT8F3G9zKyDa063qoR7GUVKqBw0pcDwZD",
"userID": "1103782483099761",
"expiresIn": 4405,
"signedRequest": "pZJYeUmr3vY8pAs3NQQh46-MFXUHs4quZ-xe84-FgpI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUMyY3FFa19HOTBQbkdQczk2bFJKOUVzUnhreVZwLVRlQ19oU3ZRTTJtRV9VSDdnamdNOFdLSE9IMW02WHoyWkFUendMbmQxeE8wWVd2UEdsX0xMYUU3dEhQSUh6dXdGQTJ6dFAtUGFGa1VYZW00M0llOGl3ZmtzM3Nla3AxNnpINm15LTQ4d1VyMkZKZE5fR0hjaFprZ2NFekU2cEpBLXMwWW1IemFMN3lEWjFQaURFNVZPc1NrRkt3cllMWjRzdUl4SDVNd3lPVk1YSXdVblJlSVJoNUIxcVVxbmI5SE4zZW5nczVSNEdzVXJoemZSYlRmU0h2cmFjZHptQTRBYXhWSlpHbVpoWUR2WDR3RVVSRFd6TE5INU45RFRnOGZpTGlBblZRQ215Ujk5LUhDV1REM2hVYmRsdWNsQ3VyaDl3ZDlfXzgwNVZZZlFaemFYNVl3OVVKcCIsImlzc3VlZF9hdCI6MTQ5OTg1NjM5NSwidXNlcl9pZCI6IjExMDM3ODI0ODMwOTk3NjEifQ"
}
} 3、使用用户自定义样式的按钮完成Facebook第三方登录:  Facebook的官方登录按钮,能调整的样式有限、可能不达到我们先需求,所有我们大都数时候会使用自定义的登录按钮。要使用自定义按钮,将下面代码追加到body中即可:<script>
function fb_login() {
FB.login(function(response) {
if (response.status === 'connected') {
alert(JSON.stringify(response));
console.log(JSON.stringify(response));
} else {
alert('登录失败');
}
}, {scope: 'public_profile,email'});
}
</script>
<button onclick="fb_login();">使用FB账号登录</button> 三、完成Facebook第三方登录后,调用API:  Facebook Javascript SDKd的Api接口十分简单好用,比如需要获取登录用户的Facebook资料,使用下面函数即可,其中fields参数代表需要返回的字段。FB.api('/me?fields=id,email,first_name,last_name,gender', function(response) {
console.log(JSON.stringify(response));
});控制台输入结果类似如下:{"id":"1103783283095761","email":"465272@qq.com","first_name":"爱E族","last_name":"aiezu.com","gender":"male"} 四、相关网站:Facebook应用管理:https://developers.facebook.com/appsFacebook Api接口列表:https://developers.facebook.com/docs/graph-api/reference/Facebook Javascript SDK文档: https://developers.facebook.com/docs/javascript集成Twitter登录:网站集成Twitter第三方登录 查看全部
  本文介绍如何在自己的网站集成facebook第三方登录,使用的是网站前端语言的Facebook Javascript SDK接口,它比使用其他网站后端语言的SDK更加简单方便。
 

一、创建Facebook应用:

  打开网址https://developers.facebook.com/apps/,使用facebook账号登录,然后按照下面过程创建一个Facebok应用。   
  1. 点击【+添加新应用】安装,弹窗创建应用对话框;
  2. 输入你要创建的应用名称,点击【创建应用编号】,完成创建应用;
  3. 在选择商品页面中,选择【Facebook登录】,点击【Set up】;
  4. 在选择平台页面中,选择【网络】,输入你的网址,点击【Save】保存即可;
  5. 保存后,可继续按官网的介绍集成Facebook第三方登录,也可以按本站后面的介绍操作。
 

二、集成Facebook第三方登录到网站:

1、放置网站Facebok第三方登录基础代码:

  首先,我们需要在网站前端HTML页面的BODY标签中放置如下代码,加载Facebook javaScript SDK,一定得记得修改代码中的应用编号
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '393455924363180', // 这里需要改成15位你创建的Facebook应用编号
cookie: true,
xfbml: true,
version: 'v2.8'
});
FB.AppEvents.logPageView();
};

(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
 

2、使用Facebook官方提供的登录按钮:

  将下面HTML代码放到body中即可,其中chekcFBLoginStatus()为官方按钮登录完成后的回调函数 ,可以在此函数中记录用户ID,accessToken等。将用户ID作为参数,在数据库中的查询,以完成Facebook第三方登录:  
<script>
// 使用官方按钮登录完成后的回调函数
function chekcFBLoginStatus() {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
alert(JSON.stringify(response));
console.log(JSON.stringify(response)); //将登录成功返回的用户ID等信息输出到控制台
} else {
alert('登录失败');
}
});
}
</script>
<fb:login-button scope="public_profile,email" onlogin="chekcFBLoginStatus();"></fb:login-button>
 控制台输出结果:
{
"status": "connected",
"authResponse": {
"accessToken": "EAAFl7ZBSl1bwBAIpYoLhZCul3mGouYYxgcuGENE2GblkMg83hee1IoEwUK6nMEJsiHmlbUIL4WviPMQCKvM9cqaLPjflhhlCIdaTkxUKKND1vu6lVACrfJGdeEaMKZBYl8nZAhxXqm3RgVhFO8xLmWAQuN5JhawuHT8F3G9zKyDa063qoR7GUVKqBw0pcDwZD",
"userID": "1103782483099761",
"expiresIn": 4405,
"signedRequest": "pZJYeUmr3vY8pAs3NQQh46-MFXUHs4quZ-xe84-FgpI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUMyY3FFa19HOTBQbkdQczk2bFJKOUVzUnhreVZwLVRlQ19oU3ZRTTJtRV9VSDdnamdNOFdLSE9IMW02WHoyWkFUendMbmQxeE8wWVd2UEdsX0xMYUU3dEhQSUh6dXdGQTJ6dFAtUGFGa1VYZW00M0llOGl3ZmtzM3Nla3AxNnpINm15LTQ4d1VyMkZKZE5fR0hjaFprZ2NFekU2cEpBLXMwWW1IemFMN3lEWjFQaURFNVZPc1NrRkt3cllMWjRzdUl4SDVNd3lPVk1YSXdVblJlSVJoNUIxcVVxbmI5SE4zZW5nczVSNEdzVXJoemZSYlRmU0h2cmFjZHptQTRBYXhWSlpHbVpoWUR2WDR3RVVSRFd6TE5INU45RFRnOGZpTGlBblZRQ215Ujk5LUhDV1REM2hVYmRsdWNsQ3VyaDl3ZDlfXzgwNVZZZlFaemFYNVl3OVVKcCIsImlzc3VlZF9hdCI6MTQ5OTg1NjM5NSwidXNlcl9pZCI6IjExMDM3ODI0ODMwOTk3NjEifQ"
}
}
 

3、使用用户自定义样式的按钮完成Facebook第三方登录:

  Facebook的官方登录按钮,能调整的样式有限、可能不达到我们先需求,所有我们大都数时候会使用自定义的登录按钮。要使用自定义按钮,将下面代码追加到body中即可:
<script>
function fb_login() {
FB.login(function(response) {
if (response.status === 'connected') {
alert(JSON.stringify(response));
console.log(JSON.stringify(response));
} else {
alert('登录失败');
}
}, {scope: 'public_profile,email'});
}
</script>
<button onclick="fb_login();">使用FB账号登录</button>
 

三、完成Facebook第三方登录后,调用API:

  Facebook Javascript SDKd的Api接口十分简单好用,比如需要获取登录用户的Facebook资料,使用下面函数即可,其中fields参数代表需要返回的字段。
FB.api('/me?fields=id,email,first_name,last_name,gender', function(response) {
console.log(JSON.stringify(response));
});
控制台输入结果类似如下:
{"id":"1103783283095761","email":"465272@qq.com","first_name":"爱E族","last_name":"aiezu.com","gender":"male"}
 

四、相关网站:

国内iphone ios app store审核ipv6被拒解决方案(IPv6隧道方式)

Objective-Cliuliangsong 发表了文章 • 0 个评论 • 341 次浏览 • 2017-06-26 22:00 • 来自相关话题

  由于苹果的应用审核策略升级,自2016年6月1日起,提交新版本的APP需要支持IPV6-Only的网络才能通过审核。而目前国内99%的网络不支持IPV6,甚至国内最大的云平台阿里云,由于无可用IPV6网络,干脆禁用了云服务器的IPV6模块,可见苹果给国内开发者扔下一个大大的难题。
  下面以CentOS 7.2为例,通过ipv6通道的方式,解决ios ipv6审核拒解的难题。
  一、开启服务器的IPV6模块(阿里云):  由于阿里云禁用了云服务器ECS的IPV6模块,所有我们需要先开启它:
1、修改/etc/sysctl.conf中ipv6的配置,将下面三行值设置为0,如下所示:net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0  
2、注释掉/etc/modprobe.d/disable_ipv6.conf文件中的内容,或者直接删除此文件。#alias net-pf-10 off
#options ipv6 disable=0  
3、修改/etc/sysconfig/network中的配置项NETWORKING_IPV6值为YES:NETWORKING_IPV6=yes  
4、重启服务器,查看IPV6模块是否开启成功:init 6ifconfig |grep inet6  二、创建IPV6隧道:  这里使用免费又好用的网站https://www.tunnelbroker.net/来创建IPV6隧道,创建前需免费注册账号,创建完账号后,开始执行下面操作:
1、创建隧道:点击“Create Regular Tunnel”,进入”Create New Tunnel“页面;输入你的web服务器的公网IP地址,并选择合适的隧道服务器地址,选择之前最好先对服务器ip进行ping测试,选择丢包率和延迟较小的服务器来创建,这直接决定你将来通过审核的成功率,我这里选择的是香港(Hong Kong, HK);点击”Create Tunnel“完成创建。
  
2、创建完成后,点击"Example Configurations"选项卡,在下拉菜单中选择”Linux-net-tools“,然后复制代码,在web服务器中执行:


执行完成后,输出ifconfig命令,即可查看到创建隧道后,本地服务器的ipv6地址:



 
3、至此,web服务器已经通过隧道的方式接入到IPV6网络了,可以使用ping6命令进行测试: ping6 ipv6.baidu.com
ping6 ipv6.google.com  三、开启Web服务的IPV6支持:1、apache修改配置文件,将Listen行修改为如下(vim /etc/httpd/conf/httpd.conf):Listen [::]:80  
2、nginx修改配置文件,将Listen行修改为如下:listen [::]:80;  四、添加域名的IPV6记录( aaaa记录):  在域名注册商网站,登录到域名管理后台,添加一条aaaa记录,记录名与ipv4名相同,记录值为上面web服务器的IPV6地址"2001:470:35:7ea::2"。如域名商不支持aaaa记录,可以将NS服务修改为DNSPOD的NS服务器,到dnspod上去进行添加。
  五、在线测试网站的IPV6支持:  打开网站http://ipv6-test.com/validate.php,输入域名进行测试,如前面两项校验通过,即可将app提交审核啦,欢迎留言交流。 查看全部
  由于苹果的应用审核策略升级,自2016年6月1日起,提交新版本的APP需要支持IPV6-Only的网络才能通过审核。而目前国内99%的网络不支持IPV6,甚至国内最大的云平台阿里云,由于无可用IPV6网络,干脆禁用了云服务器的IPV6模块,可见苹果给国内开发者扔下一个大大的难题。
  下面以CentOS 7.2为例,通过ipv6通道的方式,解决ios ipv6审核拒解的难题。
  

一、开启服务器的IPV6模块(阿里云):

  由于阿里云禁用了云服务器ECS的IPV6模块,所有我们需要先开启它:
1、修改/etc/sysctl.conf中ipv6的配置,将下面三行值设置为0,如下所示:
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
  
2、注释掉/etc/modprobe.d/disable_ipv6.conf文件中的内容,或者直接删除此文件。
#alias net-pf-10 off
#options ipv6 disable=0
  
3、修改/etc/sysconfig/network中的配置项NETWORKING_IPV6值为YES:
NETWORKING_IPV6=yes
  
4、重启服务器,查看IPV6模块是否开启成功:
init 6
ifconfig |grep inet6
  

二、创建IPV6隧道:

  这里使用免费又好用的网站https://www.tunnelbroker.net/来创建IPV6隧道,创建前需免费注册账号,创建完账号后,开始执行下面操作:
1、创建隧道:
  1. 点击“Create Regular Tunnel”,进入”Create New Tunnel“页面;
  2. 输入你的web服务器的公网IP地址,并选择合适的隧道服务器地址,选择之前最好先对服务器ip进行ping测试,选择丢包率和延迟较小的服务器来创建,这直接决定你将来通过审核的成功率,我这里选择的是香港(Hong Kong, HK);
  3. 点击”Create Tunnel“完成创建。

  
2、创建完成后,点击"Example Configurations"选项卡,在下拉菜单中选择”Linux-net-tools“,然后复制代码,在web服务器中执行:
详解通过ipv6隧道的方式解决ios_ipv6审核被拒.png
执行完成后,输出ifconfig命令,即可查看到创建隧道后,本地服务器的ipv6地址:
详解通过ipv6隧道的方式解决ios_ipv6审核被拒_02.png

 
3、至此,web服务器已经通过隧道的方式接入到IPV6网络了,可以使用ping6命令进行测试: 
ping6 ipv6.baidu.com
ping6 ipv6.google.com
  

三、开启Web服务的IPV6支持:

1、apache修改配置文件,将Listen行修改为如下(vim /etc/httpd/conf/httpd.conf):
Listen [::]:80
  
2、nginx修改配置文件,将Listen行修改为如下:
listen       [::]:80;
  

四、添加域名的IPV6记录( aaaa记录):

  在域名注册商网站,登录到域名管理后台,添加一条aaaa记录,记录名与ipv4名相同,记录值为上面web服务器的IPV6地址"2001:470:35:7ea::2"。如域名商不支持aaaa记录,可以将NS服务修改为DNSPOD的NS服务器,到dnspod上去进行添加。
  

五、在线测试网站的IPV6支持:

  打开网站http://ipv6-test.com/validate.php,输入域名进行测试,如前面两项校验通过,即可将app提交审核啦,欢迎留言交流。

PHP curl curl_setopt()函数选项合集

PHPllslx520 发表了文章 • 0 个评论 • 536 次浏览 • 2017-06-05 20:04 • 来自相关话题

组选项名称值类型描述网址CURLOPT_URLstring【必须】指定需要获取的URL地址,也可以在curl_init()函数初始化会话的时候作为参数传入。CURLOPT_PATH_AS_ISbool是否不处理URL中的"../"。(curl 7.42.0、PHP 7.0.7以上版本)CURLOPT_DEFAULT_PROTOCOLstring指定URL不带协议的时候,使用的默认协议(PHP 7.0.7以上版本)。CURLOPT_HTTP_VERSIONinteger使用的HTTP版本:CURL_HTTP_VERSION_NONE (默认值,让 curl选择),CURL_HTTP_VERSION_1_0 (强制使用 HTTP/1.0)或CURL_HTTP_VERSION_1_1 (强制使用 HTTP/1.1)。  CURLOPT_PORTinteger指定连接端口,替换 URL 中的主机和端口。CURLOPT_CONNECT_TOarray连接到指定的主机和端口,替换 URL 中的主机和端口。接受指定字符串格式的数组: HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT。( curl 7.49.0, PHP 7.0.7以上版本)CURLOPT_CONNECT_ONLYbool是否只做代理、验证、连接过程,但不传输数据。此选项用于 HTTP、SMTP 和 POP3。重

向CURLOPT_FOLLOWLOCATIONbool【常用】是否根据服务器返回的http头"Location:"信息,自定重定向到相关页面。CURLOPT_MAXREDIRSinteger指定递归重定向的最大次数。CURLOPT_AUTOREFERERbool"Location:"重定向时,是否自动设置header的"Referer:"信息。CURLOPT_UNRESTRICTED_AUTHbool是否CURLOPT_FOLLOWLOCATION重定向 header 中的多个 location 时继续发送用户名和密码信息,哪怕主机名已改变。CURLOPT_POSTREDIRinteger位掩码, 设置当CURLOPT_FOLLOWLOCATION时, 么情况下需要再次 HTTP POST 到重定向网址:
1 (301 永久重定向);
2 (302 Found)
4 (303 See Other) ,
可以使用组合的形式:,如: 1 | 2。请

头CURLOPT_HTTPGETboolTRUE时会设置http的METHOD为GET(默认即为GET,所有只有METHOD被修改时才使用此选项)。CURLOPT_CUSTOMREQUESTstringHTTP请求时,指定自定义的Method,如:GET、POST、PUT、DELETE等。CURLOPT_USERAGENTstring【常用】设置HTTP请求头"User-Agent: "字段值信息,用来伪装浏览器信息,让curl抓取更像真实的浏览器访问。CURLOPT_REFERERstring【常用】设置HTTP请求头"Referer:" 字段值信息,用来伪装来路信息,让curl抓取更像真实的浏览器访问。CURLOPT_ENCODINGstring设置HTTP请求头中"Accept-Encoding: "的值,支持的编码有"identity"、"deflate"和"gzip",如果为空字符串"",会发送所有支持的编码类型 (curl 7.10以上版本)。CURLOPT_HTTPHEADERarray【常用】以数组的形式设置http请求头信息,如:
array('Referer: http://aiezu.com', 'Accept-Language: zh-CN,zh;q=0.8')cook
iesCURLOPT_COOKIEstring【常用】设定HTTP请求头中"Cookie: "部分的内容,多个cookie用分号分隔,分号后带一个空格,如: "name=aiezu; site=aiezu.com"。CURLOPT_COOKIEFILEstring【常用】从指定文件中读取cookie,并发送到http服务,文件中的cookie必须为Netscape格式。CURLOPT_COOKIEJARstring【常用】将HTTP响应头中的cookie保存到指定文件。CURLOPT_COOKIESESSIONbool是否开启新的一次cookie会话,忽略之前存储的cookie会话信息。代理CURLOPT_HTTPPROXYTUNNELbool设置为TRUE时会通过指定的HTTP代理来传输。CURLOPT_PROXYstring【常用】指定代理信息,如:8.8.8.8:8080,socks5://8.8.8.8:88。CURLOPT_PROXYPORTstring指定代理服务器端口。CURLOPT_PROXYTYPEinteger指定代理服务器类型,支持的值:CURLPROXY_HTTP (默认值) CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、 CURLPROXY_SOCKS4A 或 CURLPROXY_SOCKS5_HOSTNAME;(cURL 7.10以上版本)。CURLOPT_PROXYAUTHinteger代理连接的认证方式,使用在CURLOPT_HTTPAUTH中的位掩码,当前仅支持 CURLAUTH_BASIC和CURLAUTH_NTLM (cURL 7.10以上版本)。CURLOPT_PROXYUSERPWDstring一个用来连接到代理的"[username]:[password]"格式的字符串。CURLOPT_PROXYHEADERarray传给代理的自定义HTTP头;(curl 7.37.0,  PHP 7.0.7以上版本)。CURLOPT_PROXY_SERVICE_NAMEstring代理验证服务的名称(curl 7.34.0,  PHP 7.0.7以上版本)。POST
/
PUTCURLOPT_POSTbool【常用】设置为TRUE时将强制以标准POST方式发送请求,标准POST方式HTML表单类型为"application/x-www-form-urlencoded";注意:如果此选项设置为TRUE,而CURLOPT_POSTFIELDS的参数为数组,那么数据将不会被提交到服务器。CURLOPT_POSTFIELDSarray
string【常用】指定要使用HTTP协议中的"POST"方式来发送的数据; 接受两种格式的数据类型:
1、字符串格式: 这种格式是urlencoded后的字符串,类似'para1=val1&para2=val2&...'形式,这种格式通过HTML表单类型为"application/x-www-form-urlencoded"方式提交到服务器;
2、数组格式:这种格式是以字段名为键名,字段值为键值的数组,这种格式通过HTML表单类型为"multipart/form-data"方式提交到服务器,因此,数组格式可以用来发送文件;如要发送文件,在文件名完整路径前面加上“@”前缀, 文件类型可在文件名后以 ';type=mimetype' 的格式指定;从PHP 5.5.0开始, “@“前缀已被废弃,文件可通过CURLFile 发送; 如:
array('pic'=>'@/tmp/aiezu.com.png')
换成:
array('pic'=>new CURLFile('/tmp/aiezu.com.png'))   CURLOPT_SAFE_UPLOADbool设置为TRUE时,禁用"@"前缀发送文件,以增加安全性,这时发送文件可以通过CURLFile方式;(PHP 5.5添加此选项,PHP 7移除了此选项)CURLOPT_PUTbool【常用】设置为TRUE时,允许以HTTP PUT方式发送文件,此时必须设置CURLOPT_INFILE、CURLOPT_INFILESIZE选项;CURLOPT_INFILEstring【常用】http put方式上传文件时需要读取的文件;CURLOPT_INFILESIZE integer【常用】http put方式上传文件时需要读取的文件长度;CURLOPT_READFUNCTIONfunctionR【常用】设置一个回调函数来,对HTTP PUT文件进行读取处理。此函数包含三个参数:
  参数一为curl的资源句柄;
  参数二为设置在CURLOPT_INFILE选项中,要读取文件的资源句柄;
  参数三为允许读取的最大数据数量;
函数返回当前读取到的字符串,返回空字符串作为 EOF(文件结束) 信号。认证CURLOPT_HTTPAUTHinteger【常用】使用的HTTP验证方法,可以是:CURLAUTH_BASIC、 CURLAUTH_DIGEST、 CURLAUTH_GSSNEGOTIATE、 CURLAUTH_NTLM、 CURLAUTH_ANY和 CURLAUTH_ANYSAFE,可以使用 | 位域(OR)操作符结合多个值,curl会让服务器选择支持的方法,并选择最好的那个;
  CURLAUTH_ANY是 CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的别名,
  CURLAUTH_ANYSAFE 是 CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的别名。CURLOPT_USERNAMEstring【常用】验证中使用的用户名;(curl 7.19.1, PHP 5.5.0以上版本)。CURLOPT_USERPWDstring【常用】验证需要的用户名和密码,格式为:"[username]:[password]"。CURLOPT_SERVICE_NAMEstring验证服务的名称(curl 7.43.0, PHP 7.0.7以上版本)。CURLOPT_LOGIN_OPTIONSstring可以设置特定的登录选项,如通过"AUTH=NTLM" 或者"AUTH=*"设置首选的登录选项,并结合CURLOPT_USERNAME 选项使用;(curl 7.34.0, PHP 7.0.7以上版本)。CURLOPT_NETRCbool是否使用~/.netrc文件获取用户名和密码来连接远程站点。CURLOPT_KRB4LEVELstringKRB4 (Kerberos 4)安全级别,安全级别从低到高一次是:"clear"、"safe"、"confidential"、"private",默认为"private",这个选项设置为NULL时将禁用KRB4安全认证,目前 KRB4 安全认证只能用于FTP传输。CURLOPT_XOAUTH2_BEARERstring指定OAuth 2.0 access token;(curl 7.33.0, PHP 7.0.7以上版本)。证书CURLOPT_SSLCERTstring【常用】指定一个SSL证书文件名;CURLOPT_SSLCERTPASSWDstring【常用】使用CURLOPT_SSLCERT证书需要的密码;CURLOPT_SSLCERTTYPEstring指定证书格式类型,支持的格式有"PEM" (默认值)、"DER"和"ENG";    (curl 7.9.3以上版本)CURLOPT_CAPATHstring一个保存着多个CA证书的目录,这个选项配合CURLOPT_SSL_VERIFYPEER一起使用的。CURLOPT_CAINFOstring【常用】一个保存着一个或多个用来让服务端验证的证书的文件名,这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义,可能需要绝对路径。CURLOPT_SSL_VERIFYPEERbool【常用】是否禁止curl验证对等证书(peer's certificate),默认为FALSE;要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录;自cURL 7.10开始默认为 TRUE,从cURL 7.10开始默认绑定安装。CURLOPT_SSL_VERIFYSTATUSbool验证证书状态;(curl 7.41.0, PHP 7.0.7以上版本) 密钥CURLOPT_SSLKEYstring指定一个SSL私玥文件名。CURLOPT_SSLKEYPASSWDstringSSL私钥的密码;(由于此选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。)CURLOPT_KEYPASSWDstring使用CURLOPT_SSLKEY或CURLOPT_SSH_PRIVATE_KEYFILE 私钥时候的密码;(curl 7.16.1以上版本)。CURLOPT_SSLKEYTYPEstringCURLOPT_SSLKEY中指定的私钥的加密类型,支持的私钥类型为"PEM"(默认值)、"DER"和"ENG"。CURLOPT_SSLENGINEstring用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。CURLOPT_SSLENGINE_DEFAULTstring用来做非对称加密操作的变量。CURLOPT_RANDOM_FILEstring指定一个用来生成 SSL 随机数种子的文件名。CURLOPT_EGDSOCKETstringLike CURLOPT_RANDOM_FILE, except a filename to an Entropy Gathering Daemon socket。SSL
选项CURLOPT_SSL_FALSESTARTbool是否开启 TLS False Start (一种 TLS 握手优化方式),默认TRUE;  (curl 7.42.0, PHP 7.0.7以上版本) CURLOPT_SSL_CIPHER_LISTstring一个SSL的加密算法列表,例如RC4-SHA和TLSv1都是可用的加密列表。CURLOPT_SSL_OPTIONSinteger设置SSL行为选项,可以是:
  CURLSSLOPT_ALLOW_BEAST: do not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols. 
  CURLSSLOPT_NO_REVOKE:disable certificate revocation checks for those SSL backends where such behavior is present.
(curl 7.25.0, PHP 7.0.7以上版本)CURLOPT_SSL_VERIFYHOSTinteger【常用】可能的值:
0 :为不检查名称(默认);
1 :检查服务器SSL证书中是否存在一个公用名(common name)(curl 7.28.1以下版本才支持);
2 :会检查公用名是否存在,并且是否与提供的主机名匹配。 CURLOPT_SSL_ENABLE_ALPNbool是否禁用SSL握手中的 ALPN (如果SSL后端的libcurl内建支持) 用于协商到http2,默认为FALSE;  (curl 7.36.0, PHP 7.0.7以上版本)CURLOPT_SSL_ENABLE_NPNbool是否禁用SSL握手中的 NPN(如果 SSL 后端的 libcurl 内建支持),用于协商到 http2,默认为FALSE;  (curl 7.36.0, PHP 7.0.7以上版本)CURLOPT_SSLVERSIONinteger指定SSL版本,CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1 (5) , CURL_SSLVERSION_TLSv1_2 (6) 中的其中一个,最好不要设置此选项,使用默认值即可,设置为 2 或 3 比较危险,在 SSLv2 和 SSLv3 中有弱点存在。CURLOPT_CERTINFObool是否将在安全传输时输出SSL证书信息到 STDERR,默认为TRUE,需要设置CURLOPT_VERBOSE选项为TRUE才有效; (curl 7.19.1, PHP 5.3.2以上版本)SSH
选项CURLOPT_SSH_PRIVATE_KEYFILEstring指定ssh私钥文件,如果未设置,默认为$HOME/.ssh/id_dsa;(curl 7.16.1以上版本)CURLOPT_SSH_PUBLIC_KEYFILEstring指定ssh公钥文件,如果未设置,默认为$HOME/.ssh/id_dsa.pub;(curl 7.16.1以上版本)CURLOPT_SSH_HOST_PUBLIC_KEY_MD5string远程主机公钥(public key) 的 MD5 校验值,有32位16进制组成,在不匹配的时候curl拒绝连接,此选项仅用于 SCP 和 SFTP 的传输;(curl 7.17.1以上版本)CURLOPT_SSH_AUTH_TYPESinteger一个或者多个有位掩码"|"连接的值,包含如下: CURLSSH_AUTH_PUBLICKEY、 CURLSSH_AUTH_PASSWORD、 CURLSSH_AUTH_HOST、 CURLSSH_AUTH_KEYBOARD,或者设置成CURLSSH_AUTH_ANY让curl自己选择; (curl 7.16.1以上版本)FTPCURLOPT_FTPPORTstring这个值将被用来获取供FTP"PORT"指令所需要的IP地址,"PORT" 指令告诉远程服务器连接到我们指定的IP地址,这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的 IP 地址。 CURLOPT_FTPSSLAUTHintegerFTP验证方式:CURLFTPAUTH_SSL (首先尝试SSL)、CURLFTPAUTH_TLS (首先尝试TLS)、CURLFTPAUTH_DEFAULT (让curl自行决定)。(curl 7.12.2以上版本)。CURLOPT_FTP_FILEMETHODinteger告诉curl使用哪种方式来获取 FTP(s) 服务器上的文件。可能的值有: CURLFTPMETHOD_MULTICWD、 CURLFTPMETHOD_NOCWD 和 CURLFTPMETHOD_SINGLECWD。(curl  7.15.1,PHP 5.3.0以上版本)。CURLOPT_TRANSFERTEXTboolFTP是否使用使用ASCII模式传输,默认为TRUE,对于LDAP,它检索纯文本信息而非 HTML,在 Windows 系统上,系统不会把 STDOUT 设置成二进制 模式。CURLOPT_FTPASCIIboolCURLOPT_TRANSFERTEXT的别名。CURLOPT_FTPLISTONLYbool是否只列出 FTP 目录的名字。CURLOPT_FTPAPPENDbool是否为追加写入文件,而不是覆盖。CURLOPT_FTP_CREATE_MISSING_DIRSbool是否自动创建不存在的ftp目录。CURLOPT_QUOTEarray数组,一组先于 FTP 请求的在服务器上执行的FTP命令。 CURLOPT_POSTQUOTEarray数组,在 FTP 请求执行完成后,在服务器上执行的一组array格式的 FTP 命令。CURLOPT_TFTP_NO_OPTIONSbool是否不发送 TFTP 的 options 请求。(curl  7.48.0 ,PHP 7.0.7 以上版本) CURLOPT_FTP_USE_EPRTboolTRUE 时,当 FTP 下载时,使用 EPRT (和 LPRT)命令, 设置为 FALSE 时禁用 EPRT 和 LPRT,仅仅使用PORT 命令。    CURLOPT_FTP_USE_EPSVboolTRUE 时,在FTP传输过程中,回到 PASV 模式前,先尝试 EPSV 命令,设置为 FALSE 时禁用 EPSV。断点
续传CURLOPT_RANGEstring【常用】指定字节为单位的数据获取范围,可以用”N-M”的形式,多个范围用逗号分隔,如:"0-5,100-101"(仅HTTP GET有效)。CURLOPT_RESUME_FROMinteger指定字节为单位的数据起始偏移量(仅HTTP GET有效)。速率
限制CURLOPT_LOW_SPEED_LIMITinteger传输速度,每秒字节(bytes)数,根据CURLOPT_LOW_SPEED_TIME秒数统计是否因太慢而取消传输。CURLOPT_LOW_SPEED_TIMEinteger当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会判断是否因太慢而取消传输。    CURLOPT_MAX_RECV_SPEED_LARGEinteger如果下载速度超过了此速度(以每秒字节数来统计) ,即传输过程中累计的平均数,传输就会降速到这个参数的值。默认不限速。 ( curl 7.15.5、PHP 5.4.0以上版本)CURLOPT_MAX_SEND_SPEED_LARGEintegerCURLOPT_MAX_SEND_SPEED_LARGE    如果上传的速度超过了此速度(以每秒字节数来统计),即传输过程中累计的平均数 ,传输就会降速到这个参数的值。默认不限速。  ( curl 7.15.5、PHP 5.4.0以上版本)连接
选项CURLOPT_MAXCONNECTSinteger允许的最大连接数量,达到限制时,会通过CURLOPT_CLOSEPOLICY决定应该关闭哪些连接。CURLOPT_CONNECTTIMEOUTinteger在尝试连接时等待的秒数,设置为0,则无限等待。CURLOPT_CONNECTTIMEOUT_MSinteger在尝试连接时等待的毫秒数,设置为0,则无限等待。CURLOPT_TIMEOUTinteger允许curl数执行的最长秒数。CURLOPT_TIMEOUT_MSinteger允许curl数执行的最长毫秒数。CURLOPT_EXPECT_100_TIMEOUT_MSinteger超时预计: 100毫秒内的 continue 响应 默认为 1000毫秒。(curl 7.36.0、PHP 7.0.7以上版本)CURLOPT_DNS_USE_GLOBAL_CACHEbool是否开启DNS缓存,默认TRUE。CURLOPT_DNS_CACHE_TIMEOUTinteger设置DNS在内存中缓存的时间,默认为120秒。响应
选项CURLOPT_BINARYTRANSFERbool设置CURLOPT_RETURNTRANSFER 是否以原生的(Raw)数据格式返回。 从 PHP 5.1.3 开始,此选项不再有效,永远以原生数据格式返回。CURLOPT_RETURNTRANSFERbool【常用】将curl_exec()获取的信息以字符串返回,而不是直接输出。CURLOPT_TIMECONDITIONinteger设置如何对待CURLOPT_TIMEVALUE的时间。
  CURL_TIMECOND_IFMODSINCE(默认):仅在页面CURLOPT_TIMEVALUE之后修改,才返回页面,没有修改则返回"304 Not Modified"头。
如果设置了CURLOPT_HEADER为TRUE,CURL_TIMECOND_IFUNMODSINCE则起相反的效果。 CURLOPT_TIMEVALUEinteger从1970年1月1日开始的秒数时间戳,这个时间戳提供给CURLOPT_TIMECONDITION选项判断。响

头CURLOPT_HEADERbool【常用】为TRUE时会将HTTP头/文件头信息作为数据输出。CURLOPT_WRITEHEADERstream将响应头信息的内容的写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄。CURLOPT_HEADERFUNCTIONfunction【常用】设置一个回调函数来处理响应头信息,此函数必须包含两个参数,参数一为curl的资源句柄,参数二为curl传入的响应头信息,函数必须返回参数二的长度,用来告诉curl成功接收到了传入头信息;CURLINFO_HEADER_OUTbool是否追踪句柄的请求字符串。响应
BODYCURLOPT_NOBODYbool【常用】设置为TRUE时,不会再输出BODY部分,同时METHOD变成HEAD;CURLOPT_FILEstream【常用】设置响应BODY要写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄。CURLOPT_WRITEFUNCTIONfunction【常用】设置一个回调函数来处理响应BODY信息,此函数必须包含两个参数,参数一为curl的资源句柄,参数二为curl传入的响应BODY信息,函数必须返回参数二的长度,用来告诉curl成功接收到了传入响应BODY信息;CURLOPT_NOPROGRESSbool是否关闭进度统计功能,默认为TRUE。CURLOPT_PROGRESSFUNCTIONfunction【常用】设置一个回调函数来处理上传下载的进度,函数必须有五个参数:
参数一:是curl的资源句柄;
参数二:预计要下载的总字节(bytes)数;
参数三:目前下载的字节数;
参数四:预计传输中总上传字节数;
参数五:目前上传的字节数。
返回非零值将中断传输,并返回CURLE_ABORTED_BY_CALLBACK错误。只有设置 CURLOPT_NOPROGRESS 选项为 FALSE 时才会调用这个回调函数。调试
选项CURLOPT_VERBOSEbool【常用】curl是否输出所有调试信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件,默认为FALSE。CURLOPT_STDERRstream设置错误信息要写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄,默认为STDERR。CURLOPT_NOSIGNALbool是否忽略所有的cURL传递给PHP进行的信号。在 SAPI 多线程传输时此项被默认启用,所以超时选项仍能使用。(curl 7.10以上版本)CURLOPT_FAILONERRORbool设置为TRUE时,当 HTTP 状态码大于等于 400,TRUE 将将显示错误详情。 默认情况下将返回页面,忽略 HTTP 代码。    CURLOPT_HTTP200ALIASESarray数组,HTTP 200 响应码数组,数组中的响应码被认为是正确的响应,而非错误。( curl 7.10.3以上版本)CURLOPT_FILETIMEbool是否尝试获取远程文档中的修改时间信息。获取到的修改时间可以通过 curl_getinfo()函数查看。    网络
选项CURLOPT_INTERFACEstringcurl通过指定接口(interface)进行数据传输。可以是一个网口名、IP 地址或者是一个主机名。CURLOPT_IPRESOLVEinteger允许curl选择想要解析的IP地址类别,只有在地址有多种ip类别的时候才能用,可以的值有: CURL_IPRESOLVE_WHATEVER(默认)、 CURL_IPRESOLVE_V4、 CURL_IPRESOLVE_V6 (curl 7.10.8以上版本)CURLOPT_UNIX_SOCKET_PATHstring使用指定的 Unix 套接字作为连接。(cURL 7.40.0、PHP 7.0.7以上版本)CURLOPT_FORBID_REUSEbool在完成交互以后,是否强制断开连接,此链接将不能在连接池中重用。    CURLOPT_FRESH_CONNECT 强制获取一个新的连接,而不是使用连接池中的链接。CURLOPT_TCP_NODELAYbool是否禁用 TCP 的 Nagle 算法。  CURLOPT_TCP_FASTOPENbool是否开启TCP Fast Open。( curl 7.49.0、 PHP 7.0.7以上版本)CURLOPT_SASL_IRbool是否收到首包(first packet)后发送初始的响应(initial response)。(curl 7.31.10、PHP 7.0.7以上版本)CURLOPT_STREAM_WEIGHTinteger设置 stream weight 数值 ( 1 和 256 之间的数字)。(curl 7.46.0、PHP 7.0.7以上版本) 杂项CURLOPT_CRLFbool启用时将Unix的换行符转换成回车换行符。CURLOPT_PIPEWAITbool是否等待 pipelining/multiplexing。(curl 7.43.0、PHP 7.0.7以上版本)CURLOPT_CLOSEPOLICYintegerCURLCLOSEPOLICY_* 中的一个。CURLOPT_PINNEDPUBLICKEYstringSet the pinned public key. The string can be the file name of your pinned public key. The file format expected is "PEM" or "DER". The string can also be any number of base64 encoded sha256 hashes preceded by "sha256//" and separated by ";".    Added in cURL 7.39.0. Available since PHP 7.0.7.CURLOPT_PRIVATEstringAny data that should be associated with this cURL handle. This data can subsequently be retrieved with the CURLINFO_PRIVATE option of curl_getinfo(). cURL does nothing with this data. When using a cURL multi handle, this private data is typically a unique key to identify a standard cURL handle.    Added in cURL 7.10.3. 参考页面:php官网关于curl组件介绍:http://php.net/curl
PHP curl简单用法举例:http://aiezu.com/article/php_curl.html
php curl选项官方介绍:http://php.net/manual/zh/function.curl-setopt.php 查看全部
选项名称值类型描述
网址CURLOPT_URLstring【必须】指定需要获取的URL地址,也可以在curl_init()函数初始化会话的时候作为参数传入。
CURLOPT_PATH_AS_ISbool是否不处理URL中的"../"。(curl 7.42.0、PHP 7.0.7以上版本)
CURLOPT_DEFAULT_PROTOCOLstring指定URL不带协议的时候,使用的默认协议(PHP 7.0.7以上版本)。
CURLOPT_HTTP_VERSIONinteger使用的HTTP版本:CURL_HTTP_VERSION_NONE (默认值,让 curl选择),CURL_HTTP_VERSION_1_0 (强制使用 HTTP/1.0)或CURL_HTTP_VERSION_1_1 (强制使用 HTTP/1.1)。  
CURLOPT_PORTinteger指定连接端口,替换 URL 中的主机和端口。
CURLOPT_CONNECT_TOarray连接到指定的主机和端口,替换 URL 中的主机和端口。接受指定字符串格式的数组: HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT。( curl 7.49.0, PHP 7.0.7以上版本)
CURLOPT_CONNECT_ONLYbool是否只做代理、验证、连接过程,但不传输数据。此选项用于 HTTP、SMTP 和 POP3。


CURLOPT_FOLLOWLOCATIONbool【常用】是否根据服务器返回的http头"Location:"信息,自定重定向到相关页面。
CURLOPT_MAXREDIRSinteger指定递归重定向的最大次数。
CURLOPT_AUTOREFERERbool"Location:"重定向时,是否自动设置header的"Referer:"信息。
CURLOPT_UNRESTRICTED_AUTHbool是否CURLOPT_FOLLOWLOCATION重定向 header 中的多个 location 时继续发送用户名和密码信息,哪怕主机名已改变。
CURLOPT_POSTREDIRinteger位掩码, 设置当CURLOPT_FOLLOWLOCATION时, 么情况下需要再次 HTTP POST 到重定向网址:
1 (301 永久重定向);
2 (302 Found)
4 (303 See Other) ,
可以使用组合的形式:,如: 1 | 2。


CURLOPT_HTTPGETboolTRUE时会设置http的METHOD为GET(默认即为GET,所有只有METHOD被修改时才使用此选项)。
CURLOPT_CUSTOMREQUESTstringHTTP请求时,指定自定义的Method,如:GET、POST、PUT、DELETE等。
CURLOPT_USERAGENTstring【常用】设置HTTP请求头"User-Agent: "字段值信息,用来伪装浏览器信息,让curl抓取更像真实的浏览器访问。
CURLOPT_REFERERstring【常用】设置HTTP请求头"Referer:" 字段值信息,用来伪装来路信息,让curl抓取更像真实的浏览器访问。
CURLOPT_ENCODINGstring设置HTTP请求头中"Accept-Encoding: "的值,支持的编码有"identity"、"deflate"和"gzip",如果为空字符串"",会发送所有支持的编码类型 (curl 7.10以上版本)。
CURLOPT_HTTPHEADERarray【常用】以数组的形式设置http请求头信息,如:
array('Referer: http://aiezu.com', 'Accept-Language: zh-CN,zh;q=0.8')
cook
ies
CURLOPT_COOKIEstring【常用】设定HTTP请求头中"Cookie: "部分的内容,多个cookie用分号分隔,分号后带一个空格,如: "name=aiezu; site=aiezu.com"。
CURLOPT_COOKIEFILEstring【常用】从指定文件中读取cookie,并发送到http服务,文件中的cookie必须为Netscape格式。
CURLOPT_COOKIEJARstring【常用】将HTTP响应头中的cookie保存到指定文件。
CURLOPT_COOKIESESSIONbool是否开启新的一次cookie会话,忽略之前存储的cookie会话信息。
代理CURLOPT_HTTPPROXYTUNNELbool设置为TRUE时会通过指定的HTTP代理来传输。
CURLOPT_PROXYstring【常用】指定代理信息,如:8.8.8.8:8080,socks5://8.8.8.8:88。
CURLOPT_PROXYPORTstring指定代理服务器端口。
CURLOPT_PROXYTYPEinteger指定代理服务器类型,支持的值:CURLPROXY_HTTP (默认值) CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、 CURLPROXY_SOCKS4A 或 CURLPROXY_SOCKS5_HOSTNAME;(cURL 7.10以上版本)。
CURLOPT_PROXYAUTHinteger代理连接的认证方式,使用在CURLOPT_HTTPAUTH中的位掩码,当前仅支持 CURLAUTH_BASIC和CURLAUTH_NTLM (cURL 7.10以上版本)。
CURLOPT_PROXYUSERPWDstring一个用来连接到代理的"[username]:[password]"格式的字符串。
CURLOPT_PROXYHEADERarray传给代理的自定义HTTP头;(curl 7.37.0,  PHP 7.0.7以上版本)。
CURLOPT_PROXY_SERVICE_NAMEstring代理验证服务的名称(curl 7.34.0,  PHP 7.0.7以上版本)。
POST
/
PUT
CURLOPT_POSTbool【常用】设置为TRUE时将强制以标准POST方式发送请求,标准POST方式HTML表单类型为"application/x-www-form-urlencoded";注意:如果此选项设置为TRUE,而CURLOPT_POSTFIELDS的参数为数组,那么数据将不会被提交到服务器。
CURLOPT_POSTFIELDSarray
string
【常用】指定要使用HTTP协议中的"POST"方式来发送的数据; 接受两种格式的数据类型:
1、字符串格式: 这种格式是urlencoded后的字符串,类似'para1=val1&para2=val2&...'形式,这种格式通过HTML表单类型为"application/x-www-form-urlencoded"方式提交到服务器;
2、数组格式:这种格式是以字段名为键名,字段值为键值的数组,这种格式通过HTML表单类型为"multipart/form-data"方式提交到服务器,因此,数组格式可以用来发送文件;如要发送文件,在文件名完整路径前面加上“@”前缀, 文件类型可在文件名后以 ';type=mimetype' 的格式指定;从PHP 5.5.0开始, “@“前缀已被废弃,文件可通过CURLFile 发送; 如:
array('pic'=>'@/tmp/aiezu.com.png')
换成:
array('pic'=>new CURLFile('/tmp/aiezu.com.png'))
   
CURLOPT_SAFE_UPLOADbool设置为TRUE时,禁用"@"前缀发送文件,以增加安全性,这时发送文件可以通过CURLFile方式;(PHP 5.5添加此选项,PHP 7移除了此选项)
CURLOPT_PUTbool【常用】设置为TRUE时,允许以HTTP PUT方式发送文件,此时必须设置CURLOPT_INFILE、CURLOPT_INFILESIZE选项;
CURLOPT_INFILEstring【常用】http put方式上传文件时需要读取的文件;
CURLOPT_INFILESIZE integer【常用】http put方式上传文件时需要读取的文件长度;
CURLOPT_READFUNCTIONfunctionR【常用】设置一个回调函数来,对HTTP PUT文件进行读取处理。此函数包含三个参数:
  参数一为curl的资源句柄;
  参数二为设置在CURLOPT_INFILE选项中,要读取文件的资源句柄;
  参数三为允许读取的最大数据数量;
函数返回当前读取到的字符串,返回空字符串作为 EOF(文件结束) 信号。
认证CURLOPT_HTTPAUTHinteger【常用】使用的HTTP验证方法,可以是:CURLAUTH_BASIC、 CURLAUTH_DIGEST、 CURLAUTH_GSSNEGOTIATE、 CURLAUTH_NTLM、 CURLAUTH_ANY和 CURLAUTH_ANYSAFE,可以使用 | 位域(OR)操作符结合多个值,curl会让服务器选择支持的方法,并选择最好的那个;
  CURLAUTH_ANY是 CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的别名,
  CURLAUTH_ANYSAFE 是 CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的别名。
CURLOPT_USERNAMEstring【常用】验证中使用的用户名;(curl 7.19.1, PHP 5.5.0以上版本)。
CURLOPT_USERPWDstring【常用】验证需要的用户名和密码,格式为:"[username]:[password]"。
CURLOPT_SERVICE_NAMEstring验证服务的名称(curl 7.43.0, PHP 7.0.7以上版本)。
CURLOPT_LOGIN_OPTIONSstring可以设置特定的登录选项,如通过"AUTH=NTLM" 或者"AUTH=*"设置首选的登录选项,并结合CURLOPT_USERNAME 选项使用;(curl 7.34.0, PHP 7.0.7以上版本)。
CURLOPT_NETRCbool是否使用~/.netrc文件获取用户名和密码来连接远程站点。
CURLOPT_KRB4LEVELstringKRB4 (Kerberos 4)安全级别,安全级别从低到高一次是:"clear"、"safe"、"confidential"、"private",默认为"private",这个选项设置为NULL时将禁用KRB4安全认证,目前 KRB4 安全认证只能用于FTP传输。
CURLOPT_XOAUTH2_BEARERstring指定OAuth 2.0 access token;(curl 7.33.0, PHP 7.0.7以上版本)。
证书CURLOPT_SSLCERTstring【常用】指定一个SSL证书文件名;
CURLOPT_SSLCERTPASSWDstring【常用】使用CURLOPT_SSLCERT证书需要的密码;
CURLOPT_SSLCERTTYPEstring指定证书格式类型,支持的格式有"PEM" (默认值)、"DER"和"ENG";    (curl 7.9.3以上版本)
CURLOPT_CAPATHstring一个保存着多个CA证书的目录,这个选项配合CURLOPT_SSL_VERIFYPEER一起使用的。
CURLOPT_CAINFOstring【常用】一个保存着一个或多个用来让服务端验证的证书的文件名,这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义,可能需要绝对路径。
CURLOPT_SSL_VERIFYPEERbool【常用】是否禁止curl验证对等证书(peer's certificate),默认为FALSE;要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录;自cURL 7.10开始默认为 TRUE,从cURL 7.10开始默认绑定安装。
CURLOPT_SSL_VERIFYSTATUSbool验证证书状态;(curl 7.41.0, PHP 7.0.7以上版本) 
密钥CURLOPT_SSLKEYstring指定一个SSL私玥文件名。
CURLOPT_SSLKEYPASSWDstringSSL私钥的密码;(由于此选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。)
CURLOPT_KEYPASSWDstring使用CURLOPT_SSLKEY或CURLOPT_SSH_PRIVATE_KEYFILE 私钥时候的密码;(curl 7.16.1以上版本)。
CURLOPT_SSLKEYTYPEstringCURLOPT_SSLKEY中指定的私钥的加密类型,支持的私钥类型为"PEM"(默认值)、"DER"和"ENG"。
CURLOPT_SSLENGINEstring用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。
CURLOPT_SSLENGINE_DEFAULTstring用来做非对称加密操作的变量。
CURLOPT_RANDOM_FILEstring指定一个用来生成 SSL 随机数种子的文件名。
CURLOPT_EGDSOCKETstringLike CURLOPT_RANDOM_FILE, except a filename to an Entropy Gathering Daemon socket。
SSL
选项
CURLOPT_SSL_FALSESTARTbool是否开启 TLS False Start (一种 TLS 握手优化方式),默认TRUE;  (curl 7.42.0, PHP 7.0.7以上版本) 
CURLOPT_SSL_CIPHER_LISTstring一个SSL的加密算法列表,例如RC4-SHA和TLSv1都是可用的加密列表。
CURLOPT_SSL_OPTIONSinteger设置SSL行为选项,可以是:
  CURLSSLOPT_ALLOW_BEAST: do not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols. 
  CURLSSLOPT_NO_REVOKE:disable certificate revocation checks for those SSL backends where such behavior is present.
(curl 7.25.0, PHP 7.0.7以上版本)
CURLOPT_SSL_VERIFYHOSTinteger【常用】可能的值:
0 :为不检查名称(默认);
1 :检查服务器SSL证书中是否存在一个公用名(common name)(curl 7.28.1以下版本才支持);
2 :会检查公用名是否存在,并且是否与提供的主机名匹配。 
CURLOPT_SSL_ENABLE_ALPNbool是否禁用SSL握手中的 ALPN (如果SSL后端的libcurl内建支持) 用于协商到http2,默认为FALSE;  (curl 7.36.0, PHP 7.0.7以上版本)
CURLOPT_SSL_ENABLE_NPNbool是否禁用SSL握手中的 NPN(如果 SSL 后端的 libcurl 内建支持),用于协商到 http2,默认为FALSE;  (curl 7.36.0, PHP 7.0.7以上版本)
CURLOPT_SSLVERSIONinteger指定SSL版本,CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1 (5) , CURL_SSLVERSION_TLSv1_2 (6) 中的其中一个,最好不要设置此选项,使用默认值即可,设置为 2 或 3 比较危险,在 SSLv2 和 SSLv3 中有弱点存在。
CURLOPT_CERTINFObool是否将在安全传输时输出SSL证书信息到 STDERR,默认为TRUE,需要设置CURLOPT_VERBOSE选项为TRUE才有效; (curl 7.19.1, PHP 5.3.2以上版本)
SSH
选项
CURLOPT_SSH_PRIVATE_KEYFILEstring指定ssh私钥文件,如果未设置,默认为$HOME/.ssh/id_dsa;(curl 7.16.1以上版本)
CURLOPT_SSH_PUBLIC_KEYFILEstring指定ssh公钥文件,如果未设置,默认为$HOME/.ssh/id_dsa.pub;(curl 7.16.1以上版本)
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5string远程主机公钥(public key) 的 MD5 校验值,有32位16进制组成,在不匹配的时候curl拒绝连接,此选项仅用于 SCP 和 SFTP 的传输;(curl 7.17.1以上版本)
CURLOPT_SSH_AUTH_TYPESinteger一个或者多个有位掩码"|"连接的值,包含如下: CURLSSH_AUTH_PUBLICKEY、 CURLSSH_AUTH_PASSWORD、 CURLSSH_AUTH_HOST、 CURLSSH_AUTH_KEYBOARD,或者设置成CURLSSH_AUTH_ANY让curl自己选择; (curl 7.16.1以上版本)
FTPCURLOPT_FTPPORTstring这个值将被用来获取供FTP"PORT"指令所需要的IP地址,"PORT" 指令告诉远程服务器连接到我们指定的IP地址,这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的 IP 地址。 
CURLOPT_FTPSSLAUTHintegerFTP验证方式:CURLFTPAUTH_SSL (首先尝试SSL)、CURLFTPAUTH_TLS (首先尝试TLS)、CURLFTPAUTH_DEFAULT (让curl自行决定)。(curl 7.12.2以上版本)。
CURLOPT_FTP_FILEMETHODinteger告诉curl使用哪种方式来获取 FTP(s) 服务器上的文件。可能的值有: CURLFTPMETHOD_MULTICWD、 CURLFTPMETHOD_NOCWD 和 CURLFTPMETHOD_SINGLECWD。(curl  7.15.1,PHP 5.3.0以上版本)。
CURLOPT_TRANSFERTEXTboolFTP是否使用使用ASCII模式传输,默认为TRUE,对于LDAP,它检索纯文本信息而非 HTML,在 Windows 系统上,系统不会把 STDOUT 设置成二进制 模式。
CURLOPT_FTPASCIIboolCURLOPT_TRANSFERTEXT的别名。
CURLOPT_FTPLISTONLYbool是否只列出 FTP 目录的名字。
CURLOPT_FTPAPPENDbool是否为追加写入文件,而不是覆盖。
CURLOPT_FTP_CREATE_MISSING_DIRSbool是否自动创建不存在的ftp目录。
CURLOPT_QUOTEarray数组,一组先于 FTP 请求的在服务器上执行的FTP命令。 
CURLOPT_POSTQUOTEarray数组,在 FTP 请求执行完成后,在服务器上执行的一组array格式的 FTP 命令。
CURLOPT_TFTP_NO_OPTIONSbool是否不发送 TFTP 的 options 请求。(curl  7.48.0 ,PHP 7.0.7 以上版本) 
CURLOPT_FTP_USE_EPRTboolTRUE 时,当 FTP 下载时,使用 EPRT (和 LPRT)命令, 设置为 FALSE 时禁用 EPRT 和 LPRT,仅仅使用PORT 命令。    
CURLOPT_FTP_USE_EPSVboolTRUE 时,在FTP传输过程中,回到 PASV 模式前,先尝试 EPSV 命令,设置为 FALSE 时禁用 EPSV。
断点
续传
CURLOPT_RANGEstring【常用】指定字节为单位的数据获取范围,可以用”N-M”的形式,多个范围用逗号分隔,如:"0-5,100-101"(仅HTTP GET有效)。
CURLOPT_RESUME_FROMinteger指定字节为单位的数据起始偏移量(仅HTTP GET有效)。
速率
限制
CURLOPT_LOW_SPEED_LIMITinteger传输速度,每秒字节(bytes)数,根据CURLOPT_LOW_SPEED_TIME秒数统计是否因太慢而取消传输。
CURLOPT_LOW_SPEED_TIMEinteger当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会判断是否因太慢而取消传输。    
CURLOPT_MAX_RECV_SPEED_LARGEinteger如果下载速度超过了此速度(以每秒字节数来统计) ,即传输过程中累计的平均数,传输就会降速到这个参数的值。默认不限速。 ( curl 7.15.5、PHP 5.4.0以上版本)
CURLOPT_MAX_SEND_SPEED_LARGEintegerCURLOPT_MAX_SEND_SPEED_LARGE    如果上传的速度超过了此速度(以每秒字节数来统计),即传输过程中累计的平均数 ,传输就会降速到这个参数的值。默认不限速。  ( curl 7.15.5、PHP 5.4.0以上版本)
连接
选项
CURLOPT_MAXCONNECTSinteger允许的最大连接数量,达到限制时,会通过CURLOPT_CLOSEPOLICY决定应该关闭哪些连接。
CURLOPT_CONNECTTIMEOUTinteger在尝试连接时等待的秒数,设置为0,则无限等待。
CURLOPT_CONNECTTIMEOUT_MSinteger在尝试连接时等待的毫秒数,设置为0,则无限等待。
CURLOPT_TIMEOUTinteger允许curl数执行的最长秒数。
CURLOPT_TIMEOUT_MSinteger允许curl数执行的最长毫秒数。
CURLOPT_EXPECT_100_TIMEOUT_MSinteger超时预计: 100毫秒内的 continue 响应 默认为 1000毫秒。(curl 7.36.0、PHP 7.0.7以上版本)
CURLOPT_DNS_USE_GLOBAL_CACHEbool是否开启DNS缓存,默认TRUE。
CURLOPT_DNS_CACHE_TIMEOUTinteger设置DNS在内存中缓存的时间,默认为120秒。
响应
选项
CURLOPT_BINARYTRANSFERbool设置CURLOPT_RETURNTRANSFER 是否以原生的(Raw)数据格式返回。 从 PHP 5.1.3 开始,此选项不再有效,永远以原生数据格式返回。
CURLOPT_RETURNTRANSFERbool【常用】将curl_exec()获取的信息以字符串返回,而不是直接输出。
CURLOPT_TIMECONDITIONinteger设置如何对待CURLOPT_TIMEVALUE的时间。
  CURL_TIMECOND_IFMODSINCE(默认):仅在页面CURLOPT_TIMEVALUE之后修改,才返回页面,没有修改则返回"304 Not Modified"头。
如果设置了CURLOPT_HEADER为TRUE,CURL_TIMECOND_IFUNMODSINCE则起相反的效果。 
CURLOPT_TIMEVALUEinteger从1970年1月1日开始的秒数时间戳,这个时间戳提供给CURLOPT_TIMECONDITION选项判断。


CURLOPT_HEADERbool【常用】为TRUE时会将HTTP头/文件头信息作为数据输出。
CURLOPT_WRITEHEADERstream将响应头信息的内容的写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄。
CURLOPT_HEADERFUNCTIONfunction【常用】设置一个回调函数来处理响应头信息,此函数必须包含两个参数,参数一为curl的资源句柄,参数二为curl传入的响应头信息,函数必须返回参数二的长度,用来告诉curl成功接收到了传入头信息;
CURLINFO_HEADER_OUTbool是否追踪句柄的请求字符串。
响应
BODY
CURLOPT_NOBODYbool【常用】设置为TRUE时,不会再输出BODY部分,同时METHOD变成HEAD;
CURLOPT_FILEstream【常用】设置响应BODY要写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄。
CURLOPT_WRITEFUNCTIONfunction【常用】设置一个回调函数来处理响应BODY信息,此函数必须包含两个参数,参数一为curl的资源句柄,参数二为curl传入的响应BODY信息,函数必须返回参数二的长度,用来告诉curl成功接收到了传入响应BODY信息;
CURLOPT_NOPROGRESSbool是否关闭进度统计功能,默认为TRUE。
CURLOPT_PROGRESSFUNCTIONfunction【常用】设置一个回调函数来处理上传下载的进度,函数必须有五个参数:
参数一:是curl的资源句柄;
参数二:预计要下载的总字节(bytes)数;
参数三:目前下载的字节数;
参数四:预计传输中总上传字节数;
参数五:目前上传的字节数。
返回非零值将中断传输,并返回CURLE_ABORTED_BY_CALLBACK错误。只有设置 CURLOPT_NOPROGRESS 选项为 FALSE 时才会调用这个回调函数。
调试
选项
CURLOPT_VERBOSEbool【常用】curl是否输出所有调试信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件,默认为FALSE。
CURLOPT_STDERRstream设置错误信息要写入到指定地方,如写入到文件,则传fopen()函数返回的流资源句柄,默认为STDERR。
CURLOPT_NOSIGNALbool是否忽略所有的cURL传递给PHP进行的信号。在 SAPI 多线程传输时此项被默认启用,所以超时选项仍能使用。(curl 7.10以上版本)
CURLOPT_FAILONERRORbool设置为TRUE时,当 HTTP 状态码大于等于 400,TRUE 将将显示错误详情。 默认情况下将返回页面,忽略 HTTP 代码。    
CURLOPT_HTTP200ALIASESarray数组,HTTP 200 响应码数组,数组中的响应码被认为是正确的响应,而非错误。( curl 7.10.3以上版本)
CURLOPT_FILETIMEbool是否尝试获取远程文档中的修改时间信息。获取到的修改时间可以通过 curl_getinfo()函数查看。    
网络
选项
CURLOPT_INTERFACEstringcurl通过指定接口(interface)进行数据传输。可以是一个网口名、IP 地址或者是一个主机名。
CURLOPT_IPRESOLVEinteger允许curl选择想要解析的IP地址类别,只有在地址有多种ip类别的时候才能用,可以的值有: CURL_IPRESOLVE_WHATEVER(默认)、 CURL_IPRESOLVE_V4、 CURL_IPRESOLVE_V6 (curl 7.10.8以上版本)
CURLOPT_UNIX_SOCKET_PATHstring使用指定的 Unix 套接字作为连接。(cURL 7.40.0、PHP 7.0.7以上版本)
CURLOPT_FORBID_REUSEbool在完成交互以后,是否强制断开连接,此链接将不能在连接池中重用。    
CURLOPT_FRESH_CONNECT 强制获取一个新的连接,而不是使用连接池中的链接。
CURLOPT_TCP_NODELAYbool是否禁用 TCP 的 Nagle 算法。  
CURLOPT_TCP_FASTOPENbool是否开启TCP Fast Open。( curl 7.49.0、 PHP 7.0.7以上版本)
CURLOPT_SASL_IRbool是否收到首包(first packet)后发送初始的响应(initial response)。(curl 7.31.10、PHP 7.0.7以上版本)
CURLOPT_STREAM_WEIGHTinteger设置 stream weight 数值 ( 1 和 256 之间的数字)。(curl 7.46.0、PHP 7.0.7以上版本) 
杂项CURLOPT_CRLFbool启用时将Unix的换行符转换成回车换行符。
CURLOPT_PIPEWAITbool是否等待 pipelining/multiplexing。(curl 7.43.0、PHP 7.0.7以上版本)
CURLOPT_CLOSEPOLICYintegerCURLCLOSEPOLICY_* 中的一个。
CURLOPT_PINNEDPUBLICKEYstringSet the pinned public key. The string can be the file name of your pinned public key. The file format expected is "PEM" or "DER". The string can also be any number of base64 encoded sha256 hashes preceded by "sha256//" and separated by ";".    Added in cURL 7.39.0. Available since PHP 7.0.7.
CURLOPT_PRIVATEstringAny data that should be associated with this cURL handle. This data can subsequently be retrieved with the CURLINFO_PRIVATE option of curl_getinfo(). cURL does nothing with this data. When using a cURL multi handle, this private data is typically a unique key to identify a standard cURL handle.    Added in cURL 7.10.3.
 

参考页面:

php官网关于curl组件介绍:http://php.net/curl
PHP curl简单用法举例:http://aiezu.com/article/php_curl.html
php curl选项官方介绍:http://php.net/manual/zh/function.curl-setopt.php

PHP curl简单用法举例和相关函数介绍

PHPllslx520 发表了文章 • 0 个评论 • 454 次浏览 • 2017-06-04 22:24 • 来自相关话题

一、PHP curl抓取代码编写流程:使用PHP curl执行抓取请求分为下面基本四步:使用 curl_init() 函数创建一个curl句柄;使用 curl_setopt() 函数为curl句柄设置相应选项,php curl的丰富功能依靠此函数的设置来实现;使用 curl_exec() 函数执行抓取请求;使用 curl_close() 函数关闭curl句柄,释放内存;  二、PHP curl最基本用法:  下面使用简单的例子,通过使用php curl抓取本站首页源代码长度,介绍php curl的基本用法。注意CURLOPT_RETURNTRANSFER选项十分重要,作用为执行curl_exec函数时,是否返回curl传输内容到变量,默认为否,会直接将内容输出网页。<?php
// 创建一个curl句柄
$ch = curl_init();
// 设置访问的URL
curl_setopt($ch, CURLOPT_URL, "http://aiezu.com");
// 将curl请求执行时,将结果返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行curl请求,返回结果到变量
$html = curl_exec($ch);
// 关闭curl句柄
curl_close($ch);
echo strlen($html);运行结果:96161 三、PHP curl GET请求和POST请求:1、php curl get请求:<?php
$data = array('sex'=>1, 'age'=>18);
$url = sprintf("http://aiezu.com/test.php?%s", http_build_query($data));
// $url: http://aiezu.com/test.php?sex=1&age=18

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
echo $html;输出结果:[REQUEST_METHOD]: GET

$_GET:
Array
(
[sex] => 1
[age] => 18
) 
2、php curl post 提交数据:<?php
$data = array('name'=>'爱E族', 'domain'=>'aiezu.com');
$url = "http://aiezu.com/test.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 告诉curl使用POST的方式提交
curl_setopt($ch, CURLOPT_POST, 1);
// 设置要POST提交的数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$html = curl_exec($ch);
curl_close($ch);
echo $html;输出结果:[REQUEST_METHOD]: POST
[CONTENT_LENGTH]: 250
[CONTENT_TYPE]: multipart/form-data; boundary=----------------------------39f5fe9c583c

$_POST:
Array
(
[name] => 爱E族
[domain] => aiezu.com
) 四、PHP curl组件相关函数:  PHP curl组件相关函数功能介绍: 函数名函数介绍基


数curl_init【常用】初始化一个curl会话,返回一个curl句柄;curl_setopt【常用】设置curl选项,具体选项介绍请参考php官方介绍:curl_setopt;curl_setopt_array【常用】使用数组的方式批量设置curl选项;curl_copy_handle克隆一个curl句柄和它的所有选项;curl_exec【常用】执行curl会话;curl_pause 暂停并取消暂停一个连接(PHP 5.5以上版本);curl_reset将curl句柄的所有curl选项重置为默认值(PHP 5.5以上版本);curl_getinfo获取curl最后会话信息,包含消耗时间、上传下载字节数、传输速度等信息;curl_errno返回curl会话最后一次的数字错误代码;curl_error返回curl会话最后一次的字符串错误描述;curl_strerror通过curl数字错误代码返回字符串描述(PHP 5.5以上版本);curl_close【常用】关闭curl会话;curl_escape 对指定字符串进行URL编码(PHP 5.5以上版本);curl_unescape 对指定字符串进行URL解码(PHP 5.5以上版本);curl_version以数组的形式返回php curl版本信息;批

理curl_multi_init创建一个curl批处理句柄(并发请求);curl_multi_add_handle向curl批处理句柄中添加单独的curl句柄;curl_multi_remove_handle从curl批处理句柄中移除某个curl句柄;curl_multi_setopt为curl批处理句柄设置选项;curl_multi_exec执行curl批处理句柄;curl_multi_info_read尝试从curl批处理句柄中获取 新curl子请求的完成信息;curl_multi_getcontent读取curl批处理句柄中curl子句柄的请求返回内容;curl_multi_close关闭curl批处理句柄;curl_multi_select 等待所有curl批处理中的活动连接;curl_multi_strerror通过curl批处理数字错误代码返回字符串描述(PHP 5.5以上版本);共


柄curl_share_init初始化一个curl共享句柄(PHP 5.5以上版本);curl_share_setopt为 curl共享句柄设置选项(PHP 5.5以上版本);curl_share_close关闭curl共享句柄(PHP 5.5以上版本);其
他curl_file_create创建一个curlfile对象(PHP 5.5以上版本); 五、参考资料:php官网关于curl组件介绍:http://php.net/curlphp curl选项官方介绍:http://php.net/manual/zh/function.curl-setopt.phpphp curl选项爱E族整理:https://aiezu.com/article/php_curl_curl_setopt_sets.html 查看全部

一、PHP curl抓取代码编写流程:

使用PHP curl执行抓取请求分为下面基本四步:
  1. 使用 curl_init() 函数创建一个curl句柄;
  2. 使用 curl_setopt() 函数为curl句柄设置相应选项,php curl的丰富功能依靠此函数的设置来实现;
  3. 使用 curl_exec() 函数执行抓取请求;
  4. 使用 curl_close() 函数关闭curl句柄,释放内存;
  

二、PHP curl最基本用法:

  下面使用简单的例子,通过使用php curl抓取本站首页源代码长度,介绍php curl的基本用法。注意CURLOPT_RETURNTRANSFER选项十分重要,作用为执行curl_exec函数时,是否返回curl传输内容到变量,默认为否,会直接将内容输出网页。
<?php
// 创建一个curl句柄
$ch = curl_init();
// 设置访问的URL
curl_setopt($ch, CURLOPT_URL, "http://aiezu.com");
// 将curl请求执行时,将结果返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行curl请求,返回结果到变量
$html = curl_exec($ch);
// 关闭curl句柄
curl_close($ch);
echo strlen($html);
运行结果:
96161
 

三、PHP curl GET请求和POST请求:

1、php curl get请求:

<?php
$data = array('sex'=>1, 'age'=>18);
$url = sprintf("http://aiezu.com/test.php?%s", http_build_query($data));
// $url: http://aiezu.com/test.php?sex=1&age=18

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
echo $html;
输出结果:
[REQUEST_METHOD]: GET

$_GET:
Array
(
[sex] => 1
[age] => 18
)
 
2、php curl post 提交数据:
<?php
$data = array('name'=>'爱E族', 'domain'=>'aiezu.com');
$url = "http://aiezu.com/test.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 告诉curl使用POST的方式提交
curl_setopt($ch, CURLOPT_POST, 1);
// 设置要POST提交的数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$html = curl_exec($ch);
curl_close($ch);
echo $html;
输出结果:
[REQUEST_METHOD]: POST
[CONTENT_LENGTH]: 250
[CONTENT_TYPE]: multipart/form-data; boundary=----------------------------39f5fe9c583c

$_POST:
Array
(
[name] => 爱E族
[domain] => aiezu.com
)
 

四、PHP curl组件相关函数:

  PHP curl组件相关函数功能介绍:
 函数名函数介绍



curl_init【常用】初始化一个curl会话,返回一个curl句柄;
curl_setopt【常用】设置curl选项,具体选项介绍请参考php官方介绍:curl_setopt;
curl_setopt_array【常用】使用数组的方式批量设置curl选项;
curl_copy_handle克隆一个curl句柄和它的所有选项;
curl_exec【常用】执行curl会话;
curl_pause 暂停并取消暂停一个连接(PHP 5.5以上版本);
curl_reset将curl句柄的所有curl选项重置为默认值(PHP 5.5以上版本);
curl_getinfo获取curl最后会话信息,包含消耗时间、上传下载字节数、传输速度等信息;
curl_errno返回curl会话最后一次的数字错误代码;
curl_error返回curl会话最后一次的字符串错误描述;
curl_strerror通过curl数字错误代码返回字符串描述(PHP 5.5以上版本);
curl_close【常用】关闭curl会话;
curl_escape 对指定字符串进行URL编码(PHP 5.5以上版本);
curl_unescape 对指定字符串进行URL解码(PHP 5.5以上版本);
curl_version以数组的形式返回php curl版本信息;


curl_multi_init创建一个curl批处理句柄(并发请求);
curl_multi_add_handle向curl批处理句柄中添加单独的curl句柄;
curl_multi_remove_handle从curl批处理句柄中移除某个curl句柄;
curl_multi_setopt为curl批处理句柄设置选项;
curl_multi_exec执行curl批处理句柄;
curl_multi_info_read尝试从curl批处理句柄中获取 新curl子请求的完成信息;
curl_multi_getcontent读取curl批处理句柄中curl子句柄的请求返回内容;
curl_multi_close关闭curl批处理句柄;
curl_multi_select 等待所有curl批处理中的活动连接;
curl_multi_strerror通过curl批处理数字错误代码返回字符串描述(PHP 5.5以上版本);



curl_share_init初始化一个curl共享句柄(PHP 5.5以上版本);
curl_share_setopt为 curl共享句柄设置选项(PHP 5.5以上版本);
curl_share_close关闭curl共享句柄(PHP 5.5以上版本);

curl_file_create创建一个curlfile对象(PHP 5.5以上版本);
 

五、参考资料:

php unicode与中文互转

PHPllslx520 发表了文章 • 0 个评论 • 437 次浏览 • 2017-05-05 23:15 • 来自相关话题

一、使用json_encode和json_decode函数:1、使用json_decode()函数将unicode编码转换为中文汉字:<?php
$str = "\u597d\u597d\u5b66\u4e60\u5929\u5929\u5411\u4e0a";
# echo json_decode($str); # 错误
echo json_decode(sprintf('"%s"', $str)); #正确输出:好好学习天天向上注意:需要在要转换成中文的unicode字符串两边添加双引号后,才能使用json_decode()正确的转换成中文。 
 2、使用json_encode()函数将中文转换为unicode编码:<?php
$str = "爱E族:aiezu.com";
echo json_encode($str);输出:"\u7231E\u65cf\uff1aaiezu.com"注意:使用json_encode()函数将中文转换成unicode编码后,首尾会多出两个双引号,需要自行去掉。 查看全部

一、使用json_encodejson_decode函数:

1、使用json_decode()函数将unicode编码转换为中文汉字:

<?php
$str = "\u597d\u597d\u5b66\u4e60\u5929\u5929\u5411\u4e0a";
# echo json_decode($str); # 错误
echo json_decode(sprintf('"%s"', $str)); #正确
输出:
好好学习天天向上
注意:需要在要转换成中文的unicode字符串两边添加双引号后,才能使用json_decode()正确的转换成中文。 
 

2、使用json_encode()函数将中文转换为unicode编码:

<?php
$str = "爱E族:aiezu.com";
echo json_encode($str);
输出:
"\u7231E\u65cf\uff1aaiezu.com"
注意:使用json_encode()函数将中文转换成unicode编码后,首尾会多出两个双引号,需要自行去掉。

Vim快速为PHP代码文件头添加copyright版权信息

PHPllslx520 发表了文章 • 0 个评论 • 535 次浏览 • 2017-04-14 22:49 • 来自相关话题

1、修改~/.vimrc文件:  使用vim编辑~/.vimrc文件,在文件尾部添加如下代码:map <F4> :call TitleDet()<cr>'s
function AddTitle()
call append(1,"/*=============================================================================")
call append(2,"# Author: Aiezu.com - xxxx@qq.com")
call append(3,"# Last modified: " . strftime("%Y-%m-%d %H:%M"))
call append(4,"# Filename: " . expand("%:t"))
call append(5,"# Description: ")
call append(6,"=============================================================================*/")
echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf

function UpdateTitle()
normal m'
execute '/# *Last modified:/s@:.*\=strftime(":\t%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# *Filename:/s@:.*\=":\t\t".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction

function TitleDet()
let n=1
while n < 7
let line = getline(n)
if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
call UpdateTitle()
return
endif
let n = n + 1
endwhile

call AddTitle()
endfunction上面代码中的append函数的第一个参数是在指定的行后面插入内容,这里从第一行后面开始插入(第一行留给"<?php")。 
 
小贴士:如果上面的代码粘贴到vim中格式乱了,可以使用shell中输入"cat <<END>> ~/.vimrc"回车,再粘贴代码,再输入字符"END",完成追加代码到文件。
 2、 快速添加版权信息测试:  按上面要求修改~/.vimrc文件并保存后,使用vim随便打开一个php文件,按F4,恭喜,神奇的一幕发生了。 查看全部

1、修改~/.vimrc文件:

  使用vim编辑~/.vimrc文件,在文件尾部添加如下代码:
map <F4> :call TitleDet()<cr>'s
function AddTitle()
call append(1,"/*=============================================================================")
call append(2,"# Author: Aiezu.com - xxxx@qq.com")
call append(3,"# Last modified: " . strftime("%Y-%m-%d %H:%M"))
call append(4,"# Filename: " . expand("%:t"))
call append(5,"# Description: ")
call append(6,"=============================================================================*/")
echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf

function UpdateTitle()
normal m'
execute '/# *Last modified:/s@:.*\=strftime(":\t%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# *Filename:/s@:.*\=":\t\t".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction

function TitleDet()
let n=1
while n < 7
let line = getline(n)
if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
call UpdateTitle()
return
endif
let n = n + 1
endwhile

call AddTitle()
endfunction
上面代码中的append函数的第一个参数是在指定的行后面插入内容,这里从第一行后面开始插入(第一行留给"<?php")。 
 
小贴士:如果上面的代码粘贴到vim中格式乱了,可以使用shell中输入"cat <<END>> ~/.vimrc"回车,再粘贴代码,再输入字符"END",完成追加代码到文件。
 

2、 快速添加版权信息测试:

  按上面要求修改~/.vimrc文件并保存后,使用vim随便打开一个php文件,按F4,恭喜,神奇的一幕发生了。

Chrome图片上传字段弹出图片选择框十分慢

回复

Javascriptllslx520 回复了问题 • 1 人关注 • 1 个回复 • 693 次浏览 • 2017-03-08 18:08 • 来自相关话题