Как обрабатывать ошибки распаковки файла tar.gz

У меня есть эта функция, которая распаковывает tar.gz файл, иногда, когда дисковое пространство заполнено, файл наполовину распакован, и я получаю неполные данные, поэтому, чтобы избежать этого, я проверяю, больше ли свободного места на диске, чем размер файла.

ЗаметкаЯ использую Zend Framework v2.

use Zend\Filter\Decompress;
public function extractFiles()
{

$filter = new Decompress(
[
'adapter' => 'Tar',
'options' => array(
'archive' => $this->File,
'target' => $this->Path,
'mode' => 'gz',
),
]
);
$decompressed = null;
$freeSpace = disk_free_space($this->Path);
$fileSize = filesize($this->File);
if ($freeSpace > $fileSize) {
$decompressed = $filter->filter($this->File);
} else {
throw new Exception('Error while extracting the Tar archive');
}

return $decompressed;
}

Моя проблема здесь, я не уверен насчет этого условия, если оно предотвратит неполные данные, потому что переменная $fileSize имеет размер сжатого файла, и его реальный размер после извлечения всегда слишком велик.
Это означает, что это условие не эффективно.
Есть идеи, как улучшить функцию?

::: РЕДАКТИРОВАТЬ :::

Я пытался использовать функцию zip_entry_filesize() но я получил это:

PHP Fatal error:  Call to undefined function zip_entry_filesize()

Я использую PHP5.

1

Решение

Попробуй это

try {

$filter = new Decompress(
[
'adapter' => 'Tar',
'options' => array(
'archive' => $this->File,
'target' => $this->Path,
'mode' => 'gz',
),
]
);

$decompressed = null;

$freeSpace = disk_free_space($this->Path);

$doubleFileSize = filesize($this->File) * 3;

if ($freeSpace > $doubleFileSize) {

$decompressed = $filter->filter($this->File);
return $decompressed;

}
} catch (Exception $e)
{
error_log(print_r($e->getMessage(), TRUE), 3, 'log_file_path.log');
return "Something went wrong with this erro <<" . $e->getMessage() . " >>" ;
}
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]