2011-06-01 50 views
1

我使用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); 
     } 
+0

你就不能使用'zip_open( 「http://url/to/download.zip」)'? – 2011-06-01 08:27:46

+0

@Jules需要使用代理,並且可能必須使用cookie。不要說這可能無法用你的方式完成,但如果我仍然可以使用zend http客戶端,肯定會更容易。 – Niklas 2011-06-01 08:29:15

回答

1

我有Zend框架的瞭解甚少,而且絕對沒有一個Zend_Http_Client,但是也許初始化Zend_Http_Client這樣時,你可以使用compression stream wrappers

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

這並不幸運。消息:不支持Scheme「zip」 – Niklas 2011-06-01 09:10:52

+0

並且'compress.zip:// http:// ...'? – 2011-06-01 09:13:29

+0

消息:提供了非法計劃,只允許使用字母數字字符 – Niklas 2011-06-01 09:15:02

0

嘗試使用PHP Zip Functions

+0

'zip_open()'* only *需要一個文件名,而不是一串數據或其他資源。 – 2011-06-01 07:55:52

+1

我想向你介紹http://php.net/manual/en/function.tmpfile.php – Eugene 2011-06-01 08:02:35

+0

你看過這個問題嗎?特別是大膽的部分。 – 2011-06-01 08:03:15

相關問題