Ignore:
Timestamp:
2009/06/27 21:57:52 (15 years ago)
Author:
Seasoft
Message:

未検出に関するエラー時に HTTP ステータス 404 を返すように改良した。

Location:
branches/comu-ver2/data/class/pages
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/class/pages/LC_Page.php

    r18132 r18140  
    345345        return sha1(uniqid(rand(), true)); 
    346346    } 
     347     
     348    /** 
     349     * HTTPステータスコードを送出する。 
     350     * 
     351     * @param integer $code HTTPステータスコード 
     352     * @return void 
     353     * @author Seasoft (新規作成) 
     354     * @see Moony_Action::status() (オリジナル) 
     355     * @link http://moony.googlecode.com/ (オリジナル) 
     356     * @author YAMAOKA Hiroyuki (オリジナル) 
     357     * @copyright 2005-2008 YAMAOKA Hiroyuki (オリジナル) 
     358     * @license http://opensource.org/licenses/bsd-license.php New BSD License (オリジナル) 
     359     * @link http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89 (邦訳) 
     360     * @license http://www.gnu.org/licenses/fdl.html GFDL (邦訳) 
     361     */ 
     362    function sendHttpStatus($code) { 
     363        $protocol = $_SERVER['SERVER_PROTOCOL']; 
     364        $httpVersion = (strpos($protocol, '1.1') !== false) ? '1.1' : '1.0'; 
     365        $messages = array( 
     366            // Informational 1xx                        // 【情報】 
     367            100 => 'Continue',                          // 継続 
     368            101 => 'Switching Protocols',               // プロトコル切替え 
     369            // Success 2xx                              // 【成功】 
     370            200 => 'OK',                                // OK 
     371            201 => 'Created',                           // 作成 
     372            202 => 'Accepted',                          // 受理 
     373            203 => 'Non-Authoritative Information',     // 信頼できない情報 
     374            204 => 'No Content',                        // 内容なし 
     375            205 => 'Reset Content',                     // 内容のリセット 
     376            206 => 'Partial Content',                   // 部分的内容 
     377            // Redirection 3xx                          // 【リダイレクション】 
     378            300 => 'Multiple Choices',                  // 複数の選択 
     379            301 => 'Moved Permanently',                 // 恒久的に移動した 
     380            302 => 'Found',  // 1.1                     // 発見した (リクエストしたリソースは一時的に移動されているときに返される) 
     381            303 => 'See Other',                         // 他を参照せよ 
     382            304 => 'Not Modified',                      // 未更新 
     383            305 => 'Use Proxy',                         // プロキシを使用せよ 
     384            // 306 is no longer used but still reserved // 将来のために予約されている 
     385            307 => 'Temporary Redirect',                // 一時的リダイレクト 
     386            // Client Error 4xx                         // 【クライアントエラー】 
     387            400 => 'Bad Request',                       // リクエストが不正である 
     388            401 => 'Unauthorized',                      // 認証が必要である 
     389            402 => 'Payment Required',                  // 支払いが必要である 
     390            403 => 'Forbidden',                         // 禁止されている 
     391            404 => 'Not Found',                         // 未検出 
     392            405 => 'Method Not Allowed',                // 許可されていないメソッド 
     393            406 => 'Not Acceptable',                    // 受理できない 
     394            407 => 'Proxy Authentication Required',     // プロキシ認証が必要である 
     395            408 => 'Request Timeout',                   // リクエストタイムアウト 
     396            409 => 'Conflict',                          // 矛盾 
     397            410 => 'Gone',                              // 消滅した 
     398            411 => 'Length Required',                   // 長さが必要 
     399            412 => 'Precondition Failed',               // 前提条件で失敗した 
     400            413 => 'Request Entity Too Large',          // リクエストエンティティが大きすぎる 
     401            414 => 'Request-URI Too Long',              // リクエストURIが大きすぎる 
     402            415 => 'Unsupported Media Type',            // サポートしていないメディアタイプ 
     403            416 => 'Requested Range Not Satisfiable',   // リクエストしたレンジは範囲外にある 
     404            417 => 'Expectation Failed',                // 期待するヘッダに失敗 
     405            // Server Error 5xx                         // 【サーバエラー】 
     406            500 => 'Internal Server Error',             // サーバ内部エラー 
     407            501 => 'Not Implemented',                   // 実装されていない 
     408            502 => 'Bad Gateway',                       // 不正なゲートウェイ 
     409            503 => 'Service Unavailable',               // サービス利用不可 
     410            504 => 'Gateway Timeout',                   // ゲートウェイタイムアウト 
     411            505 => 'HTTP Version Not Supported',        // サポートしていないHTTPバージョン 
     412            509 => 'Bandwidth Limit Exceeded'           // 帯域幅制限超過 
     413        ); 
     414        if (isset($messages[$code])) { 
     415            if ($httpVersion !== '1.1') { 
     416                // HTTP/1.0 
     417                $messages[302] = 'Moved Temporarily'; 
     418            } 
     419            header("HTTP/{$httpVersion} {$code} {$messages[$code]}"); 
     420            header("Status: {$code} {$messages[$code]}", true, $code); 
     421        } 
     422    } 
    347423} 
    348424?> 
  • branches/comu-ver2/data/class/pages/error/LC_Page_Error.php

    r16741 r18140  
    8787            case PRODUCT_NOT_FOUND: 
    8888                $this->tpl_error="ご指定のページはございません。"; 
     89                $this->sendHttpStatus(404); 
    8990                break; 
    9091            case PAGE_ERROR: 
     
    102103            case CATEGORY_NOT_FOUND: 
    103104                $this->tpl_error="ご指定のカテゴリは存在しません。"; 
     105                $this->sendHttpStatus(404); 
    104106                break; 
    105107            case SITE_LOGIN_ERROR: 
Note: See TracChangeset for help on using the changeset viewer.