2017-08-02 112 views
0

我環顧四周,而當我收到的錯誤消息出現時,這個特殊的問題看起來很新穎。我有一個使用ZipArchive庫構建zip文件的PHP腳本。該文件實際上是被創建成功,但是當我打電話close()我得到普遍報告ErrorException:ZipArchive創建文件,但ZipArchive :: close()無法重命名

ZipArchive::close(): Renaming temporary file failed: No such file or directory 

壓縮文件創建成功,但是當我看到它後拋出異常發現,它類似於一個擴展.zip.a04896。如果我砍掉.a04896然後我可以打開文件沒有問題,它包含預期的內容;我認爲這是某種指標,該文件仍在建設中。由於我沒有專門通過文件名訪問zip存檔,因此我認爲這不會干擾重命名嘗試。

我在運行Windows 10,代碼是Laravel 5.3應用程序的一部分。這裏是有問題的代碼:

  $zip = new \ZipArchive(); 
      $zipFile = config('app.upload_root').'\\downloads\\Interventions_'.$fileTime.".zip"; 
      if ($zip->open($zipFile, \ZipArchive::CREATE)!==TRUE) { 
       throw new \Exception("cannot open <$zipFile>\n"); 
      } 
      foreach ($interventions as $row) {  
       $pdf_name = config('app.upload_root').'\\uploads\\'.$row->UIC.'_'.sprintf("%010d",$row->id).'.pdf'; 
       if(file_exists($pdf_name)){     
        $result = $zip->addFile($pdf_name, $row->UIC.'_'.sprintf("%010d",$row->id).'.pdf'); 
        if ($result == FALSE){ 
         throw new \Exception($pdf_name.' did not add to ZIP succesfully'); 
        } 
       } 
       else{ 
        throw new \Exception($pdf_name.' does not exist'); 
       } 
      } 
      file_put_contents ($textFile, $output); 
      $result = $zip->addFile($textFile, $textFileName); 
      if ($result == FALSE){ 
       throw new \Exception($testFileName.' did not add to ZIP succesfully'); 
      } 
      sleep(1); 
      $zip->close();    

任何有關這裏發生了什麼問題的建議?是否有可能在Windows 10下我需要不同的權限來重命名文件而不是創建它?或者是.zip問題後奇怪的擴展?

+0

我懷疑''file_put_contents()'干擾'\ ZipArchive'。如果您需要動態生成ZIP內容,您可能需要嘗試'ZipArchive :: addFromString()'。 –

+0

file_put_contents()調用正在將文本文件保存到'downloads'目錄。 保存後,它被分別添加到壓縮文件。保存的文本文件被添加得很好,所以我不確定它的創建手段如何可能是錯誤的。 – dspitzle

+0

儘管我懷疑我嘗試切換到'addFromString()',並沒有改變任何東西。我仍然得到一個有效的zip文件,其中包含所有內容和擴展名上的一個奇怪的附加後綴以及相同的錯誤消息。 – dspitzle

回答

0

好吧,這很煩人:問題後來消失了,zip壓縮文件也沒有結束。我的開發機器自從我的原始發佈以來已經重新啓動,所以我的假設是>某些<鎖定了Álvaro的建議。