アクセスするだけでWebサイトを丸々バックアップ
このブログは「レンタルサーバのロリポップ!」を利用していますが、デフォルトでファイルのバックアップツールが用意されていません。
そこで今回「アクセスするだけでWebサイトのデータをzipに圧縮して保存する」PHPのコードを書きました。
バックアップ用の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);//ファイルをダウンロード後サーバから削除 ?>
変更点は以下の2点です。
5行目「example」をサイトの「公開 ( アップロード ) フォルダ」名に変更
6行目「example.zip」をダウンロードするzipファイル名に変更
変更できたら好きな名前(backup_exampleなど)にして、ロリポップのルートディレクトリ(一番上のディレクトリ)にアップロードしてください。
ApacheのBasic認証でアクセス規制する方法
上のファイルをアップロードしてアクセスするだけでバックアップできますが、このままだと誰でもバックアップ用のファイルにアクセスできます。zip圧縮はサーバへの負荷が高いため、悪意を持ってアクサスされた場合サーバを追い出される危険性があります。
かといってバックアップするたびにアップロードし直すのは手間がかかります。そこでベーシック認証を利用して、簡単なアクセス制限をかけます。
「.htaccess」の内容
まずは「.htaccess」でアクセスを規制するファイル名を指定します。
「.(ドット)」から始まるファイル作成するには手間がかかるため、「hoge.htaccess」と名前を付けて、FTPでサーバにアップロードしてから、サーバ上でリネームしてください。既にサーバに「.htaccess」が存在する場合はダウンロードして以下のコードを追記してください。
AuthName "Input Your Name And Password" AuthUserFile /home/users/1/lolipop.jp-000000000000000/web/.htpasswd AuthType Basic <Files ~ "^backup_example\.php$"> require valid-user </Files>
変更点は2点
2行目「/home/users/1/lolipop.jp-000000000000000/web/」を自分のサイトに合わせて変更します。ロリポップ!のユーザー専用ページヘログインして「ツール > アカウント情報」をクリック。「フルパス」の欄にパスが記載されています。
4行目「backup_example」を上で保存したphpのファイル名に変更。サイトごとに複数のphpを配置した場合は「^backup_(hoge|huga)\.php$」のようにすれば1度に複数のファイルにアクセス規制をかけられます。
編集が終わったらphpと同じくルートディレクトリへアップロードして保存します。
「.htpasswd」の内容
「.htaccess」でアクセス規制するファイル名を指定したので、今度は「.htpasswd」で許可するユーザー名とパスワードを指定します。
hoge:jdXcAKNoYpJ5M
ユーザー名とパスワードの組み合わせは「こちらのサイト」で自動生成できます。
左のメニューより「ベーシック認証 (B)」をクリック。「ユーザ名」「パスワード」を入力し「.htpasswdを作成」ボタンをクリック。すると「.htpasswd」の欄にIDとパスワードが表示されるので、コピー・ペーストします。
こちらも編集が終わったらルートディレクトリへアップロードしてください。
これで、ルートディレクトリにバックアップ用の「backup_example.php」と、アクセス規制用の「.htaccess」と「.htpasswd」がアップロードされていると思います。
バックアップを実行
先ほど開いたロリポップ!のユーザー専用ページで「アカウント情報」を開き「ロリポップ!のドメイン」をブラウザのアドレス欄にコピー・ペースト。ペーストしたURLの後にアップロードしたphpファイルの名前を入力します。
例:「http://00000000000000.lolipop.jp/hoge.php」
すると「認証が必要」というウィンドウが出るので、先ほど設定したIDとパスワードを入力します。(「.htpasswd」用のコードを生成した際にWebサイトで入力したIDとパスワードです。画像はChromeのもの。)
圧縮後のファイルが100MB程度なら遅くても1分程度でダウンロードが開始されると思います。
上手く動作したらURLをブックマークに登録しておけば、バックアップしたいときにアクセスすれば自動でzipファイルに圧縮して、ダウンロードすることができます。
うまくいかない場合の対処
上手く動作しない場合はPHPが動作しないのか、アクセス規制が上手く動作しないのか問題を切り分けると原因を究明しやすくなります。
PHPが動作しない場合
タイムアウトする場合
バックアップするファイルサイズが大きいとタイムアウトする場合があります。その場合はPHPファイルの「set_time_limit(60)」の時間を増やしてください。
セーフモードがOffになっているかチェック
ロリポップ!の設定でPHPのセーフモードがONだと上手く動作しないかもしれません。
ユーザー専用ページから「webツール > PHP設定」をクリックします。
ページ中程にある「safe_modeの項目」を「Off」に変更してページ下部の「php.iniを変更する」ボタンをクリック。
「バックアップするディレクトリを指定」が正しいかチェック
独自ドメインの設定で指定したディレクトリ名が正しく入力されているか確認。
認証がうまくいかない場合のチェック
「.htaccess」で指定したフルパスや、phpのファイル名が間違っていないかチェック。
「.ptpasswd」に「パスワード生成ツール」で作成したパスワードを入力しているかチェック。
(hogeユーザーに0123というパスワードを指定する場合、プレーンな状態で「hoge:0123」と入力しても認証できません。)
ロリポップ!で利用していると冒頭で書きましたが、PHPの使えるほとんどのレンタルサーバで動作します。サーバの環境に合わせて変更してください。
WordPressなどデータベースと連動したシステムを利用している場合は、データベースのバックアップも忘れずに。
非常に役に立ちました。
どうも有り難うござくぃました。
お役に立てて何よりです。