PHPでURLに無効なパラメータがあるときに、404表示にする方法
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