にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

ちょっとしたAjaxおみくじの作り方(サーバ側)

前回のエントリではクライアント側を書きましたが、今回はサーバ側の簡単なPHPファイルの記述です。

まずはコードの全容。

<?php
header("Content-Type: text/html; charset=shift_jis");
header("Expires: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache,must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

usleep(500*1000);

$FILE = 'rako.txt';

if (file_exists($FILE)) {
    $lines = file($FILE);

    srand((double) microtime() * 1000000);
    echo $lines[rand(0,count($lines)-1)];
} else {
    echo "|д・)・・・";
}
?>

最初にHTTPヘッダの設定をします。

header("Content-Type: text/html; charset=shift_jis");

このプログラムでは半角カナを使用しているのでShift_JISを指定していますが、AjaxやるならUTF-8の方がよいでしょう。しょうもないプログラムなので大目に見てください。
ブラウザがIEの場合、キャッシュを見ておみくじ(なのかどうかは微妙ですが)の内容が更新されないようなので、キャッシュを無効にする設定をします。結局どれが効いてるのかは未確認ですが、全部書いとけば無難でしょう。どこかから拾ってきたコードです。

header("Expires: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache,must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

次に、スピナー表示用に500ms寝かせます。(Windows環境ではusleep()は動きません)

usleep(500*1000);

最後におみくじ用テキストファイルからランダムな行を選択して出力します。細かい説明は面倒なので割愛します。

if (file_exists($FILE)) {
    $lines = file($FILE);

    srand((double) microtime() * 1000000);
    echo $lines[rand(0,count($lines)-1)];
} else {
    echo "|д・)・・・";
}

というわけで、説明は以上です。
この変な顔文字はなんだとか言ってる内容がわからないとかどう見てもおみくじじゃないとかそういうところは大目に見てやってください。