Phar 无法提取文件
Posted
技术标签:
【中文标题】Phar 无法提取文件【英文标题】:Phar unable to extract a file 【发布时间】:2021-03-04 22:23:47 【问题描述】:我正在尝试使用 Phar Classe 提取 tar 文件,但返回以下错误:
UnexpectedValueException Object ( [message:protected] => phar error: "/home/filelocation/file.tar" is a corrupted tar file (truncated) [string:Exception:private] => [code:protected] => 0 [file:protected] => /home/inplan/public_html/uncompress_files.php [line:protected] => 89 [trace:Exception:private] => Array ( [0] => Array ( [file] => /home/inplan/public_html/uncompress_files.php [line] => 89 [function] => __construct [class] => PharData [type] => -> [args] => Array ( [0] => uploads/maps/true_color_4.tar ) ) ) [previous:Exception:private] => )
PHP:
try
$phar = new PharData('uploads/maps/true_color_'.$id_technical_report.'.tar');
$phar2 = $phar->convertToExecutable (Phar::TAR,Phar::NONE);
$phar2->extractTo('uploads/maps/');
catch (Exception $e)
print_r($e);
当我下载这个文件时,我可以使用 Winrar 正常打开和解压。
该文件由 Sentinel Hub (https://services.sentinel-hub.com/api/v1/process) 的 API 生成
任何想法为什么会发生这种情况?
谢谢
【问题讨论】:
我认为错误信息非常明确:"/home/filelocation/file.tar" 是损坏的 tar 文件(截断)。请说明您为解决此问题所做的工作,以便我们进一步为您提供帮助。 实际上文件没有损坏。我可以下载并解压。 从你的代码来看,你也上传了。你确定上传顺利吗?你比较过校验和吗?有时,如果未在 FTP 会话上设置正确的传输模式,文件可能会损坏,仅举一个可能发生的示例。 该文件是在服务器中创建并返回 API,使用:file_put_contents('uploads/maps/true_color_'.$id_technical_report.'.tar',$response);我下载了完全相同的文件,在 Winrar 中它工作正常。 它有多大?您是否在服务器日志中收到任何其他错误/警告? 【参考方案1】:我从一个构建 tar 文件的自制 tar 程序中得到了同样的信息。 我无法用 PHAR 类解压它。 问题是 CRC 字段,写在 tar 文件的最后一行,被最初生成该 tar 文件的程序计算错误。
【讨论】:
以上是关于Phar 无法提取文件的主要内容,如果未能解决你的问题,请参考以下文章
您的 openssl 扩展不支持 SHA384,无法验证 phar 文件完整性
file_get_contents(phar://../storage/logs/laravel.log/test.txt):无法打开流:phar 内部损坏