2011-07-16 137 views
0

爲什麼在我的本地主機上完美地工作,而不是在我上傳到服務器上的任何想法?在服務器中,它創建zip文件,但不創建文件夾,它將所有文件放入.zip文件中,而不區分文件夾。郵編功能在服務器上無法正常工作

function rzip($source, $destination) { 
    // create object 
    $zip = new ZipArchive(); 
    // open archive 
    if ($zip->open($destination, ZIPARCHIVE::CREATE) !== TRUE) { 
     die ("Could not open archive"); 
    } 

    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source)); 
    foreach ($iterator as $key=>$value) { 
     $new_filename = substr($key,strrpos($key,"/") + 1); 
     $zip->addFile(realpath($key), $new_filename) or die ("ERROR: Could not add file: $key"); 
    } 

    $zip->close(); 
} 
+0

我不知道它爲什麼在你的本地主機上工作,但你只是將每個文件的基本名稱加入到zip中。 zip應該如何知道該文件應該屬於哪個zip文件夾? – hakre

+0

由於實時路徑 – luqita

+0

您應該檢查您的服務器錯誤日誌的某些提示。你也應該檢查一下,如果你的服務器的php版本和你的本地主機匹配。編輯這些問題到你的問題。 –

回答

0

您在地方誤用(或不使用)RecursiveDirectoryIterator

第一點是您將迭代點文件夾(...),這可能是不希望的;要停止此操作,請使用SKIP_DOTS標誌。

接下來,有一些工具可以獲取相對於正在迭代的主目錄的文件路徑,並獲得真實路徑;分別使用getSubPathname()getRealpath()方法。

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
       $source, RecursiveDirectoryIterator::SKIP_DOTS)); 
foreach ($iterator as $key => $value) { 
    $localname = $iterator->getSubPathname(); 
    $filename = $value->getRealpath(); 
    $zip->addFile($filename, $localname) or die ("ERROR: Could not add file: $key"); 
} 

以上只是一個答案,因爲它太長了評論。上面沒有回答爲什麼,「這是完全在我的本地主機工作,但不在服務器」。

+0

使它像這樣:$ iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator( $ source)); ($ iterator爲$ key => $ value){ \t $ localname = $ iterator-> getSubPathname(); \t $ filename = $ value-> getRealpath(); \t $ zip-> addFile($ filename,$ localname)or die(「ERROR:Could not add file:$ key」); \t \t} – luqita

相關問題