PHP 文件系统 fpassthru() 函数



PHP 文件系统fpassthru()函数用于读取从打开文件中的当前位置到文件结尾 (EOF) 的所有数据。它还可以将结果写入输出缓冲区。此函数可以返回传递的字符数,或者在失败时返回 false。

当我们在 Windows 系统上的二进制文件中使用fpassthru()函数时,必须以二进制模式打开文件。

语法

以下是 PHP 文件系统fpassthru()函数的语法:

int fpassthru ( resource $handle )

参数

使用fpassthru()函数所需的参数如下:

序号 参数及说明
1

handle (必需)

这是由 fopen() 创建的文件指针资源。

返回值

它返回从文件指针读取的字节数。如果发生错误,它将返回 FALSE。

PHP 版本

fpassthru()函数最初作为核心 PHP 4 的一部分引入,并且与 PHP 5、PHP 7、PHP 8 兼容良好。

示例

在下面的 PHP 代码中,我们将打开一个文件并读取它的第一行。接下来,它使用 PHP 文件系统fpassthru()函数将文件的其余部分(从第二行开始)回显到输出缓冲区。

<?php
   $file = fopen("/PhpProject/sample.txt", "r");
 
   // Read first line
   fgets($file);

   // Send rest of the file to the output buffer
   echo fpassthru($file);
   fclose($file);
?>

输出

上述 PHP 代码的输出为:

Tutorix7

示例

在这个示例中,我们将打开一个文件并定义下载文件的标头。它通过使用fpassthru()函数将文件发送到用户的浏览器来启动文件下载。

<?php
   // Define the file path and open it
   $file = fopen("/Applications/XAMPP/xamppfiles/htdoc/mac/myfile.txt", "rb");

   //Define the content type
   header("Content-Type: application/octet-stream");

   header("Content-Disposition: attachment; filename='example.txt'");
   
   //Send data of file to browser
   fpassthru($file);

   //Close the file
   fclose($file);
?> 

输出

这将生成以下结果:

# The provided code will result in a file download prompt on the user's browser. The content is being received directly from the server, and the file that is being downloaded is called "myfile.txt".

示例

在这个示例中,我们将打开一个 JPEG 图片文件,并设置相应的 content-type 标头。我们将使用fpassthru()函数将图像内容直接输出到浏览器。

<?php
   // Open the image file here
   $image = fopen("image.jpg", "rb");

   //Define the content type
   header("Content-Type: image/jpeg");

   // Send image file to browser
   fpassthru($image);

   //Close the file
   fclose($image);
?> 

输出

这将产生以下结果:

The output of this code would be displaying the image "image.jpg" directly in the browser.

示例

现在,我们将尝试使用fpassthru()函数和将内容类型定义为视频来流式传输视频文件。

因此,代码打开 "video.mp4" 视频文件并将视频内容类型标头设置为 video/mp4。此外,"Accept-Ranges" 标头用于方便在视频内搜索。

<?php
   // Open the video file here
   $video = fopen("video.mp4", "rb");

   //Define the content type as video or mp4
   header("Content-Type: video/mp4");
   header("Accept-Ranges: bytes");

   //Send data to the user's browser
   fpassthru($video);

   //Close the file here
   fclose($video);
?> 

输出

这将导致以下结果:

# The output of this code will be streaming the video "video.mp4" directly in the browser's video player.

注意

在调用fpassthru()之前,务必使用 header() 等函数创建正确的标头,以定义内容类型并开始必要的操作,例如文件下载或内联显示。

总结

fpassthru()方法将文件内容直接流式传输到浏览器或输出缓冲区,此函数的特性使其成为管理文件下载、流式传输视频或类似场景的 Web 应用程序的有用工具。

php_function_reference.htm
广告