PHP:如何检查gz文件是否损坏?

5

有没有办法在PHP中检测gz文件是否损坏?

我目前正在使用http://www.php.net/manual/de/function.gzread.php#110078来确定文件大小并通过读取整个*文件来进行操作。

$zd = gzopen ( $file, "r" );
$contents = gzread ( $zd, $fzip_size );
gzclose ( $zd );

很遗憾,一些gz文件已经损坏了,最后4个字节并不代表gz文件的真实长度。只要数字是负数,我就能知道出现了问题,但有时它是正数(且非常大),导致内存溢出错误。如何在事先检查文件是否损坏?

  • 我读取整个文件,因为我没有找到有效的方法可以逐行读取文件而不知道最长行的大小 - 这导致有些行不完整。

请查看以下内容:http://unix.stackexchange.com/questions/15157/how-to-check-if-a-file-is-corrupt-or-not - Muhammad
1
打开文件时应该使用"rb"而不是"r"。这样你就可能一开始就不会遇到问题了。 - Mark Adler
1个回答

0
如果你能使用Linux的gzip命令,那么查找文件是否正确将非常简单。gzip -t命令会在文件有效时不显示任何信息。
if (`gzip -t $file 2>&1`) {
    echo "An error occured";
}

在PHP中,if ('gzip -t $file 2>&1')将始终返回true。这是一个字符串。 - c-griffin
2
@c-griffin:if条件执行外部程序。结果是空字符串或非空字符串。请注意,`不同于您在评论中使用的'。来源:[链接](http://php.net/manual/en/language.operators.execution.php) - Mariusz
嗯,你说得对!抱歉,我以为那是单引号,甚至不知道你可以使用反引号来运行 shell 命令。 - c-griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接