cSV, Speed Variables
Мой класс по работе и быстрой обработке с предопределенными массивами.
Версия 0.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
<?php /* Это ANSI файл */ if (!defined('ALLOW_ACCESS')) die('Access denied!'); class SV { // SV = Speed Vars private static function GetVars($arr, $delim) { $ret = Array(); $ret_tmp = explode ($delim, $arr); if (is_array($ret_tmp)) foreach ($ret_tmp as $value) if (trim($value)!=='') $ret[]=trim($value); return $ret; } // конец функции private static function ApplyAction($var, $actions) { if (!is_array($actions)) trigger_error('cSV :: Error in var actions ( '.$actions.' )', E_USER_WARNING); $allowed_actions = Array( 'trim', 'intval', 'floatval', 'round', 'round2', 'html', 'htmld', 'mq', 'js', 'cp1251utf8', 'utf8cp1251', 'md5', 'b64e', 'b64de', 'likequery', 'pgsql', 'mysql', 'qt', 'qtin'); foreach ($actions as $action) if (!in_array($action, $allowed_actions)) trigger_error('cSV :: Bad action found: `'.$action.'` ( '.implode(':',$actions).' )', E_USER_ERROR); if ( in_array('trim', $actions) ) $var = trim($var); if ( in_array('intval', $actions) ) $var = intval($var); if ( in_array('floatval', $actions) ) $var = floatval($var); if ( in_array('round', $actions) ) $var = round($var); if ( in_array('round2', $actions) ) $var = round($var,2); if ( in_array('html', $actions) ) $var = htmlspecialchars($var); if ( in_array('htmld', $actions) ) $var = htmlspecialchars_decode($var); if ( in_array('mq', $actions)) if (get_magic_quotes_gpc()) $var = stripslashes($var); if ( in_array('js', $actions) ) $var = str_replace("'", "\'", $var); if ( in_array('cp1251utf8', $actions) ) $var = iconv('windows-1251','utf-8',$var); if ( in_array('utf8cp1251', $actions) ) $var = iconv('utf-8','windows-1251',$var); if ( in_array('md5', $actions) ) $var = md5($var); if ( in_array('b64e', $actions) ) $var = base64_encode($var); if ( in_array('b64de', $actions) ) $var = base64_decode($var); if ( in_array('likequery', $actions)) $var = addCslashes(mysql_real_escape_string(str_replace('\\','\\\\', $var)), '_%'); if ( in_array('pgsql', $actions)) $var = pg_escape_string($var); if ( in_array('mysql', $actions)) $var = mysql_real_escape_string($var); if ( in_array('qt', $actions)) $var = "'".$var."'"; if ( in_array('qtin', $actions)) { if (!is_string($var)) trigger_error('cSV :: Bad qtin var', E_USER_ERROR); $var = explode(',', $var); foreach ($var as $key=>$val) $var[$key]= "'".$val."'"; $var = implode(',', $var); } return $var; } // конец функции private static function GetReqVar($global_name, $keys) { $ret = ''; if (is_array($keys)) { $ReqVar = $global_name; foreach ($keys as $var) $ReqVar .= "['".$var."']"; eval('if (isset('.$ReqVar.')) $ret ='.$ReqVar.';'); } return $ret; } // конец функции /* Блок публичных методов */ private static function VarAction($varName, $params) { $ret = false; $params = str_replace(' ', '', $params); if (!preg_match('|\[([a-zA-Z0-9_,]+)\](.*)|', $params, $regs)) { trigger_error('cSV :: Can not parse var name ( '.$varName.$params.')', E_USER_WARNING); } else { if ( $varKeys = self::GetVars($regs[1], ',') ) { $ReqVar = self::GetReqVar($varName, $varKeys); if (!emptyempty($regs[2])) { if ( $actions = self::GetVars($regs[2], ':') ) $ReqVar = self::ApplyAction($ReqVar, $actions); } } $ret = $ReqVar; } return $ret; } public static function Request($params) { return self::VarAction('$_REQUEST', $params); } // конец функции public static function Get($params) { return self::VarAction('$_GET', $params); } // конец функции public static function Post($params) { return self::VarAction('$_POST', $params); } // конец функции public static function Session($params) { return self::VarAction('$_SESSION', $params); } // конец функции public static function Globals($params) { return self::VarAction('$GLOBALS', $params); } // конец функции public static function Server($params) { return self::VarAction('$_SERVER', $params); } // конец функции public static function Variable($var, $params) { if ( $actions = self::GetVars($params, ':') ) $var = self::ApplyAction($var, $actions); return $var; } // конец функции } // конец класса ?> |
пример вызовов переменных (должна быть установлена связь с БД):
1 2 3 4 5 |
$_REQUEST['a']['b']['c'] = ' Some data with sql \' injection and xss <script>alert('Yo!')</script>'; mysql_query('INSERT INTO `table` SET `columnName`='.SV::Request('[a,b,c]:trim:html:mq:mysql:qt').')'; |
в этом выражении, к строке будут применены функции:
- trim
- html_special_chars
- magic_quotes_gpc если включен
- mysql_real_escape_string
- и строка будет взята в одиночные кавычки
в случае если $_REQUEST['a']['b']['c'] не будет определен, то ошибки (и даже warning'a) не будет, запрос отработает корректно.
Author: | Tags: /
| Rating:
Leave a Reply