PukiWikiでバックアップを週一等スケジュール化して実行する方法
2024/02/20
PukiWikiでバックアップを取りたかった。調べたらディレクトリごと保存すればいいみたいだけど手動で対応するのは面倒くさい。週に1回自動でディレクトリをzip化し、指定したメールアドレスに送ってほしかった。以下にバックアップ用プログラムとCron内容をメモ。
バックアップ用のプログラムを作成
以下を記述したファイルを適当なディレクトリにアップロードする。今回は「/var/www/html/hoge/cron.php」と想定する。
<?php
#制限時間なし
set_time_limit(0);
#zipファイル名
$zip_name = "backup.zip";
#zipファイルを保存するディレクトリ
$save_dir = "/var/www/html/hoge";
#圧縮したいディレクトリ
$zip_dir = "/var/www/html/fuga";
#コマンドの実行
$command = "zip -r " . $save_dir . $zip_name . " " . $zip_dir;
shell_exec($command);
#エンコード設定
mb_language("ja");
mb_internal_encoding("UTF-8");
#メアドとタイトル、本文設定
$to = "hoge@gmail.com";
$from = "fuga@gmail.com";
$subject = "送信タイトル";
$text = "送信本文";
#ヘッダー設定
$header = "Content-Type: multipart/mixed;boundary=\"__BOUNDARY__\"\n";
$header .= "Return-Path: " . $to . " \n";
$header .= "From: " . $from ." \n";
$header .= "Sender: " . $from ." \n";
$header .= "Reply-To: " . $to . " \n";
#本文設定
$body = "--__BOUNDARY__\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n";
$body .= $text . "\n";
$body .= "--__BOUNDARY__\n";
#添付ファイル設定
$body .= "Content-Type: application/octet-stream; name=\"{$zip_name}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$zip_name}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents($save_dir . $zip_name)));
$body .= "--__BOUNDARY__\n";
#送信
mb_send_mail($to, $subject, $body, $header);
#作成したファイルの削除
unlink($save_dir . $zip_name);
zipファイル等の設定と送受信メアドあたりは適宜変更する。
Cronで自動実行させる
vi /etc/crontab #毎週月曜日の03:00に実行 0 3 * * 1 root /usr/bin/php /var/www/html/hoge/cron.php
関連記事
-
-
【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法
だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見た ...
-
-
PHPで定義済みの変数 / 定数とincludeしているファイル一覧を取得する方法
他社が作成されたPHPのファイルを読み解く際に、定義済みの変数 / 定数や、in ...
-
-
日付の比較で○日前というのを調べる
PHP及びjavascriptで日付の比較をしたく、締切日とかではなく ○日前と ...
-
-
MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法
phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...
-
-
PHPでPOST送信する際に多次元配列も送る方法
PHPでPOST送信する際に多次元配列も送りたかった。ただ普通に送ろうとするとO ...