2016-08-29 55 views
0

我已經運行了相當一段時間了下面的代碼:PHP ZipArchive addFile停止工作

$thisdir = "$_SERVER[DOCUMENT_ROOT]/webroot/uploads/user_uploaded_files/"; 

    if(!empty($files)){ 

    $destination = 'uploads/zip_files/meeting_' . $meetingId .'.zip'; 

    $zip = new ZipArchive(); 

    $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 

    //Add all the uploaded files ($file = filename.ext) 

     foreach($files as $file){ 

      if(file_exists($thisdir . $file)){ 

       $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 

     } 
} 

然而,它剛剛停止工作(不知道以前的,但目前的版本是7.0.9) 。

foreach循環像以前一樣運行,file_exists總是返回true,但是沒有文件被添加到歸檔中。

有沒有人體驗過嗎?任何幫助或指導非常感謝。

+0

您是否檢查文件權限? –

回答

1

你也許應該測試是否$ zip->開放工作:

$res = $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
if ($res) { 
    foreach ($files as $file) { 
     if (file_exists($thisdir . $file)) { 
      $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
     } 
    } 
} 

你可以在你的腳本的開頭添加

error_reporting(E_ALL); 
ini_set('display_errors', true); 

,並看看是否有任何錯誤。

0

剛剛發現了這個問題的解決方案,並希望它可以幫助未來的人。

$files是一個字符串數組,因此循環如下:foreach($files as $file)我總是得到一個字符串。

至少我是這麼認爲的,然而addFile()並沒有明顯地將它看作字符串。

該問題已通過在addFile()之前簡單地鑄造每個單件解決。解決方案如下所示:

foreach($files as $file){ 

    if(file_exists($thisdir . $file)){ 

     $file = (string)$file; 

     $zip->addFile('uploads/user_files/' . $file, $file); 

    } 

} 
+0

出於好奇,你可以發佈var_dump($ files)的輸出; ? – vincenth