2009-06-26 16 views
15

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

これを行うにはどのような方法があり、どのように行われますか?どこから始めたらいいのか分かりません。事前

+0

これはあなたを助けることができますhttp://codingbin.com/compressing-a-directory-of-files- with-php/ – MKD

答えて

15

あなたはPHP 5.2を使用しているか、後で、あなたはZip Library

を使用し、その後の線に沿って何かを行うことができれば:あなたはまた、このようなものを使用することができます

$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"; 
} 
+1

答えにKevを感謝します。ちょっとしたことを明確にする必要があります。PHPのバージョンが5.2より低いか5.2より高いかどうか尋ねるという意味ですか?私は現在5.2.6を持っています。私はあなたの答えを理解しているので、私はPHPのバージョンが高いので、これを実行することはできません。これは正しいです? – VinkoCM

+0

彼は5.2.0以降のPHPバージョンが必要なので、うまくいくでしょう。 – alexn

+0

アレクサンダーは、そのは、5.2.0以降 –

0

ありがとうございます簡単にこのコマンドを使用して、フォルダをgzipすることができます

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

このコマンドは、PHPSシステム()を介して実行することができます - 機能。

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

+0

Alexanderに感謝します。どのようにPHPのように見えるだろうか? システム( 'tar -cvzpf my_backup.tar.gz/images_water/images_rivers /'); – VinkoCM

+0

はい、そうでしょう。 – alexn

+0

私のホスティングプロバイダがexec/systemコマンドにセキュリティ制限を設定しているので、残念ながらこれは私のためには機能しません。 – VinkoCM

9

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

PHPのexec()機能の使用については、必ずheed the warningsにしてください。私は数秒以内にバックアップZIPファイルを作成することが可能な

+0

このコードは 'exec'、' system'、 'shell_exec'、' ... 'のような機能を無効にしたサーバで動作しますか? – AmirHussein

9
$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 
1

私の単純な2つのラインのPHPファイル:

ちょうどブラウズ: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...'; 

?> 

は、単にサーバーにこのファイルをアップロードし、直接閲覧してください。

注:

  • このPHPスクリプトに 'mydirectoryなど' ==>ターゲットディレクトリの相対;
  • 'my-backup.tar.gz' ==>このPHPファイルがアップロードされているのと同じディレクトリに作成されます。
0

選ばれた解答ので、ここであなたが行く、再帰(サブディレクトリ)をサポートしていません:

<? 
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(); 
} 
関連する問題