2012-12-15 20 views
0

這是我用來將文件夾名稱爲$id的文件夾變量存儲到檔案中的腳本。任何人對此zip腳本有想法?

$sourcefolder="../uploads/fail/$id/"; 
$zipfilename="fordownload/$id.zip"; 
$timeout=5000; 
$dirlist = new RecursiveDirectoryIterator($sourcefolder); 
$filelist = new RecursiveIteratorIterator($dirlist); 
ini_set('max_execution_time', $timeout); 
$zip = new ZipArchive(); 
if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) { 
    die ("Error"); 
} 
foreach ($filelist as $key=>$value) 
{ 
    $zip->addFile(realpath($key), $key) or die ("Error"); 
} 
$zip->close(); 
redict("$zipfilename",0); 

的問題是,我想提出只有文件夾$id在檔案中,沒有前綴../uploads/fail/,但我不知道怎麼辦。你能幫我嗎?

回答

0

所以,這裏是你的代碼的核心部分:

$dirlist = new RecursiveDirectoryIterator($sourcefolder); 
$filelist = new RecursiveIteratorIterator($dirlist); 
$zip = new ZipArchive(); 
foreach ($filelist as $key => $value) { 
    $zip->addFile(realpath($key), $key) or die ("Error"); 
} 

你調用一個RecursiveDirectoryIterator,這是一個FilesystemIterator,這本身就是一個DirectoryIterator。在您的foreach中,$valueSplFileInfo

我們的第一個鏡頭將是這樣的:

foreach ($filelist as $path => $fileinfo) { 
    $zip->addFile($fileinfo->getRealPath(), $fileinfo->getBasename()) or die ("Error"); 
} 

getRealPath返回同樣的事情realpath做,而getBasename回報不僅是文件名本身,像basename會。

但是,這不會按預期工作。看,這是一個遞歸的目錄迭代器,並且這會展平子目錄中任何文件的路徑。如果你不能自行破解,我會在一段時間後回來編輯一個解決方案。

+0

它現在效果更好,但我必須找到解決方案: http://img442.imageshack.us/img442/7231/casus.png –

相關問題