/** * 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; }
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; } }