現在の位置: ホーム> 最新記事一覧> PHP HTTP 401 Unauthorizedエラーの原因と解決策を詳しく解説

PHP HTTP 401 Unauthorizedエラーの原因と解決策を詳しく解説

M66 2025-11-02

PHP HTTP 401 不正エラーの概要

HTTP 401 Unauthorized エラーは、サーバーがリソースにアクセスするためにユーザー認証を必要とすることを意味します。このエラー メッセージは、ユーザーが保護されたコンテンツにアクセスしようとして認証に失敗した場合に返されます。この記事では、PHP での 401 エラーの一般的な原因を要約し、対応する解決策を提供します。

認証が設定されていません

サーバーが認証を設定しない場合、ユーザーは保護されたリソースにアクセスできません。

解決

認証タイプは、PHP の header() 関数を使用して設定できます。

 header('WWW-Authenticate: Basic realm="My Realm"');

無効な認証情報

ユーザーが提供したユーザー名またはパスワードがサーバーに保存されている情報と一致しない場合、アクセスは失敗します。

解決

ユーザーが提供した資格情報が正しいことを確認するか、ユーザーにパスワードをリセットするように指示します。

保護されたファイルにはアクセスできません

401 エラーは、ユーザーが保護されたファイルにアクセスする権限を持っていない場合にも発生する可能性があります。

解決

ファイル権限が正しく設定されていること、およびユーザーが適切なアクセス権を持っていることを確認してください。

.htaccess ファイルがありません

Apache サーバーでは、認証の構成に .htaccess ファイルが使用されます。このファイルがディレクトリに存在しない場合、サーバーは認証を実行できません。

解決

保護されたディレクトリに .htaccess ファイルを作成し、認証構成を追加します。

 AuthType Basic
AuthName "My Realm"
AuthUserFile /path/to/auth-file
Require valid-user

サーバーエラー

不適切なサーバー構成や技術的な問題によっても、HTTP 401 エラーが発生する可能性があります。

解決

サーバー ログで関連するエラー メッセージを確認し、必要に応じてテクニカル サポートに連絡してください。

実践事例

パスワードで保護されたファイルSecret.txtを含む保護されたフォルダーprivateがあるとします。認証は次の PHP コードを使用して実行できます。

 <!--?php
// 基本認証を設定する
header('WWW-Authenticate: Basic realm="My Realm"');

// 資格情報を確認する
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    // ファイルからユーザーとパスワードを読み取る
    $users = file("users");
    $authenticated = false;

    foreach ($users as $line) {
        list($username, $password) = explode(":", trim($line));

        // 提供された認証情報をファイル内の認証情報と比較します
        if ($_SERVER['PHP_AUTH_USER'] == $username && $_SERVER['PHP_AUTH_PW'] == $password) {
            $authenticated = true;
            break;
        }
    }

    // ユーザーが認証されている場合,その後、アクセスを許可します
    if ($authenticated) {
        fopen("private/secret.txt", "r");
    } else {
        // 未検証,エラーを返す
        header('HTTP/1.0 401 Unauthorized');
        echo 'Authentication failed.';
    }
} else {
    // 認証情報が利用できません,認証を要求する
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authorization Required.';
}
?-->

上記の構成により、保護されたリソースへのアクセスを PHP で効果的に管理し、ユーザー エクスペリエンスに影響を与える HTTP 401 Unauthorized エラーを回避できます。