バックアップ

PHPでファイルをコピー(OS問わず)

サンプル

PHP

<?php
$target = 'target.txt';
$newtarget = 'new_target'.date("YmdHi").'.txt';
if( ! copy($target, $newtarget) ) {
	echo "コピーできませんでした。\n";
}
?>
  • サンプルは相対でファイル指定されています
  • サンプルでの保存ファイル名は「new_target201406100357.txt」のような形になります

参考

Linux・PHP環境でバックアップ

PHPでZIP圧縮する方法で簡単な手段は、system() でシェルコマンドを実行させる方法です。

サンプル1

バックアップ元のファイル

/home/user1/file1.txt
/home/user1/file2.txt 

圧縮先ディレクトリ

/usr/backup/

圧縮ファイル名(日付)

yyyymmdd.zip

PHP

<?php

$d = date("Ymd");
$backup_file = "/usr/backup/" . $d . ".zip";

system("cd /home/user1/;zip -r $backup_file *");

?>
  • cdコマンドで目的のデレクトリへ到達
  • 「*」でカレントディレクトリ「/home/user1/」以下のファイルを全て指定
  • これでデレクトリ以下のファイルをひとまとめにして圧縮

参考

サンプル2

PHP

<?php

// set_time_limit(60);					// 圧縮するファイルが多くて60秒でタイムアウトする場合は時間を伸ばしてください
$backup_dir = "./example";				// バックアップするディレクトリを指定
$new_file = "example.zip";				// zipファイルのファイル名を指定
system("zip -r $new_file $backup_dir > /dev/null");	// zipファイルを生成。ログを出力しない。

//ファイルをダウンロード
header('Content-Disposition: attachment; filename="'.basename($new_file).'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($new_file));
readfile($new_file);

@unlink($new_file);					//ファイルをダウンロード後サーバから削除

?> 
  • バックアップディレクトリを変更する「$backup_dir = "./example";」
  • ダウンロードするzipファイル名を変更する「$new_file = "example.zip";」

参考

Linux zipコマンド オプション一覧

オプション説明
-f変更されたファイルを最新のものにする。
-u更新されたファイルや新しいファイルのみを追加する。
-d不要なものを削除する。
-m指定した圧縮ファイルを移動、削除する。
-rファイルとディレクトリを再帰的に処理する。
-jファイルパスを記録せず、ディレクトリを除く。
-0指定したものを保存する。
-l改行コードをLFからCR+LFに変更する。(-llでCR+LFからLFに変更 する。)
-##の部分に数値を指定して、圧縮速度を指定する。(デフォルト:6)
-1:高速圧縮する。(処理速度が最大になるが圧縮率が犠牲になる)
-9:高圧縮する。(処理速度が犠牲になるが圧縮率が最大になる)
-qクイック圧縮を行う
-v内容を逐一表示させる。
-c一行コメントを入力する
-z複数行コメントを入力する。
-@ファイル名を標準入力から読み込む。
-o圧縮ファイルの変更時刻を最新のものと同じにする。
-x特定のファイルを除く。
-i特定のファイルだけを格納する。
-F破損している圧縮ファイルを修正を試みる。(-FFでより試みる)
-Dディレクトリは格納しない。
-A自己解凍形式で圧縮する。
-J圧縮ファイルから格納データ以外の情報を除く
-Tファイルの整合性をテストをする
-Xファイルの属性を保管しない
-y参照ファイルの代わりにシンボリックリンクを格納する。
-Rカレント・ディレクトリにあるファイルとディレクトリを再帰的に処 理する
-e暗号化して格納する。
-n指定した拡張子のファイルを圧縮しない。
-aファイルをアスキーモードに変換する。
-A実行可能なアーカイブを抽出して適合させる。
-Bファイルを2進法で読み出す。(初期設定はテキスト)
-Bnnで定義される状態でEdit/Enscribeの形式を設定する。
-d圧縮ファイル内から指定したものを削除する。
-dfアーカイブに圧縮されたファイルのデータフォークを格納する
-Eファイル名としてLONGNAME Extended Attribute (ある場合)を使う
-g新しいアーカイブを作らずに指定した既存のところへ追加する。
-hヘルプ情報を表示する。
-Iイメージファイルをスキャンしない
-jパスを除いてファイル名のみを格納する。ディレクトリ名は保存し ない。
-jjFullpath(+ Volname)を記録する。
-JアーカイブからSFXスタブなど以前のデータを取り除く
-kファイル名とパス名をMS-DOS(8.3)フォーマットに変更し、MS- DOSで有効なファイル属性のみを格納する
-Lzipのライセンスを表示する。
-N圧縮ファイルのコメントとして、AmigaまたはMacOSのfilenoteを保存する。
-Qnnで定義されるファイルヘッダーにあるファイルに関する情報を保存する
-Sシステムを追加して、ファイルを隠す。
-VVMS属性ファイルを格納する
-wファイルのバージョン番号をファイルの複数のバージョンを含む名前に追加する。
-!WinNTセキュリティを取り入れるために特権モードを使用する。
-$圧縮ファイルを保持しているドライブにボリュームラベルを含める。