仅在下载完成后执行代码并提取PHP

时间:2013-09-23 14:40:43

标签: php curl zip

我有一个文件可以通过curl在PHP下载大约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的摘录? 之后如何才能在extract命令完成后执行每个文件的解析?

由于

1 个答案:

答案 0 :(得分:1)

不使用fwrite,而是使用file_put_contents()

替换

$file2 = fopen('json_upload/item.zip','w+');
fwrite($file2, $xml);
fclose($file2);

使用

file_put_contents('json_upload/item.zip', $xml);