Ejemplo n.º 1
0
 /**
  * Активация модуля
  * Создание общего контейнера входящих данных
  */
 static function activate()
 {
     if (get_magic_quotes_gpc()) {
         $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
         while (list($key, $val) = each($process)) {
             foreach ($val as $k => $v) {
                 unset($process[$key][$k]);
                 if (is_array($v)) {
                     $process[$key][stripslashes($k)] = $v;
                     $process[] =& $process[$key][stripslashes($k)];
                 } else {
                     $process[$key][stripslashes($k)] = stripslashes($v);
                 }
             }
         }
         unset($process);
     }
     // Нормализация массива $_FILES в соответствии с именованием полей формы
     if (isset($_FILES)) {
         // Перегруппировка элементов массива $_FILES
         $rec_to_array = function ($array, $name) use(&$rec_to_array) {
             $result = [];
             foreach ($array as $key => $value) {
                 if (is_array($value)) {
                     $result[$key] = $rec_to_array($value, $name);
                 } else {
                     $result[$key][$name] = $value;
                 }
             }
             return $result;
         };
         $files = [];
         foreach ($_FILES as $field => $data) {
             $files[$field] = [];
             foreach ($data as $name => $value) {
                 if (is_array($value)) {
                     $files[$field] = F::arrayMergeRecursive($files[$field], $rec_to_array($value, $name));
                 } else {
                     $files[$field][$name] = $value;
                 }
             }
         }
     } else {
         $files = [];
     }
     self::$source = array('REQUEST' => [], 'FILES' => $files, 'COOKIE' => isset($_COOKIE) ? $_COOKIE : [], 'RAW' => file_get_contents("php://input"), 'SERVER' => $_SERVER);
     if (isset($_SERVER['REQUEST_URI'])) {
         $_SERVER['REQUEST_URI'] = preg_replace('#\\?{1}#u', '&', $_SERVER['REQUEST_URI'], 1);
         //            $request_uri = preg_replace('#^'.preg_quote(DIR_WEB).'#u', '/', $_SERVER['REQUEST_URI'], 1);
         parse_str('path=' . $_SERVER['REQUEST_URI'], self::$source['REQUEST']);
         self::$source['SERVER']['argv'] = self::$source['REQUEST'];
         self::$source['SERVER']['argc'] = sizeof(self::$source['REQUEST']);
     }
     // Элементы пути URI
     if (isset(self::$source['REQUEST']['path']) && (self::$source['REQUEST']['path'] = rtrim(self::$source['REQUEST']['path'], '/ '))) {
         self::$source['PATH'] = explode('/', trim(self::$source['REQUEST']['path'], ' /'));
     } else {
         self::$source['PATH'] = [];
     }
     if (isset($_POST)) {
         self::$source['REQUEST'] = array_replace_recursive(self::$source['REQUEST'], $_POST);
     }
     // Аргументы из консоли (режим CLI)
     if (php_sapi_name() == 'cli' && isset($_SERVER['argv'])) {
         self::$source['REQUEST']['method'] = 'CLI';
         self::$source['SERVER']['argv'] = $_SERVER['argv'];
         self::$source['SERVER']['argc'] = $_SERVER['argc'];
     }
     self::$source['ARG'] = self::$source['SERVER']['argv'];
     // Метод запроса
     if (isset(self::$source['SERVER']['REQUEST_METHOD']) && !isset(self::$source['REQUEST']['method'])) {
         self::$source['REQUEST']['method'] = self::$source['SERVER']['REQUEST_METHOD'];
     }
 }