是否可以打开下载的zip文件,而不将其另存为文件?

时间:2011-06-01 07:45:39

标签: php zend-framework zip

我正在使用zend httpClient下载一个zip文件,并获取分配给变量的文件内容:

$body = $response->getBody();

$body包含zip文件的内容,是否可以使用http://php.net/manual/en/class.ziparchive.php或其他5.2本机类打开而不保存作为文件?

编辑这些建议提供了一些好主意,如果可以在没有制作临时文件的情况下可行,但由于我需要使用代理适配器已经为了这个目的而不得不创建一个自己的适配器,这是不值得的。

我最终使用tmpname创建了一个tmp文件(这是我想要避免的,但无论如何都要在这里结束)。

   if ($response->isSuccessful()){
            $tmpfile = tempnam(sys_get_temp_dir(),'Insight');
            if ($tmpfile!==false){                
                    $handle = fopen($tmpfile, "w");
                    if (fwrite($handle, $response->getBody())!==false){
                        $zip = new ZipArchive;
                        if ($zip->open($tmpfile) === TRUE) {
                            echo $zip->getFromIndex(0);
                            $zip->close();
                        } else {
                            $this->errorLog('Unable to open zip file '.$tmpfile);
                        } 

                    }else{
                        $this->errorLog('Unable to write to temporary file '.$tmpfile);
                    }
                    fclose($handle);                  
            }else{
                $this->errorLog('Unable to create temporary zip file in '.sys_get_temp_dir());
            }                          
        }else{
            $this->errorLog('Unable to download url '.$insightUrl);
        } 

2 个答案:

答案 0 :(得分:1)

我对Zend框架知之甚少,而且Zend_Http_Client一无所知,但也许你可以在初始化Zend_Http_Client时使用compression stream wrappers

$client = new Zend_Http_Client('zip://http://example.org/compressed_file.zip');

答案 1 :(得分:0)

尝试使用PHP Zip Functions