Пример #1
0
 /**
  * Trying to parse all possible request types
  */
 public static function parseRequest()
 {
     $c = PVars::getObj('config_request');
     if (!$c) {
         throw new PException('Config error!');
     }
     $req = @parse_url($_SERVER['REQUEST_URI']);
     if (isset($req['query'])) {
         unset($req['query']);
     }
     if (isset($req['fragment'])) {
         unset($req['fragment']);
     }
     $req = PFunctions::glueParsedUrl($req);
     $d = $_SERVER['SCRIPT_NAME'];
     $d = dirname($d);
     $p = strpos($req, $d);
     if ($p !== false) {
         $req = substr($req, $p + strlen($d));
     }
     if ($c->prefix) {
         $p = strpos($req, $c->prefix);
         if ($p !== false) {
             $req = substr($req, $p + strlen($c->prefix));
         }
     }
     if (substr($req, 0, 1) == '/') {
         $req = substr($req, 1);
     }
     $req = explode('/', $req);
     $newReq = array();
     foreach ($req as $r) {
         $r = rawurldecode($r);
         // Ignore words with too low charactercodes (control characters etc)
         $len = strlen($r);
         for ($i = 0; $i < $len; $i++) {
             $c = ord($r[$i]);
             if ($c < 32) {
                 continue 2;
             }
         }
         if (trim($r) != '') {
             $newReq[] = $r;
         }
     }
     return $newReq;
 }
Пример #2
0
 private function save()
 {
     if ($this->_callback && is_array($this->_callback)) {
         foreach ($this->_callback as $key => $callback) {
             if (!array_key_exists($key, $_POST)) {
                 continue;
             }
             foreach ($_POST as $k => $v) {
                 if (is_string($v)) {
                     $v = trim($v);
                     $v = stripslashes($v);
                 }
                 $this->_vars[$key][$k] = $v;
             }
             $this->_activeKey = $key;
             $callback = $this->_callback[$key];
             unset($this->_callback[$key]);
             break;
         }
         $ret = false;
         $db = PVars::getObj('config_rdbms');
         $dao = PDB::get($db->dsn, $db->user, $db->password);
         $c = new $callback[0]($dao);
         $cbRet = call_user_func(array(&$c, $callback[1]));
         if ($cbRet) {
             $ret = $cbRet;
         }
         $_SESSION['PostHandler'] = serialize($this);
         if ($ret) {
             $ret = parse_url($ret);
             $query = array();
             if (isset($ret['query'])) {
                 parse_str($ret['query'], $query);
             }
             if (is_array($query) && array_key_exists(session_name(), $query)) {
                 continue;
             }
             $query[session_name()] = session_id();
             $queries = array();
             foreach ($query as $k => $q) {
                 $queries[] = $k . '=' . $q;
             }
             $ret['query'] = implode('&', $queries);
             $ret = PFunctions::glueParsedUrl($ret);
             session_write_close();
             header('Location: ' . $ret);
             PPHP::PExit();
         }
         return TRUE;
     }
 }