diary/20081009

ID: 913 | 作成日: 2008/10/09 [Thu] 15:53:00 | 最終更新: 2012/07/10 [Tue] 13:25:05
FrontPage / diary / 20081009

PHPの「system」でZIP圧縮&ディレクトリのコピー

今回は、少し前のエントリーで「書く予定」と触れていたPHP関連の解説ネタについて書きます。
サーバにアップしているWikiクローンのデータバックアップやディレクトリの移動をすることになり、PHPの「system」という命令を使ったので、その辺りメモです。

「system」はLinuxのシェルコマンドを実行できます。
そしてコマンドにはZIP圧縮やディレクトリのコピーもあるので、前述の作業をそのコマンドで片付けようというわけです。

以下のサンプルは、「ロリポップ!」のレンタルサーバで試したものです。
ご利用のサーバ環境によって利用できない場合があります、あらかじめご了承ください。

ZIP圧縮には「zip」コマンドを利用します。
僕の場合は、指定ディレクトリ内のファイル・ディレクトリすべてをバックアップする必要があったので、以下のような処理をしました。

$backup_file = "作成するZIPファイルの名前";
$backup_dir = "バックアップしたいディレクトリ";
system("zip -r $backup_file $backup_dir");

ソースは実際に作業で使ったスクリプトから「system」の部分のみ抜粋です、「作成するZIPファイルの名前」と「バックアップしたいディレクトリ」の部分は任意に書き換えてください。
ZIPファイルの名前は“backup.zip”のように、拡張子は「zip」にします。

次は、ディレクトリのコピーです。
元となるディレクトリ内のファイル・ディレクトリもぜんぶ含めて新しいディレクトリへコピーします。

$old_dir = "コピー元となるディレクトリ";
$new_dir = "コピー先となるディレクトリ";
system('cp -r "' . $old_dir . '" "' . $new_dir . '"');

こちらも「system」関連の抜粋のみ。
「コピー元となるディレクトリ」と「コピー先となるディレクトリ」の部分は、前回同様、任意に書き換えてください。

実際に作業で使ったスクリプトは、ZIP圧縮はほとんど上記のソースのままでちょっと付け足した程度ですが、ディレクトリのコピーは利用Wikiクローン内部で使っている複数のディレクトリを移動ということで、そのWikiクローンで用意されている関数を使ってディレクトリの列挙やコピー後の削除までしているため実際はもう少し複雑なソースです。

あまり面倒な手続きなく簡単な処理で済ませられたので、正直ありがたいです。
特にZIP圧縮は、普段使っているFTPクライアントでWikiクローンのログファイルをすべてダウンロードできなかっただけにバックアップが取れて本当によかった。

ZIP等の圧縮ファイルの扱いは、手軽にバックアップに利用できるため便利ではないと思います。