Если он работает. Ты по идее должен был прочитать, что за обработку этих спец. заголовков отвечают отдельные модули сервера, которые могут быть и не загружены. Т.е. для обычного шареда вирт. хостинга это может быть проблемой. Поэтому в код обычно помещают два метода, о чем я выше писал. Чтение штатными средствами – это обычно дефолтная заглушка, чтобы просто работало, а для реальной работы переключаются на «акселератор», предварительно обеспечив его работу. Мелкие файлы в принципе можно выдавать штатными средствами. Показанные протокольные заголовки – это под диалог загрузки. Для обычной отдачи картинок используй заголовок вроде того, что ты ранее показывал. С вычитыванием файлов из ФС поаккуратнее. Как бы не вычитал то, что другим знать не нужно Норм. воспроизведешь работу сервера, и все получится --- Добавлено --- Не из HTML-кода, а отдельные, как обычно. Посмотри в консоли браузера, сколько он делает запросов при загрузке любой среднестатистической страницы Если чего-то не заметишь/не получишь на сервере запрос на то, что должно быть, значит браузер ранее это уже закэшировал. --- Добавлено --- P.S. X-заголовок – это как бы замена чтению содержимого файла, т.е. его по идее лучше/нужно после протокольных заголовков размещать. Например, у тебя в коде могут линейно выдаваться протокольные заголовки и только потом пойдет вилка «чтение штатными средствами/выдача спец. заголовка».
С выводом файлов разобрался, всё работает, пока сделал такую реализацию, пока всё "топорно", но работает: PHP: public function setPath($requestedPath) { $pathToContent = $this->preparePath($requestedPath); $mime_content_type = mime_content_type($pathToContent); header("Content-Type: $mime_content_type"); readfile($pathToContent); exit(); } private function preparePath($path) { return "webapp/general/content/templates/default/design/$path"; } Т.к. всё работает по модели MVC, я пока на уровне теста, исполняю вывод изображения сразу после маршрутизатора, т.е. определяю в маршрутизаторе идет ли запрос непосредственно к какому-то файлу и если да, то вывожу его (при этом у меня есть еще массив с расширениями, тех файлов, которые можно выводить) Но выводить это на уровне маршрутизатора, как то противоречит MVC модели, я так понимаю это должно происходить в "View", тем более само имя шаблона (templates/default/), а именно 'default' может меняться и браться, как из базы данных, так и устанавливаться внутри (т.е. всё после маршрутизации) Мысли вслух: Нужно создать контроллер, который будет получать запрашиваемый URL к файлу и реализовывать его вывод. Но пока камнем преткновения является тот факт, что если делать это в том варианте как оно есть сейчас, этот самый контроллер нужно создавать в webapp, т.е. в том разделе, где все пишется именно под пользовательское приложение, что явно будет неправильно, ведь данный функционал является необходимой частью системы и должен располагаться внутри этой системы, а не в пользовательской части. PS: Но в целом как я предполагаю тут должен быть отдельный класс для работы с файлами, через который можно было бы не просто отдавать файл браузеру, но и делать загрузку файла на сервер и так же скачивать, учитывая права пользователя (зарегистрированный/гость)
Случайно заметил пост. Название первого метода непонятное. При чтении файлов используйте абс. пути (или явный переход в базовый каталог и чтение по отн. путям формата ./*). Что касается MVC, то все оч. размыто. Реализовать можно по-разному, например: - в контроллере: PHP: if ($file=getfile($param)) { showfile($file); } else { error(404); } - во вьюшке: PHP: header('Content-Type: '.$file['type']); if (isset($file['body'])) { echo $file['body']; } else { flushfile($file); } Тут предусмотрена возможность получать содержимое файла и в готовом виде (например, при чтении его из БД), и «дергать» модель из вида (когда ты непосредственно содержимым не располагаешь).