【php】PHP中file_get_contents()与file_put_contents()函数细节详解
file_get_contents函数
一般的也就是使用file_get_contents($url),但是关于这个函数还有很多没有注意到的地方。
先看关于手册:
file_get_contents(path,include_path,context,start,max_length)
参数
描述
path
必需。规定要读取的文件。
include_path
可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 “1″。
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start
可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length
可选。规定读取的字节数。该参数是 PHP 5.1 新加的。
——————-可以选择读取文件位置和长度这个选项不错。但是关于context的选项是做什么用的呢?
强大的context——stream_context_create
context 就是文本流的意思。而在php中创建文本流的函数是:stream_context_create
参看官方手册:http://php.net/manual/en/function.stream-context-create.php
stream_context_create是用来创建打开文件的上下文件选项的,比如用POST访问,使用代理,发送header等。看到没有之前用curl实现的所谓代理,post,header方法都可以使用file_get_contents+stream_context_create来实现。
之前在《PHP批量采集下载美女图片》中抱怨file_get_contents采集图片时候经常会遇到慢资源造成cpu负载过高,不能设置超时时间,最后使用curl来实现,其实file_get_contents也可以设置超时时间。
file_get_contents超时设置
1
|
$opts = array ( 'http' => array ( 'timeout' =>10));
|
2
|
$context = stream_context_create( $opts );
|
3
|
echo file_get_contents ( $url ,false, $context );
|
这样就可以实现设置10s的超时时间
更强大的file_get_contents
file_get_contents实现post
参看官方手册的例子
1
|
$opts = array ( 'http' =>
|
2
|
array (
|
3
|
'method' => 'POST' ,
|
4
|
'header' => "Content-Type: text/xmlrn" .
|
5
|
"Authorization: Basic " . base64_encode ( "$https_user:$https_password" ). "rn" ,
|
6
|
'content' => $body ,
|
7
|
'timeout' => 60
|
8
|
)
|
9
|
);
|
10
|
11
|
$context = stream_context_create( $opts );
|
12
|
$url = 'https://' . $https_server ;
|
13
|
$result = file_get_contents ( $url , false, $context , -1, 40000);
|
还可以实现get请求,header代理等等功能,理论上curl可以实现的功能file_get_contents都可以实现,但是关于stream_context_create的解释网络上资源不是很多,也注定在采集程序方面curl的应用更广,另外curl是一种通信模式,不是单纯的php-curl。
之前写过关于解决gzip乱码的问题《:file_get_contents获取gzip网页乱码》
更多高级使用方法参看官方手册的实例:http://php.net/manual/en/function.stream-context-create.php,http://php.net/manual/en/function.file-get-contents.php
file_put_contents函数
语法:
file_put_contents(file,data,mode,context)
参数
描述
file
必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data
可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode
可选。规定如何打开/写入文件。可能的值:
- FILE_USE_INCLUDE_PATH
- FILE_APPEND
- LOCK_EX
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
注意事项:
- file_put_contents等于依次调用 fopen(),fwrite() 以及 fclose() 功能一样,但是效率要更高。
- data不仅仅是字符串,也包括数组格式和文本流,当是数组格式的时候(只能是一维数组,不能是多维数组),需要把数组分割implode(”, $array),其实还是转换为字符串,如果不分割的话文本存储的内容就是$array[0]$array[1]$array[2]$array[3]这种,不利于读取。文本流这个就更好理解了,例如存储file_get_contents(‘aa.jpg’)这一张图片的二进制流也是可以存储的。
- 模式:FILE_APPEND 是追加模式,默认的写入方式是覆盖之前的内容,但是使用FILE_APPEND 模式后就可以不覆盖之前的内容了。LOCK_EX是文本锁,防止并行写入冲突。
- context 和上面的file_get_contents一样,可以增加文本流选项,官方的一个例子
1
|
<?php
|
2
|
/* set the FTP hostname */
|
3
|
$user = "test" ;
|
4
|
$pass = "myFTP" ;
|
5
|
$host = "example.com" ;
|
6
|
$file = "test.txt" ;
|
7
|
$hostname = $user . ":" . $pass . "@" . $host . "/" . $file ;
|
8
|
9
|
/* the file content */
|
10
|
$content = "this is just a test." ;
|
11
|
12
|
/* create a stream context telling PHP to overwrite the file */
|
13
|
$options = array ( 'ftp' => array ( 'overwrite' => true));
|
14
|
$stream = stream_context_create( $options );
|
15
|
16
|
/* and finally, put the contents */
|
17
|
file_put_contents ( $hostname , $content , 0, $stream );
|
18
|
?>
|
【php】PHP中file_get_contents()与file_put_contents()函数细节详解相关推荐
- python format函数实例_python中强大的format函数实例详解
python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...
- Pandas中loc和iloc函数用法详解(源码+实例)
loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行) iloc函数:通过行号来取行数据(如取第二行 ...
- c语言将字符串按空格分割_如何在c++中实现字符串分割函数split详解
前言 在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割, ...
- js去掉前后空格的函数_MySQL 中常见的字符串函数应用详解
在前面若干章节中,我们介绍了SQL的基础与高阶语法,接下来,我们将分四个章节,介绍MySQL中常见的函数应用,大致分为如下几个章节: MySQL 字符串函数 MySQL 数字函数 MySQL 日期函数 ...
- webRTC中语音降噪模块ANS细节详解(一)
ANS(adaptive noise suppression) 是webRTC中音频相关的核心模块之一,为众多公司所使用.从2015年开始,我在几个产品中使用了webRTC的3A(AEC/ANS/AG ...
- scanf()函数的详解以及使用时需要注意的一些细节-C语言基础
这篇文章要探讨的是"scanf()函数的详解以及使用时需要注意的一些细节".涉及scanf()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). scanf()(函数原型: ...
- fgets()函数的详解以及使用时需要注意的一些细节-C语言基础
这篇文章要探讨的是"fgets()函数的详解以及使用时需要注意的一些细节".涉及fgets()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). fgets()(函数原型: ...
- 数字图像处理:OpenCV-Python中的直方图均衡知识介绍及函数equalizeHist详解
一.引言 在<数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍 >(链接:https://blog.csdn.net/LaoYuanPython/a ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
最新文章
- Spark1.0 安装
- Mybatis通用Mapper
- opencv:在二维定标中的应用
- linux 内核 sleep,linux内核是如何支持深度睡眠(deep sleep)方式的?
- 羽毛球比赛裁判常用英语术语
- GraphQL支持层级结构的query
- 海量数据处理分析(部分)
- Oracle取同一类别中某属性最大或者最小值的一条
- linux命令存放 bash: xxx command not found
- Linux手机研发要过五大难关
- CentOS 6.5下安装Docker
- 使用阿里巴巴矢量图标库下载所需的小图标
- Excel内容自动翻译
- 为什么不同文化中都会发现圆形房屋
- 浅议初中语文微写作(语文教师论文)
- 时间序列分类01:人类活动识别深度学习模型综述
- opencv+python机读卡识别(一)预处理
- 4线触摸屏控制器ET2046介绍
- 【P4】解决本地文件修改与库文件间的冲突问题
- SWING实现类似微信的泡泡聊天界面