array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'zh', ), 'this' => array ( 0 => 'function.fpassthru.php', 1 => 'fpassthru', ), 'up' => array ( 0 => 'ref.filesystem.php', 1 => '文件系统函数', ), 'prev' => array ( 0 => 'function.fopen.php', 1 => 'fopen', ), 'next' => array ( 0 => 'function.fputcsv.php', 1 => 'fputcsv', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'zh', 'path' => 'reference/filesystem/functions/fpassthru.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
fpassthru — 输出文件指针处的所有剩余数据
将给定的文件指针从当前的位置读取到 EOF 并把结果写到输出缓冲区。
如果已经向文件写入数据,就必须调用 rewind() 来将文件指针指向文件头。
如果既不修改文件也不在特定位置检索,只想将文件的内容下载到输出缓冲区,应该使用 readfile(),这样可以省去 fopen() 调用。
返回从 stream
读取并传递到输出的字符数量。
示例 #1 对二进制文件使用 fpassthru()
<?php
// 以二进制格式打开文件
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// 发送合适的报头
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// 发送图片并终止脚本
fpassthru($fp);
exit;
?>
注意:
当在 Windows 系统中将 fpassthru() 用于二进制文件,要确保在用 fopen() 打开文件时在 mode 中附加了
b
来将文件以二进制方式打开。鼓励在处理二进制文件时使用
b
标志,即使系统并不需要,这样可以使脚本的移植性更好。