web-dev-qa-db-ja.com

PHP)を使用してファイルのディレクトリを圧縮する

データベースからすべてをダンプしてファイルに保存するphpバックアップスクリプトを作成しています。私はそれを成功させましたが、今度はディレクトリ内の何百もの画像を取得し、それらを1つの単純な.tar.gzファイルに圧縮する必要があります。

これを行うための最良の方法は何ですか、そしてそれはどのように行われますか?どこから始めたらいいのかわからない。

前もって感謝します

17
VinkoCM

PHP 5.2以降を使用している場合は、 Zipライブラリ を使用できます。

次に、次の行に沿って何かを実行します。

$images_dir = '/path/to/images';
//this folder must be writeable by the server
$backup = '/path/to/backup';
$Zip_file = $backup.'/backup.Zip';

if ($handle = opendir($images_dir))  
{
    $Zip = new ZipArchive();

    if ($Zip->open($Zip_file, ZipArchive::CREATE)!==TRUE) 
    {
        exit("cannot open <$Zip_file>\n");
    }

    while (false !== ($file = readdir($handle))) 
    {
        $Zip->addFile($images_dir.'/'.$file);
        echo "$file\n";
    }
    closedir($handle);
    echo "numfiles: " . $Zip->numFiles . "\n";
    echo "status:" . $Zip->status . "\n";
    $Zip->close();
    echo 'Zip File:'.$Zip_file . "\n";
}
15
Paul Dixon
$archive_name = 'path\to\archive\Arch1.tar';
$dir_path = 'path\to\dir';

$archive = new PharData($archive_name);
$archive->buildFromDirectory($dir_path); // make path\to\archive\Arch1.tar
$archive->compress(Phar::GZ); // make path\to\archive\Arch1.tar.gz
unlink($archive_name); // deleting path\to\archive\Arch1.tar
12
SergO

次のようなものを使用することもできます。

 exec( 'tar -czf backup.tar.gz/path/to/dir-to-be-backed-up /');

PHPのexec()関数の使用については、必ず 警告に注意してください

10
geerlingguy

私の単純な2行PHPファイルで、数秒以内にバックアップZipファイルを作成できます。

閲覧するだけです: http://mysiteurl.com/create-my-Zip.php

<?php
/* PHP FILE NAME: create-my-Zip.php */

echo exec('tar zcf my-backup.tar.gz mydirectory/*');

echo '...Done...';

?>

このファイルをサーバーにアップロードして直接参照するだけです。

ノート:

  • 'mydirectory' ==>これに関連するターゲットディレクトリPHPスクリプト;
  • 'my-backup.tar.gz' ==>は、このPHPファイルがアップロードされるのと同じディレクトリに作成されます。
1
Reza Mamun

選択した回答は再帰(サブディレクトリ)をサポートしていないため、次のようになります。

<?
ignore_user_abort(true);
set_time_limit(3600);


$main_path = 'folder2Zip';
$Zip_file = 'zipped.Zip';

if (file_exists($main_path) && is_dir($main_path))  
{
    $Zip = new ZipArchive();

    if (file_exists($Zip_file)) {
        unlink($Zip_file); // truncate Zip
    }
    if ($Zip->open($Zip_file, ZIPARCHIVE::CREATE)!==TRUE) {
        die("cannot open <$Zip_file>\n");
    }

    $files = 0;
    $paths = array($main_path);
    while (list(, $path) = each($paths))
    {
        foreach (glob($path.'/*') as $p)
        {
            if (is_dir($p)) {
                $paths[] = $p;
            } else {
                $Zip->addFile($p);
                $files++;

                echo $p."<br>\n";
            }
        }
    }

    echo 'Total files: '.$files;

    $Zip->close();
}
0
Martin Zvarík

次のコマンドを使用して、フォルダを簡単にgzipで圧縮できます。

tar -cvzpf backup.tar.gz /path/to/folder

このコマンドは、phps system()-functionを介して実行できます。

すべてのコマンドをescapeshellarg()することを忘れないでください。

0
alexn