2013-02-28 3 views
0

따라서 폴더와 그 내용을 압축하는 것은 매우 쉽다는 것을 알고 있습니다. php.net과 stackoverflow는 샘플 코드로 가득합니다. 나는 또한 폴더를 압축하려고 노력하고있다. 내 스크립트 폴더에서 실행되는압축 된 파일에 여분의 폴더가없는 폴더 압축

$zip = new ZipArchive; 
$zip->open('myzip.zip', ZipArchive::CREATE); 
foreach (glob("/Volumes/Data/Users/username/Desktop/Archive/some/thisFolder/*") as $file) { 
    $zip->addFile($file); 
} 
$zip->close(); 

, 바탕 화면에 말을, 나는 thisFolder와 그 내용을 압축 할 : 이것은 내 코드입니다. 위의 코드는 작동합니다. 그러나, 문제는 내가 만든 myzip.zip의 압축을 풀 때, 나는

Volumes>Data>Users>username>Desktop>Archive>some>thisFolder 

같은 구조를 얻을 후, 나는이 경우 8 폴더 (thisFolder) 내부의 내용을 찾을 수 있다는 것입니다. myzip.zip의 압축을 풀 때 콘텐츠를 가져 오기 전에 폴더를 7 번 탐색하지 말고 내용이 담긴 thisFolder 폴더를 바로 볼 수 있도록이 코드를 어떻게 바꿀 수 있습니까?

나는 길과 어리석은 것들을 바꾸려고 노력했다. 하지만 작동하지 않습니다.

감사

+0

사용 인수 2 addFile() –

답변

1
bool ZipArchive::addFile (string $filename [, string $localname ]) 

파일의 경로를 추가 할 파일 이름 .

로컬 이름 ZIP 아카이브 내부 로컬 이름.

경로없이 파일 이름을 검색하기 위해 pathinfo 함수를 루프의 각 $ 파일에 사용할 수 있으며,이 파일을 addFile 메소드의 두 번째 매개 변수로 사용할 수 있습니다. 이 파일에 모든 사용자의 시작 폴더에 이름을 상대하려면부터 시작 chdir()를 사용

// Create your zip archive 
$zip = new ZipArchive; 

// open it in creation mode 
$zip->open('myzip.zip', ZipArchive::CREATE); 

// Loop on all your file 
$mask = "/Volumes/Data/Users/username/Desktop/Archive/some/thisFolder"; 
$allAvailableFiles = glob($mask . "/*") 
foreach ($allAvailableFiles as $file) 
{ 
    // Retrieve pathinfo 
    $info = pathinfo($file); 

    // Generate the internal directory 
    $internalDir = str_replace($mask, "", $info['dirname']); 

    // Add the file with internal directory 
    $zip->addFile($file, $internalDir . "/" . $info['basename']); 
} 

$zip->close(); 
+0

에 대한이 내가 할 무엇을 찾고 다소 가까운 : 재귀 우편 함수를 작성하는 방법을 보여줍니다 문서에 코멘트가 있습니다. 유일한 문제는'thisFolder' 안에 하위 폴더가 있고 파일로 변환되는 것입니다. 파일이있는 'myzip'폴더와 그 안에 하위 폴더 대신에! 무엇을 더 바꾸어야합니까? –

+0

그러면 경로를 분리하기 위해'pathinfo'의 결과를 다시 사용해야합니다. – MatRt

+0

필요한 것을 수행해야하는 예제 추가 (테스트하지 않음) – MatRt

1

:

의 PathInfo의 문서 여기 here

가 문제를 해결할 수있는 예입니다 이 : $file 하위 디렉토리 때

chdir("/Volumes/Data/Users/username/Desktop/Archive/some/thisFolder"); 
foreach (glob("*") as $file) { 
    $zip->addFile($file); 
} 

사실, 나는이 작동합니다 생각하지 않는다 - addFile은 자동으로 재발행되지 않습니다.

http://www.php.net/manual/en/ziparchive.addemptydir.php

+0

작동하지 않는 것 같습니다. 그래서, 나는 이것을하기 위해 또 다른 논리를 사용하고 있습니다. :) –

관련 문제