2012-11-29 57 views
0

每次我從PHP創建zip文件時,都有一個空文件夾「\ data」。 但是服務器中沒有這樣的文件夾。 當我解壓縮zip文件,瀏覽該空文件夾,它顯示的路徑是這樣的:每次我從PHP創建zip文件時,都有一個空文件夾「 data」

\數據/網絡/子域/網站/ httpdocs資料/

它看起來像我想的文件夾的絕對路徑壓縮。

這裏是我的代碼:

<?php 

$file = tempnam("tmp","zip"); 
zip_directory($_GET['catname'].'/'.$_GET['directtozip'].'/',$file); 

header('Content-Type: application/zip'); 
header('Content-Length: ' . filesize($file)); 
header('Content-Disposition: attachment; filename="'.$_GET['directtozip'].'.zip"'); 

readfile($file); 
unlink($file); 

function zip_directory($source,$tempfile){ 
if(!extension_loaded('zip') || !file_exists($source)) return false; 
$zip = new ZipArchive(); 
if(!$zip->open($tempfile,ZIPARCHIVE::CREATE)) return false; 
$source = str_replace('\\','/',realpath($source)); 
if(is_dir($source) === true){ 
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source),   RecursiveIteratorIterator::SELF_FIRST); 
    foreach($files as $file){ 


    // Excluded folders or file from zip. 
    $chk_1 = strstr($file,$source .'/'.'.svn'); 

    if($chk_1){continue;} 

    $file = str_replace('\\', '/', realpath($file)); 

     if (is_dir($file) === true) 
     { 
      $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); 
     } 
     else if (is_file($file) === true) 
     { 
      $zip->addFromString(str_replace($source . '/', '', $file),  file_get_contents($file)); 
     } 
    } 
} 
elseif(is_file($source) === true) $zip->addFromString(basename($source),  file_get_contents($source)); 

return $zip->close(); 
} 

zip_directory($source,$tempfile); 

?> 

在此先感謝。

回答

0

最後一行zip_directory($source,$tempfile);是什麼,因爲$ tempfile沒有定義。

您的代碼對我的作品

<?php 

$file = tempnam("tmp","zip"); 

zip_directory('__z/', $file); 

header('Content-Type: application/zip'); 
header('Content-Length: ' . filesize($file)); 
header('Content-Disposition: attachment; filename="_zzz.zip"'); 

readfile($file); 
unlink($file); 

function zip_directory($source, $tempfile){ 
    if(!extension_loaded('zip') || !file_exists($source)) { 
     return false; 
    } 
    $zip = new ZipArchive(); 
    if(!$zip->open($tempfile, ZIPARCHIVE::CREATE)) { 
     return false; 
    } 
    $source = str_replace('\\','/', realpath($source)); 
    if(is_dir($source) === true) { 
     $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); 
     foreach($files as $file){ 
      $chk_1 = strstr($file,$source .'/'.'.svn'); 
      if($chk_1){continue;} 
      $file = str_replace('\\', '/', realpath($file)); 
      if (is_dir($file) === true) { 
       $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); 
      } else if (is_file($file) === true) { 
       $zip->addFromString(str_replace($source . '/', '', $file),  file_get_contents($file)); 
      } 
     } 
    } elseif(is_file($source) === true) { 
     $zip->addFromString(basename($source), file_get_contents($source)); 
    } 
    return $zip->close(); 
} 

?> 
+0

OK我找到了解決方案,它是becasue的真實路徑的()。 –

相關問題