private function getFilePointer($file)
{
$pathInfo = pathinfo($file);
$zip = new ZipArchive();
if (($res = $zip->open($file)) !== true) {
throw new Exception("error");
}
$fileName = preg_replace('/\d+/', '', str_replace('.zip', '.csv', $pathInfo['basename']));
if (!($stream = $zip->getStream($fileName))) {
throw new Exception("error");
}
return $stream;
}
如果使用下面的函数来获取zip流并在中使用它
$row = fgetcsv($stream)
它会产生错误
PHP Error[2]: fgetcsv(): Zip stream error: Containing zip archive was closed
如果使用 $zip->getStream($文件名) 与您尝试阅读的功能相同
$row = fgetcsv($stream)
那么它就不会抛出错误。
似乎这种行为从 php7.4 开始已经改变,但我找不到任何关于它的文档。
有谁知道如何解决这个问题,以便流可以从函数返回并且仍然可以使用?
看起来像垃圾收集问题,可以使用
解决静态 $zip = new ZipArchive();