沼の底(東京)ブログ(気分で変わるタイトル)
沼の底(東京)を生き抜くための光と希望を与えるブログ

CMSなどを使わずHTMLページを時限公開する方法[PHP]

2017年10月4日(UPDATE:2017年10月5日)
TIPS | , , , ,

HTMLページの時限公開は、今や、CMSなどを導入すれば簡単に実現できますが、広告など、部分だけ時限公開したかったり、わざわざ更新頻度が高くないページは静的に作ってることがよくあります。

そこで、今回は静的ページベースに時限公開について書いていこうと思います。

前提として時限公開したいHTML内でPHPが動くようにしてください。

ページ全体を公開する

ここでいうページの全体公開は「404」→「公開」という前提に話をします。
まあコードを応用すれば「既出」→「公開」も余裕でできますが、既出の修正であれば後述の「部分を時限公開」するもご参照ください。

■timer.php
<?php
//↓time()と比べるためにmktime()で整形
function set_time( $year, $mon, $day = 1, $hour = 0, $min = 0, $sec = 0 ) {
	if($year): return mktime( $hour, $min, $sec, $mon, $day, $year );
	else: return false;
	endif;
}

$opener = set_time( $open[0],$open[1],$open[2],$open[3],$open[4],$open[5]);
$closer = set_time( $close[0],$close[1],$close[2],$close[3],$close[4],$close[5]);
?>

<?php
//↓公開日より削除日が過去の場合
if($opener >= $closer):
?>
<!doctype html>
<html>
<head>
<title></title>
</head>
<body>
<p>無効な時間設定です</p>
</body>
</html>
<?php exit; endif; ?>

<?php
//↓公開期間以外は404エラーを出力
if (($opener && time() <= $opener ) || ($closer && time() >= $closer)): 
	http_response_code (404);
?>
<!doctype html>
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL <?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> was not found on this server.</p>
</body>
</html>
<?php exit; endif; ?>
■index.html
<?php
$open = [2017,10,05,00,00]; //公開日を設定yyyy,mm,dd,hh,mm,ss(年月以外省略可能・一桁の場合の0も省略可能)
$close = [2017,10,05,23,59,59]; //削除日を設定yyyy,mm,dd,hh,mm,ss(年月以外省略可能・一桁の場合の0も省略可能)
?>
<?php require_once( 'timer.php' ); /*php読み込み*/ ?>


<!-- ↓タイマーを過ぎていたらコンテンツを普通に表示する。 -->
<!doctype html>
<html>
<head>
<title>404じゃないよ</title>
</head>
<body>
<p>コンテンツ</p>
</body>
</html>

こうすれば公開可能時間以外は、「404」エラーを出し続けます
即日公開の場合は「$open = []」、削除日が決まっていない場合は「$close = []」とカッコ内を空にすればタイマーは無効になります。

無理やりHTML内に書き込んでますが、時間設定の部分以外、外部化してもいいかもしれません。

2017.10.5 みにくかったので分離しました。

部分を時限公開する

広告バナーなど部分的に時限公開したい場合は以下のように記述すれば実現可能です。

■index.html
<?php
function timer( $year, $mon, $day = 1, $hour = 0, $min = 0, $sec = 0 ) {
    return ( time() >= mktime( $hour, $min, $sec, $mon, $day, $year ) );
}
?>
 
<!-- ↓以下通常のHTML -->
<!doctype html>
<html>
<head>
<title>404じゃないよ</title>
</head>
<body>
 
<?php if ( timer( 2017,1,1,0,0) ): /*公開日を設定yyyy,mm,dd,hh,mm,ss(年月以外省略可能)*/ ?>
<p>ここが時限公開コンテンツ</p>
<?php endif; ?>
 
<?php if (! timer( 2017,1,10,23,59 ) ): /*削除日を設定yyyy,mm,dd,hh,mm,ss(年月以外省略可能)*/ ?>
<p>ここが時限削除コンテンツ</p>
<?php endif; ?>
 
<?php if (timer( 2017,1,1,0,0 ) && ! timer( 2017,1,10,23,59 ) ): /*公開日・削除日を設定yyyy,mm,dd,hh,mm,ss(年月以外省略可能)*/ ?>
<p>公開~削除</p>
<?php endif; ?>
 
</body>
</html>

単純に現在時刻を過ぎてるかどうかを参照してそれを過ぎれば公開あるいは削除がされます。

JSを使った方法

あくまで見た目だけ変わった風に見せられればいいといった場合は、JSでも以下のような感じで、時間によってスクリプトの出しわけが実装可能です。

var today = new Date();

//時限公開
var sec_date = new Date('2017/10/03 1:22');
if(today > sec_date){
	console.log("公開してます")
};

//時限削除
var sec_date = new Date('2017/10/03 1:28');
if(today < sec_date){
	console.log("削除してます")
};

もちろんJSなので、無効にされるとちゃんと動かなくなりますし、ソースを見れば不可視コンテンツも見えてしまいます。
あまりおススメではないですが、そこまで重要な内容ではない場合でPHPが動かない場合は、検討してみてもいいかもしれません。

 

どうせPHPを使うなら時限公開のアプリなどを作ってもいいのでは?という意見はごもっともですが、そうも言ってられない事態やそこまでする必要のない事案も多々あるかと思いますので、フロントベースでできる簡単な時限公開をご紹介いたしました。

コメント

現在この記事のコメントはありません

コメントを送る

内容に問題がなければ「コメントを送信する」を押してください。(一度書いたコメントは取り消せません。)