За последние 24 часа нас посетили 22617 программистов и 1016 роботов. Сейчас ищут 663 программиста ...

Просветите по QUERY_STRING и REQUEST_URI

Тема в разделе "PHP для новичков", создана пользователем AlexandrS, 12 сен 2019.

  1. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Если он работает. Ты по идее должен был прочитать, что за обработку этих спец. заголовков отвечают отдельные модули сервера, которые могут быть и не загружены. Т.е. для обычного шареда вирт. хостинга это может быть проблемой. Поэтому в код обычно помещают два метода, о чем я выше писал. Чтение штатными средствами – это обычно дефолтная заглушка, чтобы просто работало, а для реальной работы переключаются на «акселератор», предварительно обеспечив его работу. Мелкие файлы в принципе можно выдавать штатными средствами.

    Показанные протокольные заголовки – это под диалог загрузки. Для обычной отдачи картинок используй заголовок вроде того, что ты ранее показывал.

    С вычитыванием файлов из ФС поаккуратнее. Как бы не вычитал то, что другим знать не нужно ;)

    Норм. воспроизведешь работу сервера, и все получится :)
    --- Добавлено ---
    Не из HTML-кода, а отдельные, как обычно. Посмотри в консоли браузера, сколько он делает запросов при загрузке любой среднестатистической страницы ;) Если чего-то не заметишь/не получишь на сервере запрос на то, что должно быть, значит браузер ранее это уже закэшировал.
    --- Добавлено ---
    P.S. X-заголовок – это как бы замена чтению содержимого файла, т.е. его по идее лучше/нужно после протокольных заголовков размещать. Например, у тебя в коде могут линейно выдаваться протокольные заголовки и только потом пойдет вилка «чтение штатными средствами/выдача спец. заголовка».
     
    AlexandrS и artoodetoo нравится это.
  2. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    С выводом файлов разобрался, всё работает, пока сделал такую реализацию, пока всё "топорно", но работает:

    PHP:
    1.     public function setPath($requestedPath)
    2.     {
    3.         $pathToContent = $this->preparePath($requestedPath);
    4.         $mime_content_type = mime_content_type($pathToContent);
    5.  
    6.         header("Content-Type: $mime_content_type");
    7.         readfile($pathToContent);
    8.         exit();
    9.     }
    10.  
    11.     private function preparePath($path)
    12.     {
    13.         return "webapp/general/content/templates/default/design/$path";
    14.     }
    Т.к. всё работает по модели MVC, я пока на уровне теста, исполняю вывод изображения сразу после маршрутизатора, т.е. определяю в маршрутизаторе идет ли запрос непосредственно к какому-то файлу и если да, то вывожу его (при этом у меня есть еще массив с расширениями, тех файлов, которые можно выводить)

    Но выводить это на уровне маршрутизатора, как то противоречит MVC модели, я так понимаю это должно происходить в "View", тем более само имя шаблона (templates/default/), а именно 'default' может меняться и браться, как из базы данных, так и устанавливаться внутри (т.е. всё после маршрутизации)

    Мысли вслух:
    Нужно создать контроллер, который будет получать запрашиваемый URL к файлу и реализовывать его вывод. Но пока камнем преткновения является тот факт, что если делать это в том варианте как оно есть сейчас, этот самый контроллер нужно создавать в webapp, т.е. в том разделе, где все пишется именно под пользовательское приложение, что явно будет неправильно, ведь данный функционал является необходимой частью системы и должен располагаться внутри этой системы, а не в пользовательской части.

    PS:
    Но в целом как я предполагаю тут должен быть отдельный класс для работы с файлами, через который можно было бы не просто отдавать файл браузеру, но и делать загрузку файла на сервер и так же скачивать, учитывая права пользователя (зарегистрированный/гость)
     
    #27 AlexandrS, 18 ноя 2019
    Последнее редактирование: 18 ноя 2019
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Случайно заметил пост.

    Название первого метода непонятное. При чтении файлов используйте абс. пути (или явный переход в базовый каталог и чтение по отн. путям формата ./*). Что касается MVC, то все оч. размыто. Реализовать можно по-разному, например:
    - в контроллере:
    PHP:
    1. if ($file=getfile($param)) {
    2.     showfile($file);
    3. } else {
    4.     error(404);
    5. }
    - во вьюшке:
    PHP:
    1. header('Content-Type: '.$file['type']);
    2.  
    3. if (isset($file['body'])) {
    4.     echo $file['body'];
    5. } else {
    6.     flushfile($file);
    7. }
    Тут предусмотрена возможность получать содержимое файла и в готовом виде (например, при чтении его из БД), и «дергать» модель из вида (когда ты непосредственно содержимым не располагаешь).
     
    #28 miketomlin, 18 ноя 2019
    Последнее редактирование: 18 ноя 2019
    AlexandrS нравится это.