使用PHP cURL下载并解压缩.tar.gz文件并返回到客户端,因为字符串不起作用

时间:2016-10-07 08:19:23

标签: php http curl gzip

我尝试通过PHP cURL下载.tar.gz文件,将其解压缩并将文件的内容作为字符串返回给客户端。

当我尝试使用终端时,它可以工作:

curl "https://domain.com/filename.tar.gz?what=ever&fu=bar" | tar -xz

通过PHP cURL尝试不起作用(responseUrl来自客户端应用程序):

$_curl = curl_init();
curl_setopt_array($_curl, array(
    CURLOPT_URL => $_POST['responseUrl'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => 'gzip'
));
$_responseFile = curl_exec($_curl);
curl_close($_curl);

echo file_get_contents($_responseFile);

我到达客户端Angular2应用程序的回报是:

Response {
    _body: "",
    headers: Headers,
    ok: true,
    status: 200,
    statusText: "Ok",
    type: 2,
    url: "http://test.local/api/getResponse.php",
    __proto__: Object
}

我的剧本出了什么问题?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我可以提供帮助 - 如何下载&用PHP提取Zip档案

希望它适用于.tar.gz文件。

PHP有Zip Archive Extension。你可以看到php manual for installing ZipArchive Extension。 ZipArchive扩展的使用非常简单。

下载

要下载,我们将使用cURL。首先我们创建一个空白的zip文件,从服务器下载zip文件并将其内容放到我们创建的空白zip文件中。

$url = "http://example.com/pathtozipfile.zip";
$zipFile = "folder/zipfile.zip"; // Local Zip File Path
$zipResource = fopen($zipFile, "w");
// Get The Zip File From Server
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FILE, $zipResource);
$page = curl_exec($ch);
if(!$page) {
echo "Error :- ".curl_error($ch);
}
curl_close($ch);

cURL将从变量$ url中提到的url获取Zip归档文件。如果我们要保存Zip存档文件,$ zipFile变量包含文件的本地路径。

提取(解压缩)

如前所述,我们将使用PHP Zip Archive Extension。 我们将创建类变量,打开Zip归档文件并将其解压缩:

/* Open the Zip file */
$zip = new ZipArchive;
$extractPath = "path_to_extract";
if($zip->open($zipFile) != "true"){
echo "Error :- Unable to open the Zip File";
} 
/* Extract Zip File */
$zip->extractTo($extractPath);
$zip->close();

$ extractPath变量中应该提到提取路径。如果存在任何文件,它将被覆盖或合并。