亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php gzseek 似乎超出了文件大小

php gzseek 似乎超出了文件大小

PHP
撒科打諢 2023-10-15 15:47:51
在過去的兩年里,當我嘗試確定文件的大小時,特別是 gz zip 壓縮文件的大小時,我斷斷續續地遇到了一個奇怪的問題。我已經找到了解決方法,但它們并不理想。問題是 gzseek() 似乎總是尋找大約。無論未壓縮文件的大小如何,文件大小均為 2.14GB。測試時,我通過 1) 解壓縮并保存為文本,2) 使用 gzread() 讀取 1MB 直到文件末尾來確定未壓縮文件的大小。假設未壓縮的文件大小為 13MB。使用 gzseek() 和 gztell() 測試代碼。這將使句柄前進 1mb / 1000000 字節,但始終持續到大約。2.14GB,無論未壓縮文件大小如何://GZ file is opened ....gzseek($Handle, 0, SEEK_SET);while (true) {  //Seek through file advancing offset with 1000000 bytes each time  $Eof  = gzseek($Handle, 1000000, SEEK_CUR);  //0 or -1 if passed eof  //This will dump the handle position incrementing 1000000 bytes at the time but continue until  //approx. 2.14 GB even through file is 13MB uncompressed  var_dump(gztell($Handle));   //When the handle (via gztell() ) shows 2.14GB, the gzseek() returns -1 which means it   //has reached / gone pas end of file  if ( $Eof !== -1 ) {     //This will only be true once the gztell() shows approx. 2.14GB     break;  } }現在,如果使用 gzread() ,它將正常工作,句柄將前進 1mb/1000000 字節,直到 13mb。例如:while ( !gzeof($Handle) ) {   $Data = gzread($Handle, 1000000);}在過去的幾年里,我對此進行了大量研究,但從未找到測量 gz 文件大小的有效解決方案,也沒有任何關于為什么不能使用 gzseek 完成此操作的報告,我覺得這有點奇怪。要么 gzseek 不起作用,我希望找到報告,要么我真的在這里遺漏了一些東西。
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

您缺少的是,就像 一樣fseek(),gzseek()可以并將讀取或寫入指針設置到您要求的任何位置,包括文件末尾之外的位置。這些函數不檢查文件末尾。事實上,fseek()清除文件結束標志,以允許讀取不斷增長的文件。

只有當您在查找后進行讀取時,它才會確定您是否到達或超出了文件末尾。

與您的說法相反,您實際上已經找到了一種確定 gzip 文件未壓縮大小的可行解決方案,即使用gzread().


查看完整回答
反對 回復 2023-10-15
  • 1 回答
  • 0 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號