提问人:Justin 提问时间:10/2/2023 最后编辑:Chris HaasJustin 更新时间:10/2/2023 访问量:62
PHP8 从函数返回 ZipArchive getStream 会关闭包含的 zip 存档
PHP8 returning ZipArchive getStream from a function makes the containing zip archive to be closed
问:
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($fileName)
在与您尝试读取的相同函数中,它不会抛出错误。$row = fgetcsv($stream)
似乎这种行为从 php7.4 开始发生了变化,但我找不到任何关于它的文档。
有谁知道如何解决这个问题,以便可以从函数返回流并仍然使用?
答: 暂无答案
评论