public static function go($query) { $query = Path::theme($query); if (!$query) { http_response_code(404); return; } $p = explode('?', $query, 2); $queryfile = $p[0]; if ($p[0] && (preg_match("/\\/\\./", $p[0]) || $p[0][0] == '.' && $p[0][1] != '/')) { http_response_code(403); //Forbidden exit; } if (strpos(realpath($p[0]), realpath('./')) !== 0) { //Проверка что доступ к внутреннему ресурсу http_response_code(403); exit; } //Узнать текущий путь браузера можно из REQUEST_URI, но узнать какая из папок в этом адресе является корнем проекта невозможно. //Эта задача решаема только для частных случаев. //В нашем случае мы полагаем либо к файлу было прямое обращение по месту расположения (site/vendor/infrajs/path/) //и Path::$root='../../../' либо файл запущен из корня сайта Path::$root='./' (site/) //Соответственно текущий файл может быть подключен только в корень проекта (chdir тогда не меняется). //Альтернативный вариант полагать, что корень сервера совпадает с корнем проекта тогда работал путь '/'.$src но такого соглашения нет. $ext = static::getExt($query); $isdir = static::isdir($query); if ($isdir || $ext == 'php') { static::inc($query); exit; } $file = URN::getRoot() . $query; /*//header("X-Sendfile: $file"); //header("Content-type: application/octet-stream"); //header('Content-Disposition: attachment; filename="' . basename($file) . '"'); //header("X-Sendfile: ".$file); //header("X-Accel-Redirect: ".static::getRoot().$query); exit; $mime=\mime_content_type($queryfile); echo $mime; exit; //return static::inc($query); echo file_get_contents($queryfile); exit;*/ Path::redirect($query); }