2013-05-19 61 views
1

這是一個真正的頭刮擦 - 任何幫助將受到感謝。PHP ZipArchive無法正確提取CSV文件

我一直在使用zipArchive庫從zip中提取csv文件。

奇怪的是,它只能正確提取40個文件。索引爲40或更大的文件顯示爲空文件,文件0-39完美提取。

無論文件的組合和文件的大小如何,都是如此。我試過從zip中刪除第39個文件和第40個文件,問題就在移動。無論使用哪種文件組合,它都能正確提取40個文件,然後纔會死掉。

感謝這個論壇,我已經嘗試使用殼牌執行完全相同的結果。 我也嘗試一次提取一個文件,使用一個只有csv文件和多個不同文件類型的zip文件的zip文件。總是隻有40個被提取。

這是一個可疑的圓形數字,它肯定是一個設置的地方,我找不到或其他錯誤。

對於什麼是價值,拉開拉鍊代碼如下:

$zip = new ZipArchive; 
    if ($zip->open('Directory/zipname.zip') == TRUE) { 
    for ($i = 0; $i < $zip->numFiles; $i++) { 
     $filename = $zip->getNameIndex($i); 
     if(substr(strrchr($filename,'.'),1,3)=="csv") 
     { 
     $zip->extractTo('Directory/',$filename); 
     } 
     } 
    } 

我也嘗試它採用了不同的方法,結果相同:-(

$zip2 = new ZipArchive; 
if ($zip2->open('Directory/zipname.zip') == TRUE) { 
for ($i = 0; $i < $zip2->numFiles; $i++) { 
    $filename = $zip2->getNameIndex($i); 
    if(substr(strrchr($filename,'.'),1,3)=="csv") 
      { 
      $content=$zip2->getFromIndex($i); 
      $thefile=fopen("directory/filename","w"); 
      fwrite($thefile,$content); 
      fclose($thefile); 
      } 


} 
} 
+0

您使用的是什麼版本的PHP? – user0000001

+0

另外,如果是PHP相關問題,另一種可行的方法是使用'exec()'使用系統本地ZIP二進制文件。唯一的問題是,服務器上可能沒有ZIP處理程序。只是一個想法。 – user0000001

+0

只是要確定 - 你是否嘗試通過其他存檔提取文件,並且它工作正常嗎? –

回答

0

終於找到了以下答案。謝謝所有試圖提供幫助的人。

對於其他同樣的問題,通過增加服務器磁盤分配來解決問題。直到新的國家數據庫的出現使存儲量增加了10倍。 一個可憐的100MB容量意味着服務器只會在吐出假人之前這麼做。

有趣的是,嘗試其他文件操作時發生了類似的問題 - 無論每個文件的大小如何,它似乎都受限於每個腳本40個文件操作。