PHPでURLに無効なパラメータがあるときに、404表示にする方法

php-get
このエントリーをはてなブックマークに追加
PR

PHPで動的にコンテンツを表示するときに、無効なパラメータが指定された時に404を返してエラーにする。

URLにパラメータがあるときに、$_GETでそのパラメータを配列で取得することが出来ます。取得した $_GET には配列でキーと値でセットでは入ります

 

例えば ?page=100 というパラメータがあった場合には

array(
 "page" => "100",
)

こんなかんじです。

 

 

まずは、$_GETが空じゃないかで条件分岐

次に、その内容が規定されたものに一致するかで条件分岐しています。

キーがあっても、値が無い場合もエラーとなるように条件に加えています。

if( !empty($_GET)) { 
 foreach ( $_GET as $key => $value ) {
 if ( !( "page" == $key ) || !$value) {
 header("HTTP/1.1 404 Not Found");
 exit;
 }
 } 
}

条件を増やしたい場合には !( “page” == $key )  AND !( “cat” == $key )  の様にすれば、複数のパラメータでも対応出来る。

 

他の方法として考えれるのは、既定のパラメータを配列のキーに入れて、$_GET と array_diff_key を使って重複を無くす様にすれば。規定していないものがある場合には 空ではない配列が出力されるので それを条件にする方法が考えられる

$parameter = array(
 "page" => "",
 "cat" => "",
);

$get = array_diff_key($_GET,$parameter);

if (!empty($get)) {
 header("HTTP/1.1 404 Not Found");
 exit;
}

foreach($_GET as $key => $value){
 if (!$value) {
  header("HTTP/1.1 404 Not Found");
  exit;
 }
}

パラメータの指定が多い場合には、こちらの方法を使ったほうがコードがスッキリしてて扱いやすい。カテゴリが動的に増えたり減ったりする場合など、データベースを扱うケースではこちらのほうがいいかなと思います。

どれもexitで終了させているのですが、トップページにリダイレクトさせたり404ページにリダイレクトさせたりするのも有りかと思います。パラメータエラーがあるっていう警告をページに表示する形も良い。

PR

COMMENT

コメントを残す

PR

9ineBBの管理人が運営するサイト

WDG WEB DESIGN GALLERY ウェブデザインギャラリー CC0 PHOTO 無料で使える高画質な写真をダウンロード、クレジット表記、リンク不要

9ineBBの最新情報をチェック・購読

Twitter Facebook Google+ Feedly RSS

どこをクリックしてもこの表示を消せます
(3日後以降に再度表示されます)