Пример #1
0
 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);
 }