FTPしかない環境でサイトアーカイブの作成

インターネット上のサーバ間でサイトデータの移設作業の依頼があったので作業させていただいた。
もともとサーバをいじるということはコマンドでガチャガチャいじることが常だったので、FTPしかアクセスが許されていないようないわゆるレンタルサーバというのは非常にやりにくい。まず、サイトデータを丸々抜き取ることそのものが大変だ。SSHでログインしてコマンドが使えるのなら、zipなりtarなりのコマンドを使ってサイトのアーカイブを丸々作成したうえで、そのファイルをFTPでダウンロードする。そうすると、圧倒的にダウンロード時間が違うし、何よりもファイル権限が書き変わったり、隠しファイルをダウンロードし損ねるなどということもない。場合によっては、こっそりとサイトアーカイブファイルをWEB公開しているディレクトリにおいて、新サーバからwgetしたら、一旦ローカルPCに保存する必要もない。
これらは、すべてコマンドが使えることが前提だ。使えない場合はどうすればいいのか、少し考えてみた。そこで思いついたのが、phpプログラムにアーカイブを作らせること。ソースコードは以下のようになる。

<?php
$path = "/var/www/www.hogehoge.com/public_html";
$file = "/var/www/www.hogehoge.com/www_hogehoge_com.zip";

print("Start Command!<hr/>");
exec("zip -r $file $path", $output, $returnVal);
print("Finish Command! Ziped: $path to $file<hr/>");
print("returnVal=".$returnVal);
?>

$path は今アーカイブしたいサイトのルートディレクトリのフルパス。$file はアーカイブファイルのフルパス。これらは適宜書き換える必要があるし、実験していないが相対パスでもどうにかなるであろう。
このphpファイルをサイトにアップロードし、あとはブラウザからURLを叩けば、無事zipファイルが作成されている。あとは、FTPでこのzipファイルをダウンロードする。
ちなみに、execはsystemでもいいが、その場合はアーカイブ作成のコマンド出力内容がブラウザに表示されてしまう。ちゃんとアーカイブされているかの確認ができる一方で、アーカイブ対象ファイルが大量の場合は膨大な量が表示されるのであまりお勧めしない。
なお、コマンドを直発行するので当然セキュリティ的にはあまりよろしくないプログラムであるから、用済みになったらさっさとサーバから消した方がいい。