2013-01-03 74 views
2

以下是我的代碼使用PHP下載zip文件。下載PHP中的壓縮文件不工作

function create_zip($files, $file_name, $overwrite = false) { 

    foreach ($files as $imglink) { 
     $img = file_get_contents($imglink); 
     $destination_path = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/downloads/' . time() . '.jpg'; 
     file_put_contents($destination_path, $img); 
     $imgFiles[] = $destination_path; 
    } 

    if (file_exists($file_name) && !$overwrite) { 
     return false; 
    } 
    $valid_files = array(); 
    if (is_array($imgFiles)) { 
     foreach ($imgFiles as $file) { 
      $valid_files[] = $file; 
     } 
    } 

    if (count($valid_files)) { 
     $zip = new ZipArchive(); 
     if ($zip->open($file_name, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
      echo "Sorry ZIP creation failed at this time"; 
     } 
     foreach ($valid_files as $file) { 
      $zip->addFile($file, pathinfo($file, PATHINFO_BASENAME)); 
     } 

     $count = $zip->numFiles; 
     $resultArr = array(); 
     $resultArr['count'] = $count; 
     $resultArr['destination'] = $file_name; 

     $filename = $file_name; 
     $filepath = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/'; 


     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: public"); 
     header("Content-Description: File Transfer"); 
     header("Content-type: application/octet-stream"); 
     header("Content-Disposition: attachment; filename=\"" . $filename . "\""); 
     header("Content-Transfer-Encoding: binary"); 
     header("Content-Length: " . filesize($filepath . $filename)); 
     ob_end_flush(); 
     @readfile($filepath . $filename); 
    } else { 
     return false; 
    } 
} 

這裏$filename和分別含有zip文件的名稱和路徑$filepath

例:

echo $filepath.$filename;

Output : D:/wamp/www/demoproject/1357198557.zip 

的問題是它顯示下載窗口,但顯示該文件夾的大小0 byte。我正在使用Windows7。見下圖:

+0

請確定您的文件夾有寫權限,使文件可以下載它 –

+0

你有沒有檢查了什麼文件路徑是正確的?腳本可以提供它嗎? –

+0

@AlexanderTaver:文件路徑正確 – Sky

回答

0

你能嘗試添加此,請確保你有適當的filesize

$mm_type="application/octet-stream"; 
header("Content-Type: " . $mm_type); 
header("Content-Length: " .(string)(filesize($fullpath)));