我有一个文件要通过 PHP 中的 curl 下载,大约 16Mb,是一个 zip 文件,我要下载,下载完成后解压缩它,解压后解析其中的每个文件。
这是我的代码:
$ch2=curl_init();
curl_setopt($ch2, CURLOPT_URL, $this->URL);
curl_setopt($ch2, CURLOPT_TIMEOUT, 5040);
curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_POST, 1);
curl_setopt($ch2, CURLOPT_POSTFIELDS,$this->XMLRequest);
curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch2, CURLOPT_SSLVERSION, 3);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true);
$httpHeader2 = array(
"Content-Type: text/xml; charset=UTF-8",
"Content-Encoding: UTF-8"
);
// Execute request, store response and HTTP response code
$xml = curl_exec($ch2);
$this->errno=curl_getinfo( $ch2, CURLINFO_HTTP_CODE );
curl_close($ch2);
$file2 = fopen('json_upload/item.zip','w+');
fwrite($file2, $xml);
fclose($file2);
$zip = new ZipArchive;
echo'<p>json_upload/item.zip</p>';
$zip->open('json_upload/item.zip', ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
$zip->extractTo('json_upload/item/');
$zip->close();
在这种模式下,下载的文件不是全部为 1,6Mb,如果我尝试手动提取,则会返回一个错误,例如损坏。
如果我注释 zip 的提取代码,则文件将完全下载,如果我手动提取它,它工作正常。
如何仅在下载完成后执行 zip 的提取?
之后如何仅在提取命令完成后执行内部每个文件的解析?
谢谢