Как я могу вернуть статические файлы в PHP?

Я использую файл .htaccess для перенаправления всех запросов на тот же index.php . Оттуда я решаю, что делать в зависимости от URL-адреса входящего запроса.

Пока, я сопоставляю URL-адрес запроса с структурой каталогов относительно source папки, так что example.com/user/create сопоставляет source/user/create/index.php . Файл, находящийся там, может обрабатывать запрос по мере необходимости и генерировать вывод HTML.

Но это не работает для статических активов, браузер может запросить. Поэтому моя идея состоит в том, чтобы выяснить, заканчивается ли URL-адрес запроса с расширением файла, и сопоставить его с структурой каталогов относительно папки с assets , чтобы example.com/css/default.css отображался в assets/css/default.css , Но я не знаю, как отвечать статическим файлом вместо HTML-кода с PHP.

Обычно это может быть сделано с использованием дополнительного правила .htaccess , но я хочу динамически менять папку с ресурсами в коде.

Как я могу отправить статический файл, указанный на жестком диске сервера, клиенту браузера в PHP?

Related of "Как я могу вернуть статические файлы в PHP?"

На htacess

 #Expections RewriteCond %{REQUEST_URI} ^/assets.*$ RewriteRule ^(.*)$ - [L,NC] #You redirect to index ... 

поместите a / в начало пути к файлу

 /assets/path/to/file 

Ну, если вы действительно этого хотите, вы можете просто использовать readfile() . Но было бы лучше, если бы веб-сервер обрабатывал статические файлы, если можно; он более эффективен, чем запуск PHP, чтобы вытащить файл из двери.

Кроме того, с помощью подхода PHP вам, вероятно, придется установить заголовок Content-Type, соответствующий каждому файлу, что может раздражать. Ваш веб-сервер будет делать это для вас уже при непосредственном обслуживании файлов.

Кроме того, есть другие вещи, которые вы можете получить за «бесплатные» в настоящий момент, которые вам придется рассмотреть – используя ob_gzhandler если вы хотите сжать ваши страницы, как это уже может быть сделано для статических файлов Apache.

Поэтому, хотя это возможно, и я могу видеть причины, по которым это иногда желательно, я, вероятно, попытаюсь сделать такой вид обработки исключением, а не правилом для файлов, которые обычно не являются динамическими …