PHPだけでBasic認証

何かの拍子で使わないとも限らないのでメモ代わりに書いておく。ざっくりと流れだけ。

<?php
if (!authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
    header('WWW-Authenticate: Basic realm="title here"');
    header('HTTP/1.1 401 Unauthorized');
    echo 'Authentication failure.';
    exit;
}

function authenticate($user, $password)
{
    return ($user === VALID_USER && md5($password) === VALID_PASSWORD);
}
?>

authenticate関数の部分でデータベースアクセスするようにすれば、データベースを用いた認証機能も作れたりする。以前作ったサイトで簡易的な認証として使ったことがある。

Digest認証なども含めた記述がPHPマニュアルにあるのでそちらも参考に。

※追記として補足を書いたのでよろしければどうぞ。