我注意到在 PHP4.4.1 中,gzfile 每行最多只讀取 8190 個位元組。我有一個 20K 的 SQL 查詢被切成 3 個部分 - 而且想知道為什麼 SQL 伺服器會抱怨。
使用 file() 命令讀取未壓縮的檔案則如預期般運作。
(PHP 4, PHP 5, PHP 7, PHP 8)
gzfile — 將整個 gz 壓縮檔讀入陣列
一個包含檔案內容的陣列,每個儲存格一行,包含空行,且仍附加換行符號,或者失敗時返回 false
。
範例 #1 gzfile() 範例
<?php
$lines = gzfile('somefile.gz');
foreach ($lines as $line) {
echo $line;
}
?>
我注意到在 PHP4.4.1 中,gzfile 每行最多只讀取 8190 個位元組。我有一個 20K 的 SQL 查詢被切成 3 個部分 - 而且想知道為什麼 SQL 伺服器會抱怨。
使用 file() 命令讀取未壓縮的檔案則如預期般運作。
一種將 gzip 壓縮檔載入字串的更快方法
<?php
function gzfile_get_contents($filename, $use_include_path = 0)
{
//檔案不存在
if( !@file_exists($filename) )
{ return false; }
//讀取並合併陣列以產生單行字串
$data = gzfile($filename, $use_include_path);
$data = implode($data);
return $data;
}
?>
這與 gzfile() 的運作方式類似,但它以字串而不是陣列的形式返回檔案,並且與 readgzfile 相比,它不會將檔案寫入 stdout。
注意:與通常的檔案函式不同,filesize 在這裡不起作用,因為 gzread 的長度參數指的是未壓縮的長度,而 filesize 返回的是壓縮檔案的大小。
<?php
函式 gzfile_get_contents($filename, $use_include_path = 0) {
$file = @gzopen($filename, 'rb', $use_include_path);
if ($file) {
$data = '';
while (!gzeof($file)) {
$data .= gzread($file, 1024);
}
gzclose($file);
}
return $data;
}
?>