Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中处理application/octet流(未压缩的gzip文件)?_Php_Gzip_Guzzle - Fatal编程技术网

如何在PHP中处理application/octet流(未压缩的gzip文件)?

如何在PHP中处理application/octet流(未压缩的gzip文件)?,php,gzip,guzzle,Php,Gzip,Guzzle,我必须解析大量(10000多个)远程gzip文件。每个压缩文件都应该包含一个CSV(可能在文件夹中)。现在我能够获取正文,检查内容类型并解压缩它,获得应用程序/八位字节流 问题是:什么是八位字节流?我如何检查其中的文件或文件夹 /**@var$guzzle\guzzle\Http\Client*/ $guzzle=$this->getContainer()->get('guzzle'); $request=$guzzle->get($url); 试一试{ $body=$request->send

我必须解析大量(10000多个)远程gzip文件。每个压缩文件都应该包含一个CSV(可能在文件夹中)。现在我能够获取正文,检查内容类型并解压缩它,获得
应用程序/八位字节流

问题是:什么是八位字节流?我如何检查其中的文件或文件夹

/**@var$guzzle\guzzle\Http\Client*/
$guzzle=$this->getContainer()->get('guzzle');
$request=$guzzle->get($url);
试一试{
$body=$request->send()->getBody();
//检查正文内容类型
if('application/z-gzip'=$body->getContentType()){
$body->uncompress();
$body->getContentType();//应用程序/八位字节流
}
否则{
//记录并跳过当前远程文件
}
}
捕获(\异常$e){
$output->writeln(“失败:{$guzzle->getBaseUrl()}”);
扔$e;
}

类似于某个shell命令的东西将适用于u

shell_exec('gzip -d your_file.gz');
您可以首先解压缩特定目录中的所有文件,然后读取每个文件或需要执行的任何计算

作为旁注:

注意命令从何处运行(使用swith告诉“解压缩到该目录”)
您可能也想看看escapeshellarg;-)

您应该能够使用内置的gzuncompress函数


编辑:或其他zlib函数,具体取决于您使用的数据

存储正文的EntityBody对象只能猜测本地文件的内容类型。使用响应的content-length标头可以获得更准确的值

大概是这样的:

$response = $request->send();
$type = $response->getContentType();

下面的答案有助于回答这个老问题吗,@gremo?