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);