PHP | readfile 函数
怎样输出文件
最近更新时间 2021-01-19 18:00:23
readfile 函数输出文件。
读取文件并写入到输出缓冲。
函数定义
readfile ( string $filename , bool $use_include_path = false , resource $context = ? ) : int
// 源文件位于:ext/standard/file.c
# 函数定义
PHP_FUNCTION(readfile)
{
char *filename;
size_t filename_len;
size_t size = 0;
zend_bool use_include_path = 0;
zval *zcontext = NULL;
php_stream *stream;
php_stream_context *context = NULL;
ZEND_PARSE_PARAMETERS_START(1, 3)
Z_PARAM_PATH(filename, filename_len)
Z_PARAM_OPTIONAL
Z_PARAM_BOOL(use_include_path)
Z_PARAM_RESOURCE_OR_NULL(zcontext)
ZEND_PARSE_PARAMETERS_END();
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) {
size = php_stream_passthru(stream);
php_stream_close(stream);
RETURN_LONG(size);
}
RETURN_FALSE;
}
参数
- checkfilename - 要读取的文件名。
- checkuse_include_path - 想要在 include_path 中搜索文件。可选参数,默认为 false。
返回值
- checkint - 成功时返回从文件中读入的字节数。错误时返回 false。
示例1: - 使用 readfile() 函数输出文件。
<?php
/**
* PHP readfile() 函数输出文件。
*
* @since Version 1.0.0
* @filesource
*/
// 按二进制输出 gif 文件
$filename = 'nick.gif';
// 判断文件是否存在
if(file_exists($filename)) {
// 设置 Header
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
}