ここ2週間程、レンタルサーバーのWADAX から、エックスサーバーへサーバーを乗り換える作業をしていました。サーバー上にある容量が約9GB程もある上、色々想定外なことがあり大変でした。一言言えるのは、
WADAXを使うのは、マジ止めた方がいい!
ということです。この記事は、WADAXにフィーチャーしたものでは無いので詳しくは書きませんが、要約すると以下の通りです。
- サーバー上のファイルをユーザーがバックアップ保存する機能が無い
- unixコマンドが使えないから、無数にあるファイルを圧縮することも不可能
- よって、バックアップするには、FTP接続してファイルを落としてくるしか無い。しかし9GBものファイルがサーバー上にある場合は、6時間もかかる。そして、頻繁にFTP接続が切れるので、どこまでファイルを落としたかを確認出来る体制が無いと、延々に完璧なバックアップが取れない
- MySQLのバージョンが4までしか提供されていないので、最新のWordPressを使うことが不可能(現在のWordPressには、5.0以上のバージョンのMySQLが必要)
と言うわけで、WADAXにある約9GBのファイルをバックアップするのに、切れるFTP接続を何十回もつなぎ直して6時間以上かけて地道に行いました。
ここまでは余談です。本題はこれからです。
サーバー移転をする場合、通常、移転先のサーバー(今回はエックスサーバー)へ9GBもある無数のファイルをFTP接続してアップロードすることは無謀です。上記した通り、アップロードする際もFTP接続は頻繁に切れる為です。ではどうするか?と言えば、9GB のファイルを一括で圧縮して一つのファイルへまとめます。そうすると、容量が減りますし、FTP接続でアップロードする際も切れることがほぼ無くなります。
同じ9GBのアップロードでも、圧縮しない無数のファイル(今回は85,000ファイル)の場合は数時間かかる一方、圧縮すると数十分で完了します。
まず、zipファイルに圧縮してアップロードしました。で、以下の記事に沿って、unzip.php を実行しました。
【PHP】サーバー上で特定のフォルダーのファイルをzip圧縮したり解凍する方法
ところが、解凍されない!!
調べてみたところ、「サーバー上でzipファイルが解凍出来るのは、2GB以下のファイルのみ」 とのこと。これは困りました。色々調べてみたところ、.tar.gz ファイルであれば容量制限は無いとのこと。そこで、ファイル群を .tar.gz へ圧縮しなおしました。圧縮の際に使ったソフトは、 7-Zipです。一旦、ファイル群をtar ファイルへまとめてから、もう一度、 gzip で圧縮すると、 .tar.gz ファイルが出来ます。
.tar.gzとは?
.tar は、ファイル群を一つにまとめるアーカイブ形式の一つです。ひとつにまとめるだけで圧縮されません。 .gz は、一つのファイルのみを圧縮出来る形式です。二つ以上をまとめて圧縮出来ません。そこで、ファイル群を tar で一つにまとめ、それを gz 形式で圧縮する形式を .tar.gz として表します。
解凍
それを、フォルダーへアップロード(ファイル名は a.tar.gz )して、同じフォルダーにアップロードした以下のコードのファイル( untar_gz.php )を実行しました。
※文字コードはutf8 で、ファイル名は、 untar_gz.php として保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php //解凍するファイル名が a.tar.gz ならば a と入れて下さい。 $filename="a"; $filename = $filename.".tar.gz"; if(exec('tar xvzf ' . $filename)){ header("Content-type: text/html; charset=utf-8"); print("ファイル:" . $filename . "を解凍しました。<br-->"); return; }else{ header("Content-type: text/html; charset=utf-8"); print("ファイル:" . $filename . "の解凍に失敗しました。 "); return; } ?> |
すると、無事に解凍出来ました。
圧縮
因みに tar.gz へ圧縮するコードは以下の通りです。
http://hoge.jp/koko/
のフォルダー以下のファイルを圧縮する場合、
http://hoge.jp/koko/comp/
フォルダを作成して、その中に、圧縮プログラム( tar_gz.php )をアップします。圧縮ファイルは、a.tar.gz というファイル名で
http://hoge.jp/koko/comp/
に保存されます。
※文字コードは utf8 にして、ファイル名は、 tar_gz.php で保存して下さい
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?php //圧縮保存するファイル名。a.zipなどとなる。 $name = "a"; //圧縮ファイル保存フォルダー名 /* http://hoge.jp/koko/ のフォルダー以下のファイルを圧縮する場合、 http://hoge.jp/koko/comp/ フォルダを作成して、その中に、tar_gz.php をアップします。 圧縮ファイルは、 http://hoge.jp/koko/comp/ に保存されます。 */ $comp = "comp"; $this_file_path = __FILE__; $this_file_path = preg_replace('@'.$comp.'/tar_gz.php@s','',$this_file_path); $tempDir = "$this_file_path"; /////////////////////////////////設定ここまで $filepath = $tempDir . $comp."/"; // コマンド // cd:ディレクトリの移動 $command = "cd {$tempDir}; tar zcvf {$filepath}{$name}.tar.gz . --exclude {$name}.tar.gz"; // 実行します exec($command); header("Content-type: text/html; charset=utf-8"); print<<<EOD 実行ファイルへのフルパス: EOD; echo __FILE__ ; print<<<EOD <br ?--> 完了 EOD; ?> |
要するに、サーバー上の圧縮・解凍には、制限が無い .tar.gz がお勧めということです。