Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2011, 22:15   #31
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
И теперь еще вопрос. Почему все хранят конфиги и роуты в Php виде? Чем не устраивает INI, Yuml???
Да потому что содержимое php-файла не выведешь в браузер(случайно или намеренно),
а все эти ваши "INI, Yuml" и прочие "удобные" - запросто...
Andkorol вне форума Ответить с цитированием
Старый 26.08.2011, 02:57   #32
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

ой, ошибся адресом... да проблемы нет если парсить а потом кэшировать...
Кстати классы для кэширования не видел... где стандарт???
Memcache? APC? xCache? ...

Да, -под конкретную(вообще на лету написал)...
Так дело в том что фрэймворк делают чтобы было удобно использовать ПОД КОНКРЕТНУЮ СИТУАЦИЮ !!! До популярного фрэймворка ещё как до луны...
Но, может через лет так 5...
8oOoRPM вне форума Ответить с цитированием
Старый 26.08.2011, 02:59   #33
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

Вообще фрэймворк должен работать максимально быстро, это значит-
менише грузить, меньше парсить, оптимизировать код !!!
8oOoRPM вне форума Ответить с цитированием
Старый 28.08.2011, 20:05   #34
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Вот немножко переделал index.php
PHP код:
<?php
session_start
();
header("HTTP/1.0 200 Ok");

define('DOCUMENT_ROOT'$_SERVER['DOCUMENT_ROOT']);
define('BASE_URL'"http://".$_SERVER['SERVER_NAME']);
define('APPLICATION_PATH'DOCUMENT_ROOT.'/../Application');
define('LIBRARY_PATH'DOCUMENT_ROOT.'/../library');

include_once(
LIBRARY_PATH.'/Kernel/plugins/error.php');
set_error_handler('error_handler');
include_once(
LIBRARY_PATH.'/Kernel/plugins/anti_ddos.php');

list(
$msec$sec) = explode(" "microtime());
$start $sec+$msec;

    Class 
GetParams{
        static function 
Post($el=NULL){
            if(!
$el==NULL){
                    
$data $_REQUEST[$el];
                }else{
                    
$data $_REQUEST;
                }
            
$data GetParams::xss_clean($data);

            return 
$data;
        }
        static function 
Get($el=NULL){
                
parse_str($_SERVER['QUERY_STRING'], $output);
                if(!
$el==NULL){
                    
$data $output[$el];
                    
$data GetParams::xss_clean($data);
                }else{
                    foreach(
$output as $k=>$v)
                        if(empty(
$v)){
                            
$output GetParams::xss_clean($k);
                        }
                    
$data $output;
                }
                return 
$data;
        }
        
        static function 
File(){
                return 
$_FILES;
        }
            
public static function 
xss_clean($str)
{
    if(
is_array($str) || is_object($str))
    {
        foreach (
$str as $k => $s)
        {    
          
$str[$k] = GetParams::xss_clean($s);
        }
        return 
$str;
    }
    
    
$str str_replace("\0"''$str);

    if (
preg_match("/script/i"$str) || preg_match("/xss/i"$str))
    {
    
$str preg_replace("#<(/*)(script|xss)(.*?)\>#si"''$str);
    }
    
   
// $str = mysql_real_escape_string($str);
    
    
$str htmlspecialchars($str);
 
    return 
$str;
}    
    }

