PHP的file_get_contents函数用法
PHP的file_get_contents()函数是非常常用的一个函数,在使用PHP开发Web应用程序时经常用到,它可以快速地获取URL、本地文件或字符串等信息内容。
该函数的基本语法如下:
mixed file_get_contents ( string $filename [, bool $use_include_path = FALSE [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
其中,$filename是必填参数,表示要获取的文件名称或URL地址;$use_include_path是可选参数,表示是否在include_path中搜索流;$context表示一个可选的上下文资源,可以用来设定各种流的参数,比如HTTP请求头;$offset和$maxlen表示文件中开始读取的偏移量和最大读取的长度。
示例1:
获取本地文件的内容
$filename = "test.txt";
$content = file_get_contents($filename);
echo $content;
示例2:
获取远程URL文件的内容
$url = "http://www.baidu.com";
$content = file_get_contents($url);
echo $content;
示例3:
通过流context来获取远程URL文件的内容
$url = "http://www.baidu.com";
$opts = array('http' => array('method' => "GET",
'header' => "Accept-language: en\r
" .
"Cookie: name=value\r
"));
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
echo $content;
示例4:
读取文件的一部分
$filename = "test.txt";
$offset = 10; //从第10个字符开始读取
$maxlen = 20; //最多读取20个字符
$content = file_get_contents($filename, false, null, $offset, $maxlen);
echo $content;
常见问题:
1.如何处理由于file_get_contents获取内容太多而报错的问题?
如果文件/URL中的内容过多,可能会导致系统内存不足,从而抛出一个致命错误。为了避免这种情况发生,我们可以在获取内容前,先判断文件/URL的长度,并设置一个最大长度。
示例:
$content=file_get_contents("http://www.baidu.com");
$len=strlen($content);
if($len>1024*1024){
throw new Exception('文件过大');
}
2.如何控制超时时间?
在使用file_get_contents获取URL内容时,有时可能会出现等待时间过长,导致超时的情况,解决方法也很简单,可以通过设置流的超时时间来控制等待时间。需要注意的是,PHP的file_get_contents默认的超时时间是60秒,对于需要等待时间较长的请求,可能需要将超时时间设置更长。
示例:
$url = "http://www.baidu.com";
$opts = array('http' => array('method' => "GET",
'timeout' => 5 //5秒超时
));
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
echo $content;
3.如何在file_get_contents获取内容时,做一些进度显示和调试信息输出?
我们可以使用PHP的输出缓存机制,在读取到每个数据块时输出调试信息或进度条。
示例:
$url = "http://www.baidu.com";
$context = stream_context_create(array(
'http' => array('method' => 'GET',
'progress' => function($resource,$downloaded,$total) {
printf("%d/%d (%d%%)
",
$downloaded, $total, 100 * $downloaded / $total);
}
)));
$content = file_get_contents($url, false, $context);
echo $content;
总结
file_get_contents是PHP中常用的文件读取函数,能够方便地获取URL、本地文件或字符串等信息内容。使用该函数时,需要注意控制读取的文件大小、设置超时时间、以及输出调试信息和进度显示等问题。
