PHP Conference Japan 2024

bzread

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

bzread二进制安全的bzip2文件读取

描述

bzread(资源 $bz, 整数 $length = 1024): 字符串|false

bzread() 从给定的bzip2文件指针读取。

当读取了length(未压缩)字节或到达文件结尾 (EOF) 时,读取停止,以先发生者为准。

参数

bz

文件指针。它必须有效,并且必须指向由bzopen()成功打开的文件。

length

如果未指定,bzread() 将一次读取 1024(未压缩)字节。一次最多读取 8192 个未压缩字节。

返回值

返回未压缩的数据,或在出错时返回false

示例

示例 #1 bzread() 示例

<?php

$file
= "/tmp/foo.bz2";
$bz = bzopen($file, "r") or die("无法打开 $file");

$decompressed_file = '';
while (!
feof($bz)) {
$decompressed_file .= bzread($bz, 4096);
}
bzclose($bz);

echo
"$file 的内容是:<br />\n";
echo
$decompressed_file;

?>

参见

  • bzwrite() - 二进制安全的bzip2文件写入
  • feof() - 测试文件指针的文件结尾
  • bzopen() - 打开bzip2压缩文件

添加笔记

用户贡献笔记 2 条笔记

user@anonymous
12年前
确保在循环遍历 bzfile 时检查 bzerror。bzread 不会检测压缩错误,即使以 100% 的 CPU 为代价,也可能无限期地继续。

$fh = bzopen('file.bz2','r');
while(!feof($fh)) {
$buffer = bzread($fh);
if($buffer === FALSE) die('读取问题');
if(bzerror($fh) !== 0) die('压缩问题');
}
bzclose($fh);
匿名
9年前
前面发布的代码中有一个小错误:它使用 bzerror 而不是 bzerrno。应该是这样的

$fh = bzopen('file.bz2','r');
while(!feof($fh)) {
$buffer = bzread($fh);
if($buffer === FALSE) die('读取问题');
if(bzerrno($fh) !== 0) die('压缩问题');
}
bzclose($fh);
To Top