我尝试通过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
}
我的剧本出了什么问题?任何帮助表示赞赏!
答案 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变量中应该提到提取路径。如果存在任何文件,它将被覆盖或合并。