1

サーバー上のファイルとフォルダーのバックアップ スクリプトを作成したいのですが、これを見つけました。

# Name of the buckup file
$filename = 'BACKUP_' . date('Y.m.d') . '.tar.gz';
# Target path where to save the file
$targetPath = '/path/to/backup/';
# Directory to backup
$dir = "/path/to/files/";  


# Execute the tar command and save file
system( "tar -pczf ".$targetPath ."".$filename." ".$dir );

これはうまく機能し、URL をスクリプトと適切なヘッダーに渡して、ファイルをダウンロードするだけです。

私の問題は、これを頻繁に実行し、サーバーにバックアップを保持したくないことです。そのため、削除される一時ファイルを作成するための創造的な方法を見つけようとしています。問題は、一部のファイルがかなり大きくなる可能性があり、ファイルがいつ完全にダウンロードされたかを知る方法がないことです。

4

2 に答える 2

2

/ tmpにバックアップファイルを作成し、以下を使用することができます。

# Name of the buckup file
$filename = 'BACKUP_' . date('Y.m.d') . '.tar.gz';
# Target path where to save the file
$targetPath = '/path/to/backup/';
# Directory to backup
$dir = "/path/to/files/";  
# Execute the tar command and save file
system( "tar -pczf ".$targetPath ."".$filename." ".$dir );

readfile("{$targetPath}{$filename}"); // outputs file contents to a browser
unlink("{$targetPath}{$filename}"); // removes file from disk

詳細については、 http://php.net/manual/ru/function.readfile.phpを参照してください。

PS Also you may use ZipArchive class(build-in) to create your own archive more flexible.

于 2012-09-11T17:59:35.727 に答える
0

データベースにファイル名/パスと作成されたタイムスタンプを追加し、cron ジョブを作成して、保持したい時間よりも長いものを削除します。1 時間 30 分ごとに実行します。どんなに頻繁に必要だと感じても。

ダウンロードされているかどうかについては、ダウンロード マネージャーを作成します。/download/file/id、ここで id はそのテーブルの PK である可能性があり、まだダウンロードされていない場合にのみ削除します (48 時間経過していない場合、またはそれらの行に沿ったものでない限り)。

于 2012-09-11T17:56:32.327 に答える