X

cSV, Speed Variables

Мой класс по работе и быстрой обработке с предопределенными массивами.

Версия 0.2

 

    <?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;  
           } // конец функции  

        } // конец класса  

    ?>

пример вызовов переменных (должна быть установлена связь с БД):

      $_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) не будет, запрос отработает корректно.

Категории: PHP