2024 PHP Conference Japan

bzread

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

bzread二進位制安全 bzip2 檔案讀取

說明

bzread(資源 $bz, int $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 則註釋

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);
1
匿名
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