1

これは本当のヘッドスクラッチャーです - どんな助けも感謝して受け取ります.

zipArchive ライブラリを使用して、zip から csv ファイルを抽出しています。

奇妙なことに、40 個のファイルしか適切に抽出されません。インデックス 40 以上のファイルは空のファイルとして表示され、ファイル 0 ~ 39 は完全に抽出されます。

これは、ファイルの組み合わせとファイルのサイズに関係なく当てはまります。zip から 39 番目のファイルと 40 番目のファイルを削除しようとしましたが、問題は移動します。使用するファイルの組み合わせに関係なく、40 個のファイルを適切に抽出した後、ただ死んでしまいます。

このフォーラムのおかげで、まったく同じ結果で Shell Exec を使用してみました。また、csvファイルのみのzipと複数の異なるファイルタイプのzipを使用して、一度に1つずつファイルを抽出しようとしました。常に 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);
            }


 }
}
4

1 に答える 1

0

最後に答えを見つけました。助けようとしたすべての人に感謝します。

同じように苦しんでいる他の人にとっては、サーバーのディスク割り当てを増やすことで問題が解決しました。私は、ストレージの量を 10 倍に増やした新しい全国データベースが登場するまでは、かなり古い計画を立てていました。わずか 100MB の許容量は、サーバーがダミーを吐き出す前にそれだけのことしかできないことを意味しました。

興味深いことに、他のファイル操作を試みると同様の問題が発生しました。各ファイルのサイズに関係なく、スクリプトごとに 40 個のファイル操作に制限されているようです。

于 2013-06-04T07:49:15.120 に答える