欢迎访问宙启技术站
智能推送

PHP函数:如何使用file_get_contents函数从URL获取文件内容?

发布时间:2023-06-07 11:20:28

1. 什么是file_get_contents函数?

file_get_contents()函数是PHP常用的文件读取函数之一,可用来访问远程URL并读取其中的内容,也能够读取本地文件。该函数在PHP5及其以上版本都适用。

2. 语法及参数列表

file_get_contents()函数具有简单的语法:

mixed file_get_contents ( string $filename [, bool $use_include_path = FALSE [, resource $context [, int $offset = -1 [, int $maxlength ]]]] )

参数说明:

* $filename:所要读取的文件名称。如果是远程文件,需要带上http协议。

* $use_include_path:可选。如果设置为TRUE,则在include_path目录中查找文件。

* $context:可选。为请求文件设置HTTP请求头(HTTP header)。比如headers信息。

* $offset:可选。规定从文件中的第几个字节开始读取,如果不指定,则从 个字节开始读取。

* $maxlength: 可选。规定所要读取的最大字节数,如果不指定,则读取整个文件。

3. 使用示例

在读取远程URL文件之前,需要确保PHP已安装cURL扩展包。例如,读取百度主页的源码:

$url = "http://www.baidu.com";
$data = file_get_contents($url);
echo $data; //打印百度主页的HTML代码

如果想读取本地文件,只需将文件路径作为参数传入即可。例如:

$file_path = 'C:\test.txt';
$data = file_get_contents($file_path);
echo $data;

4. 读取文件超时设置

使用file_get_contents()函数时,该函数会等待获得完整的文件内容,所以可能会存在读取文件超时的情况,从而导致PHP脚本被阻塞。为解决这个问题,可以在函数调用前先使用ini_set()函数设置读取文件超时的时间。

例如:

ini_set("default_socket_timeout", 20);
$url = "http://www.baidu.com";
$data = file_get_contents($url);
echo $data;

上面的代码中,default_socket_timeout设置为20秒,表示当读取文件超过20秒时,file_get_contents()函数将返回false。

5. 使用HTTP请求头

file_get_contents()函数支持设置HTTP请求头,如User-Agent、Referer和Cookie等。示例如下:

$url = "http://www.baidu.com";
$opts = [
    'http' => [
        'method' => 'GET',
        'header' => [
            'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
            'Referer: http://www.baidu.com',
            'Cookie: user_id=123456; session_id=abcdefg'
        ]
    ]
];
$context = stream_context_create($opts);
$data = file_get_contents($url, false, $context);
echo $data;

上面的代码中,设置了User-Agent、Referer和Cookie三个HTTP头信息。首先,定义了一个$opts数组,并设置了http选项,其中method为请求方法,header为HTTP请求头。然后,使用stream_context_create()函数函数创建Context,并将$opts作为参数传入。最后,通过调用file_get_contents()函数,将$content上下文流作为第三个参数传递给该函数。

6. 错误处理

在使用file_get_contents()函数时,访问URL文件或本地文件不一定总是成功的,需要使用一些方法来判断成功与否。如果访问URL失败,则file_get_contents()函数将返回false。在这种情况下,可以使用error_get_last()函数来获得错误信息,并进行相应的错误处理。示例如下:

$url = "http://www.baidu.com";
$data = file_get_contents($url);
if(strpos($http_response_header[0], "200")) {
    echo $data;
} else {
    $error = error_get_last();
    echo "出错了:" . $error['message'];
}

在上面的示例中,先判断所访问URL文件的HTTP响应头的 行,如果响应码是“200 OK”则代表访问成功,打印获取到的文件内容;否则,通过error_get_last()函数获得PHP最新的错误信息,并将其打印出来。

7. 总结

本文介绍了使用file_get_contents()函数从URL获取文件内容的方法,包括函数语法及参数、使用示例、读取文件超时设置、使用HTTP请求头和错误处理。希望本文对大家有所帮助。