我有这个函数解压缩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。
答案 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() . " >>" ;
}