2012-12-15 3 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); 

문제

내가 접두사 ../uploads/fail/없이, 아카이브에 폴더 만 $id을 데려 가고 싶다는 것입니다,하지만 난 방법을 모르겠어요. 도울 수 있니?

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

당신은 FilesystemIteratorRecursiveDirectoryIterator를 호출하고, 그 자체가 DirectoryIterator입니다 :

답변

0

그래서, 여기에 코드의 핵심입니다. foreach 안에 $valueSplFileInfo입니다.

우리의 첫 번째 샷이 될 것입니다 :

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

getRealPath가있는 동안 basename 같은 getBasename 반환 단지 파일 이름 자체가, 것, 같은 일 realpath가하는 반환합니다.

그러나 예상대로 작동하지 않습니다. 보세요, 그것은 반복적 인 디렉토리 반복자이고, 이것은 서브 디렉토리에있는 모든 파일들의 경로를 평평하게합니다. 나는 당신이 그것을 스스로 해독 할 수 없다면 나중에 약간의 시간 동안 해결책으로 돌아와서 편집 할 것입니다.

+0

더 잘 작동하지만이 문제에 대한 해결책을 찾아야합니다. http://img442.imageshack.us/img442/7231/casus.png –

관련 문제