13時27分48秒 [Web関連]
WordPressやMovable TypeのようなCMSツールをウェブ上にセットアップする際、それらを構成する数百~数千ファイルをウェブサーバ上にアップロードする必要があります。FTPソフトを使って、それらの膨大なファイルを1つ1つアップロードすると非常に時間が掛かってしまいますし、アップロード途中に転送エラーが発生すると作業をやり直さなければならないなどの面倒な問題も起こります。
実はそんな無駄な方法を使わなくても、ファイル数が数百・数千・数万個でも楽にウェブサーバへアップロードでき、かつ、転送エラーも発生しない(発生しても簡単に対処できる)方法があります。
その高速アップロード方法とは、とても簡単で、
という方法です。
これなら、ZIP内に含まれるファイル数が数百・数千個であったとしても、アップロードするファイルは1つだけで済みます。ファイルを1つ1つ転送するわけではないので、サーバとの無駄な通信回数を削減でき、合計の処理時間も短くできます。しかも、1ファイルしかアップロードしないので転送エラーも発生しにくく、たとえ発生してもその1ファイルの転送を再度やり直せば良いだけです。
しかも、圧縮されてデータサイズが縮まっていますから、総データ転送量も低く抑えられます。
大量のファイルが含まれるシステムなどをウェブサーバ上にアップロードしたいとき、「×:やってはいけない方法(時間が掛かりすぎる方法)」と「○:望ましい方法(高速に済む方法)」は下図に示すとおりです。
上図で、[○]の方が望ましいのは、以下の3点からです。
というわけで、大量のファイルを高速にアップロードするには、ZIPファイルに圧縮された1ファイルの状態でアップロードするのが望ましいわけです。
上記の手順で問題になるのは、ウェブサーバ上にアップロードしたZIPファイルをどうやって展開するのか、という点でしょうね。
WindowsなどのPC上であれば、ZIPファイルをダブルクリックするなり右クリックするなりで展開できますが、ウェブサーバ上ではそうはいきません。
しかし、ウェブサーバ上でunzipコマンドが使用可能であれば、簡単に展開が可能です。
以下に、ウェブサーバ上でunzipコマンドを実行する2通りの方法を紹介しておきます。
例えば、TELNET(SSH)でウェブサーバのシェルにログインして、下記のようにunzipコマンドを実行すれば、任意のZIPファイルをサーバ上で展開できます。下図はTeraTermを使って「archive.zip」ファイルをunzipコマンドで展開する場合の操作例です。ZIPファイル内の9ファイルが展開されていることが分かります。
unzipコマンドは、以下の書式で使います。とても簡単です。
unzip (ファイル名)
例えば、カレントディレクトリに存在する「archive.zip」ファイルを展開したいなら、以下のように入力して実行するだけです。
unzip archive.zip
しかし、そもそもウェブサーバ上のシェルにログインできるサービスを提供していないレンタルサーバもあり、上記の方法が常に使えるわけではありません。その場合でも、ウェブサーバ上でunzipコマンドが使用可能であるなら、次の方法でも展開が可能です。
要はウェブサーバ上でunzipコマンドが実行できれば良いのですから、以下のようなシンプルなCGIを作ってアップロードし、ウェブサーバ上で実行(=ブラウザでCGIにアクセス)する方法でも任意のZIPファイルを展開できます。
#!/usr/bin/perl print "Content-type: text/html\n\n"; `/usr/local/bin/unzip archive.zip`; print "Unzip Complete.";
上記は、Perlで記述した「unzipコマンドを実行するだけ」の簡単なCGIです。
※上記ソースの2行目と4行目はなくても構いません。(ただ、これがないとブラウザ上からCGIを実行したときにエラーが表示されてしまいますし、ZIPの展開処理が終わったのかどうかも判断できないので、まあ書いておく方が良いとは思います。)
※3行目の「/usr/local/bin/unzip」部分は、実際にunzipコマンドの存在する場所を指定する必要があります。単にunzipと書くだけで良いかも知れませんが。
※わざわざCGIにしなくても、シェルスクリプトとかでも良いとは思います。(^_^;)
この方法は、もちろん高速アップロードだけではなく高速ダウンロードにも使えます。
ウェブサーバ上にあるシステムをローカルにバックアップしておきたい場合など、ウェブ上の数百・数千ファイルを一気にダウンロードしたいケースがあります。
そんなときは、
という方法なら、たった1つのZIPファイルをダウンロードするだけで済みますから、とても高速にダウンロード作業が完了します。
ウェブ上でZIPに圧縮するには、zipコマンドを実行すれば良いだけです。
先程と同じように、TELNET(SSH)でシェルにログインしてコマンドを打つか、zipコマンドを実行するCGIを書いてウェブ上で実行すれば良いでしょう。
というわけで、数百・数千ファイルをローカルとウェブサーバ間で転送したい場合は、アップロードであってもダウンロードであっても、ZIPファイルの状態で転送すれば、高速に作業が済みます、という話でした。
ぜひ、この方法で無駄な時間と手間を省いてみて下さい!
この日記へのコメントはお気軽に! コメント数:0件
(前の記事) « 書き仕事のデータ喪失防止対策として、EmEditorの自動保存・自動バックアップ機能を使う方法
前後のエントリ
< 旧 / 新 >
コメント数: 0件