PHP file_get_contents() 函数

PHP file_get_contents() 函数


PHP Filesystem 参考手册 完整的 PHP Filesystem 参考手册

定义和用法

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。


类似函数:fopen() 函数打开一个文件或 URL。区别是fopen()打开网页后,返回的不是字符串,不能直输出的,还需要用到fgets()这个函数来获取字符串。fgets()函数是从文件指针中读取一行。文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。

相关函数:file_put_contents() 函数把一个字符串写入文件中。

语法

file_get_contents(path,include_path,context,start,max_length)

参数 描述
path 必需。规定要读取的文件,或者url。
include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。


提示和注释

提示:该函数是二进制安全的。(意思是二进制数据(如图像)和字符数据都可以使用此函数写入。)


实例

<?php
echo file_get_contents("test.txt");
?>

上面的代码将输出:

This is a test file with test text.

实例2

获取某个网址页面的源代码也可以使用file_get_contents() 函数

<?php
 $pagecontent = file_get_contents("http://www.sxiaw.com");
 echo $pagecontent;
 ?> 

上面的代码将输出:

http://www.sxiaw.com地址所对应的源代码

Note:

如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。


file_get_contents函数超时处理

在使用file_get_contents函数读取文件或URL的时候,经常会出现超时的情况,我们可以通过一些方法来尽量的避免或者解决。

1、增加超时的时间限制 

这里需要注意:set_time_limit(0)只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。 

想通过set_time_limit(0)影响到file_get_contents来增加超时时间,经测试,是无效的。真正的修改file_get_contents延时可以用resource $context的timeout参数,timeout参数的单位是s(秒)。 

实例:

$opts = array( 
    'http'=>array( 
        'method'=>"GET", 
        'timeout'=>30, 
    ) 
); 
$html = file_get_contents('http://www.example.com', false, stream_context_create($opts)); 

2、超过几秒就重新执行,多次重试直到成功

file_get_contents超时有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回 FALSE,所以可以下面这样编写代码:
$cnt=0; 
while($cnt < 3 && ($str=@file_get_contents('http://www.sxiaw.com'))===FALSE) $cnt++;

注意:如果执行时间过长,还需要用函数set_time_limit(0);就不会超时了。


file_get_contents函数代理设置处理

设置代理IP去获取页面数据

$context = array( 
    'http' => array( 
        'proxy' => 'tcp://192.168.0.1:3128',  //这里设置你要使用的代理ip及端口号 
        'request_fulluri' => true, 
    ), 
); 
$context = stream_context_create($context); 
$html = file_get_contents("http://www.sxiaw.com/archives/806/", false, $context); 
echo $html;
设置需要验证的代理IP去采集获取页面数据
$auth = base64_encode('USER:PASS');   //LOGIN:PASSWORD 这里是代理服务器的账户名及密码 
$context = array( 
    'http' => array( 
        'proxy' => 'tcp://192.168.0.1:3128',  //这里设置你要使用的代理ip及端口号 
        'request_fulluri' => true, 
        'header' => "Proxy-Authorization: Basic $auth",
    ), 
); 
$context = stream_context_create($context); 
$html = file_get_contents("http://www.sxiaw.com/archives/806/", false, $context); 
echo $html;


PHP Filesystem 参考手册 完整的 PHP Filesystem 参考手册