84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
一开始是用curl获取的,这种肯定是可行的,然后发现fopen()也可以写url,后来发现readfile()似乎也可以。
所以想问下一般下载文件是采用哪种方法呢?这些方式有什么优缺点呢?
欢迎选择我的课程,让我们一起见证您的进步~~
参考 @eechen 的理解
fopen/file_get_contents/file_put_contents这些都是PHP自己实现的文件/网络读写函数.而curl系列函数则是一个依赖第三方库libcurl的PECL扩展封装.
既然会出现curl第三库, 那肯定是用来解决php原生f系列函数不足的问题的,
curl
php
f系列函数
以下列出两点CURL与fopen, file_get_contents的区别, 参考自@shichen2014, 侵删
CURL
fopen, file_get_contents
fopen,file_get_contents每次请求都会做DNS查询, 并且对查询结果不缓存,
fopen
file_get_contents
DNS
fopen,file_get_contents在请求HTTP/S时,每次请求都建立tcp链接, 不支持Keeplive长连接,
tcp
Keeplive
建议读取本地文件采用file_get_contents, 读取远程文件还是采用第三方库
最简单的下载应该是file_put_contents,比如下载一张图片并保存到/tmp:
file_put_contents('/tmp/logo.gif',file_get_contents('https://www.baidu.com/img/bdlogo.gif'));
fopen/file_get_contents/file_put_contents这些都是PHP自己实现的文件/网络读写函数.而curl系列函数则是一个依赖第三方库libcurl的PECL扩展封装.它们对SSL的支持则都依赖libssl(openssl).
fopen/file_get_contents/file_put_contents
curl系列函数
libcurl
libssl(openssl)
很多人在需要用POST请求数据时都喜欢用curl,其实用PHP核心的file_get_contents也是可以的.
<?php $data = array('Client' => 'jQuery', 'Server' => 'PHP'); $data = http_build_query($data); //将数组urlencode为串Client=jQuery&Server=PHP $options = array( 'http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\nCookie: foo=bar\r\n", 'content' => $data, 'timeout' => 1 //超时时间,单位:秒 ) ); $context = stream_context_create($options); echo file_get_contents('http://127.0.0.1:8182', false, $context); // http://127.0.0.1:8182/index.php 脚本内容为 var_export($_POST); // 返回 array ( 'Client' => 'jQuery', 'Server' => 'PHP', )
参考 @eechen 的理解
既然会出现
curl
第三库, 那肯定是用来解决php
原生f系列函数
不足的问题的,以下列出两点
CURL
与fopen, file_get_contents
的区别, 参考自@shichen2014, 侵删fopen
,file_get_contents
每次请求都会做DNS
查询, 并且对查询结果不缓存,fopen
,file_get_contents
在请求HTTP/S时,每次请求都建立tcp
链接, 不支持Keeplive
长连接,建议读取本地文件采用
file_get_contents
, 读取远程文件还是采用第三方库最简单的下载应该是file_put_contents,比如下载一张图片并保存到/tmp:
fopen/file_get_contents/file_put_contents
这些都是PHP自己实现的文件/网络读写函数.而
curl系列函数
则是一个依赖第三方库libcurl
的PECL扩展封装.它们对SSL的支持则都依赖
libssl(openssl)
.很多人在需要用POST请求数据时都喜欢用curl,其实用PHP核心的file_get_contents也是可以的.