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私のスクリプトは、デスクトップなどのフォルダーで実行されており、zipとその内容を圧縮したいと考えています。上記のコードは動作します。しかし、問題は、myzip.zip作成したものを解凍すると、次のような構造になることです

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

thisFolderこの場合、8 番目のフォルダー ( ) 内のコンテンツを検索します。このコードを変更して、コンテンツを取得する前にフォルダーを 7 回ナビゲートする代わりに、コンテンツを含むmyzip.zipフォルダーがすぐに表示されるようにするにはどうすればよいですか?thisFolder

私は道を変えようとしたり、そのようなばかげたことをしたりしました。しかし、うまくいきません。

ありがとう

4

2 に答える 2

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

filename 追加するファイルへのパス。

localname ZIP アーカイブ内のローカル名。

このpathinfo関数をループ内の各 $file に使用して、パスなしでファイル名を取得し、それを addFile メソッドの 2 番目のパラメーターとして使用できます。

パス情報ドキュメントはこちら

問題を解決できる例を次に示します。

// 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();
于 2013-02-28T21:34:58.987 に答える
1

If you want everything in the file to be a name relative to your starting folder, use chdir() to start from there:

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

Actually, I don't think this will work when $file is a subdirectory -- addFile doesn't recurse automatically. There's a comment in the documentation that shows how to write a recursive zip function:

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

于 2013-02-28T21:49:41.683 に答える