此类用于接受作者指定的参数说明对象,对参数的名称和类型进行验证,还可以指定一个额外的函数名称对参数进行处理 <?php function sanitize_vars(&$vars, $signatures, $redir_url = null){ $tmp = array(); foreach($signatures as $name=> $sig){ if(!isset($vars[$name]) && isset($sig['required']) && $sig['required']){ if($redir_url){ header("Location: $redir_url"); } else { echo 'Parameter $name not present and no redirect URL'; } exit(); } $tmp[$name] = $vars[$name]; if(isset($sig['type'])){ settype($tmp[$name], $sig['type']); } if(isset($sig['function'])){ $tmp[$name] = $sig['function']($tmp[$name]); } } $vars = $tmp; }
应用举例:
$sigs = array( 'email' => array('required' => TRUE, 'type' => 'string', 'function' => 'addslashes'), 'passwd' => array('required' => TRUE, 'type' => 'string', 'function' => 'addslashes') ); sanitize_vars($_POST, $sigs); 其中的, 'function' => 'addslashes'是可选的.也可以指定别的自定义函数.这里主要是对用户输入进行处理,防止注入. 每个选项都有个required键值对,说明参数是否是必须的,type的类型和settype一致,
settype ( mixed &$var , string $type ) : bool
将变量 var 的类型设置成 type。
参数
var
要转换的变量。
type
type 的可能值为:
◦ "boolean" (或为"bool",从 PHP 4.2.0 起)
◦ "integer" (或为"int",从 PHP 4.2.0 起)
◦ "float" (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的"double"现已停用)
◦ "string"
◦ "array"
◦ "object"
◦ "null" (从 PHP 4.2.0 起)
有了这个神器,就多了一道安全屏障,如果类型设置为int,那就只能接收整型的参数,否则会被该函数自动拦截处理了.