これは本当のヘッドスクラッチャーです - どんな助けも感謝して受け取ります.
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);
}
}
}