Files
MYSOPHAL/vendor/wapmorgan/unified-archive/src/Formats/Gzip.php
2025-11-11 14:49:30 +01:00

77 lines
1.7 KiB
PHP

<?php
namespace wapmorgan\UnifiedArchive\Formats;
use Exception;
class Gzip extends OneFileFormat
{
const FORMAT_SUFFIX = 'gz';
/**
* @param string $file GZipped file
* @return array|false Array with 'mtime' and 'size' items
*/
public static function gzipStat($file)
{
$fp = fopen($file, 'rb');
if (filesize($file) < 18 || strcmp(fread($fp, 2), "\x1f\x8b")) {
return false; // Not GZIP format (See RFC 1952)
}
$method = fread($fp, 1);
$flags = fread($fp, 1);
$stat = unpack('Vmtime', fread($fp, 4));
fseek($fp, -4, SEEK_END);
$stat += unpack('Vsize', fread($fp, 4));
fclose($fp);
return $stat;
}
/**
* Gzip constructor.
*
* @param $archiveFileName
*
* @throws \Exception
*/
public function __construct($archiveFileName)
{
parent::__construct($archiveFileName);
$stat = static::gzipStat($archiveFileName);
if ($stat === false) {
throw new Exception('Could not open Gzip file');
}
$this->uncompressedSize = $stat['size'];
$this->modificationTime = $stat['mtime'];
}
/**
* @param string $fileName
*
* @return string|false
*/
public function getFileContent($fileName = null)
{
return gzdecode(file_get_contents($this->fileName));
}
/**
* @param string $fileName
*
* @return bool|resource|string
*/
public function getFileResource($fileName = null)
{
return gzopen($this->fileName, 'rb');
}
/**
* @param $data
*
* @return mixed|string
*/
protected static function compressData($data)
{
return gzencode($data);
}
}