class 
FrontController
{
    protected 
$_routes;
    protected 
$_settings;
    protected 
$_controller;
    protected 
$_action;
    protected 
$obj;
    protected 
$_module;
    protected 
$cache;
    protected 
$file;
    protected 
$_data;
    
    public function 
__construct($request)
    {
        
$this->_initResources();
        
$this->_initConfigs();
        
$this->_initRoutes();
       
$this->_initCache();
        
    }

   protected function 
_initResources()
    {
        include_once 
LIBRARY_PATH.'/Kernel/Loaders/Autoload_Resource.php';
        
//include_once LIBRARY_PATH.'/Kernel/Parent/Registry.php';
       
spl_autoload_register(array('Autoload_Resource''load_class'));
   
   
$array = new ArrayObject();
      
$arr = array('beta'=>array('newww'),'test');
   
//print_r($array->$arr);
    
}

   protected function 
_initConfigs()
    {
    include_once(
LIBRARY_PATH.'/Kernel/Loaders/LoadConfig.php');
    
$app APPLICATION_PATH.'/configs/application.conf';
    
$this->_settings Load_Config::Parse($app);
    }

   protected function 
_initRoutes()
    {
        
$router_list APPLICATION_PATH.'/configs/routers.ini';
        
$router Load_Config::Parse($router_list);
        
        
$url $_SERVER['REQUEST_URI'];
        
$url preg_replace('/[0-9]/'''$url);
        
$url str_replace('.php',''$url);
        
$url trim($url,'/');
        
$url explode("/"$url);
        
        if(
array_key_exists($url[0], $router)){
        
$key=TRUE;}else{$key=NULL;}

        if(isset(
$key)){
                
$rout=$url[0];
                
$controller $router[$rout]['controller']."Controller";
                
$action $router[$rout]['action']."Action";
                
$module $router[$rout]['module'];
        }else{
                
$module 'Default';
            if(!empty(
$url[0])){
                
$controller ucwords($url[0]);
                
$controller $controller."Controller";
            }else{
                
$controller "IndexController";
            }

            if(!empty(
$url[1])){
                
$action ucwords($url[1]);
                
$action$action."Action";
            }else{
                
$action="IndexAction";
            }

        }
     
$this->_controller $controller;
     
$this->_action $action;
     
$this->_module ucwords($module);
         }

   protected function 
_initCache(){
   
$action str_replace('Action',''$this->_action);
   
   if(
array_key_exists($this->_controller$this->_settings['cache']['controller'])){
   
$ch1 'no';
   }else{
$ch1 NULL;}
   
   if(
array_key_exists($this->_action$this->_settings['cache']['action'])){
   
$ch2 'no';
   }else{
$ch2 NULL;}
   
   if(
$this->_settings['cache']['enable']==&& !$ch1=='no' && !$ch2=='no'){
   
$this->cache = new library_Kernel_Cache_File;
   
   
$this->file $this->_module.'_'.$this->_controller.'_'.$this->_action;
   
$cache $this->cache->Read($this->_settings['cache']['dir'], $this->file);
   
   if(
$cache==NULL){
   
$this->run('cache');
   }else{
   echo 
$cache;

   list(
$msec$sec) = explode(" "microtime());
        
$stop $sec+$msec;
        global 
$start;
        
$script_time $stop-$start;
        
$script_time round($script_time,6); 
        echo
"<center>Скрипт выполнен за ".$script_time." сек.</center>"
   }
   
   }else{
   
$this->run('nocache');
   }
   }
dem66 вне форума Ответить с цитированием
Старый 28.08.2011, 20:10   #35
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

PHP код:
   public function run($command)
    {
    global 
$start;
    if(
$this->_module=='Default'){
    
$controllerName sprintf('Application_Controllers_%s'ucfirst($this->_controller));
    }else{
    
$controllerName sprintf('Application_Modules_%s_Controllers_%s'ucfirst($this->_module), ucfirst($this->_controller));
  }

  
Autoload_Resource::load_class($controllerName);
  
$controller $this->_controller;
  
$obj = new $controller;
  
$this->obj $obj;
  
$action $this->_action;
  
$obj->$action();

  
//Запускаем лайоут
      
if($this->_settings['layout']['enable']==1){
      
$lay $this->_settings['layout']['patch'];
          if(
$command=='cache'){
              
ob_start();
              include 
APPLICATION_PATH."/$lay";
              
$buffer ob_get_contents();
              
ob_end_flush();
              
$this->cache->Write($this->_settings['cache']['dir'], $this->file$buffer);
          }else{
              include 
APPLICATION_PATH."/$lay";
          }
      }else{
              
$this->Content();    
     }
      
list(
$msec$sec) = explode(" "microtime());
$stop $sec+$msec;
$script_time $stop-$start;
$script_time round($script_time,6); 
echo
"<center>Скрипт выполнен за ".$script_time." сек.</center>"
   }
   
        public function 
Content(){
        
$controller str_replace('Controller',''$this->_controller);
        
$action str_replace('Action',''$this->_action);
        if(
$this->_module=='Default'){
        
$view 'Application_Views_'.$controller.'_'.$action;
        }else{
        
$view sprintf('Application_Modules_%s_Views_%s_%s'ucfirst($this->_module), ucfirst($controller), ucfirst($action));
        }
        
Autoload_Resource::load_class($view$this->obj);
     }
}

$frontController = new FrontController($_SERVER); 
Get
domain.com/index/?param=1

Получаем через
Код:
GetParams::Get();
Выведет весь массив, или вот так:
Код:
GetParams::Get('param');
В этом случаи вернет 1.
или вот так
domain.com/index/?1

