如何处理解压缩tar.gz文件的错误

时间:2017-03-14 16:36:18

标签: php file zend-framework 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 个答案:

答案 0 :(得分:-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() . " >>" ;
}