强制PHP读取带有CRC错误的ZipFile条目



我正在尝试读取PHP中的一个zip文件,我知道该文件存在CRC错误。不幸的是,看起来我只能读取31个字节的文件。仅使用$zip->getFromName()不会产生错误,但只读取31字节的

$zip = new ZipArchive;
$zip->open("path/to/corrupted.zip");
// $contents will become just 31 bytes
$contents = $zip->getFromName("file/in/zip.txt");

尝试从流$zip->getStream()读取将给出CRC错误,并且再次仅读取31字节

$fp = $zip->getStream("file/in/zip.txt");
$contents = "";
while (!feof($fp)) {
// Gives the error "fread(): Zip stream error: CRC error in ..."
// Using 1 instead of 2 still only reads 31 bytes but gives no error
$contents .= fread($fp, 2);
}
fclose($fp);

那么,有没有什么方法可以忽略这个CRC错误,并以任何方式读取文件?

一个小背景:我的网站预先处理用户上传的.jar文件,然后再由其他人下载。用户偶尔会上传一个带有CRC错误的有效.jar文件,试图阻止人们对其进行反编译。然而,我仍然希望能够预处理这些文件以供下载。

我有一个用Python编写的不同的预处理器,通过修改zip文件库并注释掉执行CRC检查的行,我可以非常容易地禁用CRC检查。有没有什么简单的方法可以让我在PHP中做类似的事情,而不需要制作自己的ZipFile库?我想最坏的情况是我需要做的。

您可以切换到纯php zip库,这样您就可以删除crc检查,而不必自己重写整个库,也不必编译本地代码。以下是一个示例:https://www.phpclasses.org/package/3864-PHP-Create-and-extract-ZIP-archives-in-purely-in-PHP.html

相关内容

最新更新