PHP | file_get_contents 函数
怎样方便高效读取文件
最近更新时间 2021-01-02 12:10:09
file_get_contents 函数读取整个文件。
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。如果操作失败返回 false。
file_get_contents() 函数可用于获取网页内容,如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。
谨慎使用 offset 和 maxlen 参数,如果文件中包含中文,可能出现乱码。
函数定义
file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] ) : string
// 源文件位于:ext/standard/file.c
# 函数定义
PHP_FUNCTION(file_get_contents)
{
...
if (maxlen_is_null) {
maxlen = (ssize_t) PHP_STREAM_COPY_ALL;
} else if (maxlen < 0) {
zend_argument_value_error(5, "must be greater than or equal to 0");
RETURN_THROWS();
}
context = php_stream_context_from_zval(zcontext, 0);
stream = php_stream_open_wrapper_ex(filename, "rb",
(use_include_path ? USE_PATH : 0) | REPORT_ERRORS,
NULL, context);
if (!stream) {
RETURN_FALSE;
}
if (offset != 0 && php_stream_seek(stream, offset, ((offset > 0) ? SEEK_SET : SEEK_END)) < 0) {
php_error_docref(NULL, E_WARNING, "Failed to seek to position " ZEND_LONG_FMT " in the stream", offset);
php_stream_close(stream);
RETURN_FALSE;
}
if (maxlen > INT_MAX) {
php_error_docref(NULL, E_WARNING, "maxlen truncated from " ZEND_LONG_FMT " to %d bytes", maxlen, INT_MAX);
maxlen = INT_MAX;
}
if ((contents = php_stream_copy_to_mem(stream, maxlen, 0)) != NULL) {
RETVAL_STR(contents);
} else {
RETVAL_EMPTY_STRING();
}
php_stream_close(stream);
}
参数
- checkfilename - 文件名称,包括路径。
- checkuse_include_path - 可选参数,默认为 false。
- checkcontext - 可选参数,自定义 context。
- checkoffset - 可选参数,开始读取的位置,不能小于 0,默认从文件开始位置。如果文件中包含中文,可能会出现乱码。
- checkmaxlen - 可选参数,读取文件的长度。
返回值
- checkbool - 成功时返回字符串,失败时返回 false。需注意空字符串等与 false 的区别。
示例1: - 使用 file_get_contents() 函数读取整个文件。
<?php
/**
* PHP 使用 file_get_contents() 函数读取整个文件。
*
* @since Version 1.0.0
* @filesource
*/
// 文件路径,可使用网址
$filename = 'https://docsxyz.com/wiki/news/windows-7-risk';
// 读取文件
$content = file_get_contents($filename);
示例2: - 使用 stream contexts 读取文件。
<?php
/**
* PHP 使用 stream contexts 读取文件。
*
* @since Version 1.0.0
* @filesource
*/
// 网址
$filename = 'https://docsxyz.com';
// 创建 stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($filename, false, $context);