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