概要
お客様の要望で1月1日0時0分0秒になったらページをお正月版に切り替えてほしいという要望がぼちぼちあるのですが、年が切り替わった瞬間に手動ではやりたくないので、たいていの共用レンタルサーバーでも実行できる簡単な自動更新方法を紹介します。
自動実行スクリプト
前提として、サーバーがcron実行に対応していること、シェルかPHPでディレクトリ・ファイルのコピー時処理ができること、PHPでメール送信ができることのみです。
共用レンタルだと、サーバーによってコマンドラインで実行できるコマンドが限定されていてcpコマンドが使えないとか、メール送信ができないとかあったりするのでなるべくよくあるレンタルサーバーで対応できるようにコピー処理はシェル・PHPどちらでも実行できるようにし、メール送信はPHPで実行するようにしています。
これで私が扱ったことのあるたいていのサーバーで対応できるようになりました。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# コピー処理(必要な分列挙する)(PHPでコピー処理を記述してもOK) | |
cp [:コピー元ディレクトリ・ファイル:] [:コピー先ディレクトリ・ファイル:] | |
# コピー処理終了後に自分あてに完了通知メールをメール通知プログラムでエラーが発生したらログに出力。 | |
/usr/local/bin/wget -O /dev/null https://example.com/path/to/script/send_result.php 2>> /path/to/log/log.txt |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// 誰でもアクセスできないように何らかのセキュリティ処理を入れておいた方がよいです。 | |
// コピー処理をこっちに書いてもOK | |
// copy('コピー元パス', 'コピー先パス'); | |
$to = 'example@example.com';// 通知先メールアドレス、カンマ区切りで複数設定可 | |
$title = 'メールタイトル';// メールタイトル | |
$content = '本文';// メール本文 | |
$from = "From: example@example.com\r\n";// 送信元メールアドレス | |
$from .= "Return-Path: example@example.com"; | |
// メール送信処理 | |
mb_language("Japanese"); | |
mb_internal_encoding("UTF-8"); | |
mb_send_mail($to, $title, $content, $from); | |
中小企業のお客様が多いので共用レンタルサーバーが多いため、環境に制限がある場合が多く、もっとスマートにはできるのですがそうするとあるサーバーだと使えないなど問題が出てしまうので今の形で落ち着きました。
年に数回しか使わないのでこんなもんでたいていカバーできます。