Post
Код:
GetParams::Post();
Вернет весь массив, или вот так:
Код:
GetParams::Post('element');
Вернет содержимое element.
dem66 вне форума Ответить с цитированием
Старый 28.08.2011, 20:43   #36
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Конструкция, выносящая мозг своей запутанностью:
PHP код:
if(!$el==NULL
Есть же is_null() для таких вещей...

Get у вас стремный очень, если не сказать дырявый.
Смотрим:
PHP код:
        static function Get($el=NULL){ 
                
parse_str($_SERVER['QUERY_STRING'], $output); 
                if(!
$el==NULL){ // ))))))))))
                    
$data $output[$el]; 
                    
$data GetParams::xss_clean($data); 
                }else{ 
    
// вот тут начинается
                    
foreach($output as $k=>$v
                        if(empty(
$v)){ 
    
// если есть пустое значение в массиве
    // то мы проверяем на XSS ключ этого значения (зачем ключ-то???)
                            
$output GetParams::xss_clean($k); 
                        } 
    
// а все остальное мы тупо передаем на выход
    // без всяких проверок
    // т.е. имеем 100%-ную дыру в безопасности
                    
$data $output
                } 
                return 
$data
        } 
Так что Get() без параметров у вас того, забавный вобщем...
Andkorol вне форума Ответить с цитированием
Старый 28.08.2011, 21:11   #37
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

оё. перепутал.
Что то я недосмотрел.

Должно быть вот так
PHP код:
static function Get($el=NULL){  
                
parse_str($_SERVER['QUERY_STRING'], $output);  
                if(!
$el==NULL){
                    
$data $output[$el];  
                    
$data GetParams::xss_clean($data);  
                }else{  
              
//Вобщем сдесь проверяем есть ли какието данные по этому ключу.
//Ведь запрос можно написать в двох вариантах
//http://domain.com/index/?param=text
//и так
//http://domain.com/index/?text
//Воесть во втором случаи ключа param нет а есть просто значение. вот сдесь и возвращается это значение(тоесть получается имя ключа).

                    
foreach($output as $k=>$v)  
                     
$k GetParams::xss_clean($k);  
                        if(empty(
$v)){  
                          
$data $k;  
                        }else{  
                          
$v GetParams::xss_clean($v);
                          
$output[$k] = $v;
                          
$data $output;
                        } 
                }  
                return 
$data;  
        } 
Тоесть если запрос будет вида /?text то получается вот это array('text'=>);
и поэтому проверяем только ключ.
А если будет вот так: /?text=privet то получаем вот это array('text'=>'privet');
И проверяются в этом случаи и ключ и значение.
Возможно я опять чтото упустил, если так то прозьба исправить.

сейчас думаю над вот этим - ArrayObject;
Чтобы получать доступ к массиву не так $arr['text'] а вот так $arr->text;
Тоесть думаю над тем как это прикрутить к GET,POST. И плохо то что так можно получить $arr->text; а вот так уже нет $arr->mass->text;
Может у кого появятся какие то соображения, прозьба поделится.
dem66 вне форума Ответить с цитированием
Старый 28.08.2011, 21:32   #38
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
оё. перепутал.
Что то я недосмотрел.

Должно быть вот так
PHP код:
                     foreach($output as $k=>$v)  
                     
$k GetParams::xss_clean($k);  
                        if(empty(
$v)){  
                          
$data $k;
                        }else{  
                          
$v GetParams::xss_clean($v);
                          
$output[$k] = $v;
                          
$data $output;
                        } 
Я вам советую всегда тестировать ваш код - тогда за него вам никогда стыдно не будет...

В этом коде в цикле выполняется только эта строка:
$k = GetParams::xss_clean($k); - и всё.
Если вы хотите вставить в цикл больше одной команды - используйте фигурные скобки.

Еще замечание - это не гуд, когда функция возвращает то string, то array ...
Andkorol вне форума Ответить с цитированием
Старый 29.08.2011, 03:29   #39
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

Andkorol +1 за тип при возврате...
8oOoRPM вне форума Ответить с цитированием
Старый 29.08.2011, 09:18   #40
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Если вы хотите вставить в цикл больше одной команды - используйте фигурные скобки.
Я это помню. Просто голова вчера уже совсем не соображала.

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Еще замечание - это не гуд, когда функция возвращает то string, то array ...
А что если например нужно получить string? Например когда в гет параметрах только один елемент /?text ???

чтото я не понял
dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows 98 и Framework 2 doober Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 7 12.07.2010 14:37
Framework 3.5 psycho-coder Общие вопросы .NET 8 17.07.2009 14:33
PHP и MySQL: Тестирование студентов Sanakan PHP 3 27.05.2009 20:26
Framework Blackout Софт 8 19.02.2009 09:49