[CGIで自動更新:方法b] 日時を判別し、新旧どちらかのURLへ転送する方法

それでは最後に、「現在ページ」と「更新ページ」の両方をアップロードしておき、現在時刻に応じて、前者のURLか後者のURLのどちらかに自動転送する方法をご紹介致します。この方法での処理内容は「転送先を切り替えるだけ」なので、「更新」とは少々言い難いでしょう。「更新ページ」のURLが事前にバレてしまわないよう注意が必要です。

例:
ここでは、以下のようなURLとファイル名で構成する場合を例にして説明します。

  • 最初に閲覧者がアクセスするためのURL:
    → http://www.example.com/autorenew/ などのように「/」で終わるURL
  • 上記のURLをブラウザで閲覧した際に、実際に表示されるファイル:
    → index.cgi
  • 「現在の内容」の書かれたページ(※):
    → present.html
  • 「更新後の内容」の書かれたページ(※):
    → new.html

※どちらのページも、HTMLでなくても構いません。例えば、PHPやCGIなどを使って動的に内容を生成しているページでも問題ありません。

準備:
もし、「/」で終わるURLにアクセスした際に、index.cgiが表示される設定に既になっているのであれば、以下の準備は不要です。index.cgiが表示されないなら、まずは下記の1行を記述した「.htaccess」ファイルを用意します。
DirectoryIndex index.cgi index.html
上記のように記述することで、「/」記号で終わるURLにアクセスされた際には、index.cgiが(あれば)表示されるようになります。

日時を判別して、新旧どちらかに転送するCGIを作成:
以下のようにPerlソースを記述し、「index.cgi」のファイル名で保存してアップロードします。閲覧者には、このCGIにアクセスしてもらう必要があります。
#! /usr/bin/perl

use Time::Local;

# ▼指定日時
my $renewDate = timelocal(45 ,59 ,23 ,31 ,12-1 ,2014 );

# ▼現在時刻を判別して転送
my $htmlFile;
if( $renewDate < time ) {
	# 指定時刻よりも現在時刻の方が後なら「更新」ページへ移動
	print "Location: new.html

";
}
else {
	# 指定時刻よりも現在時刻の前が後なら「現在」ページへ移動
	print "Location: present.html

";
}
上記は、指定日時を「2014年12月31日23時59分45秒」に設定したい場合の記述例です。前ページでも説明しましたが、ここで日時の指定に使っているtimelocal関数は、引数として「秒,分,時,日,月,年」の順番で日付を指定します。このとき、5番目の引数の「月」は、「0が1月」・「1が2月」……「11が12月」をそれぞれ示すため、1を引いています。この点を間違えないようご注意下さい。

以上で完成です。

動作のイメージ:
閲覧者が http://www.example.com/autorenew/ にアクセスすると、index.cgi が実行され、
  • 指定時刻より前なら、http://www.example.com/autorenew/present.html へ転送
  • 指定時刻より後なら、http://www.example.com/autorenew/new.html へ転送
されます。

これまでにご紹介した「cronを使う方法」や「CGIを使う方法a」とは異なり、URLが変化します。更新用のページは、指定時刻になる前であっても(URLさえ分かれば)閲覧できてしまいます。また、(指定時刻後には直接閲覧できる必要があるため)アクセスを拒否する設定にはしておけません。ですから、例えば「pXpz2ic.html」などのように推測されにくい名称にしておくことが必要です。なお、本番使用の前に、ちゃんと実行されるかどうか直近の日時を使ってテストして下さい。

注意点:
この方法は、単に転送先を切り替えているだけなので、「一度、現在ページへ移動したユーザ」は、指定日時後にページの再読込をしても、内容が更新されることはありません。ずっと「現在ページ」が表示され続けます。

指定日・指定時刻にウェブページを自動で更新させたい

今回は、指定日・指定時刻になったときに、自動でウェブページの内容を更新する方法として、cron機能を使う方法1つと、CGIを使う方法2つの、合計3つの方法をご紹介致しました。最も楽で望ましいのは、最初にご紹介したcron機能を使う方法でしょう。ぜひ、試してみて下さい。

【関連記事】



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。