Что такое формат файла PHTML?
Файл .phtml - это серверный скрипт PHP, который сочетает в себе разметку HTML с блоками кода PHP, функционально идентичный стандартному файлу .php. Единственным значимым отличием является расширение файла.
Когда веб-сервер получает запрос на файл .phtml, он пропускает его через интерпретатор PHP. PHP выполняет встроенные блоки <?php ... ?> и выдает полученный HTML в браузер клиента - браузер никогда не видит исходный код PHP. Чтобы это работало, сервер должен быть явно настроен на обработку .phtml как PHP. В Apache для этого требуется директива AddHandler application/x-httpd-php .phtml (в .htaccess или httpd.conf); в Nginx необходимо соответствующее сопоставление fastcgi_param. Без такой конфигурации сервер может выдать необработанный исходный код PHP посетителям, что является риском раскрытия информации.
Расширение .phtml появилось в конце 1990-х годов в эпоху PHP 3 / раннего Zend Engine, когда PHP часто встраивался непосредственно в файлы шаблонов HTML. Оно получило устойчивое распространение в Zend Framework и по-прежнему активно используется в Magento (теперь Adobe Commerce) для файлов шаблонов уровня представления.
С точки зрения безопасности, .phtml является классической целью для обхода фильтров загрузки файлов: фильтры, блокирующие загрузку .php, часто упускают из виду .phtml, .php5, .php3 и подобные варианты, что позволяет выполнять произвольный код PHP.
Связанные форматы включают обычные скрипты .php и файлы .phps (отображение исходного кода PHP). «Магические байты» и внутреннее управление версиями отсутствуют; версия среды выполнения PHP полностью определяется конфигурацией сервера.
Безопасность и защита
РИСК: HIGHФайлы .phtml выполняют произвольный код PHP на сервере - тот же риск, что и у .php. Критические проблемы безопасности: (1) Если форма загрузки файлов в веб-приложении разрешает загрузку .phtml, блокируя при этом .php, злоумышленник может загрузить PHP-шелл с расширением .phtml и получить удаленное выполнение кода на сервере. (2) Если сервер непреднамеренно раскрывает исходный код .phtml (не настроен обработчик PHP), учетные данные и строки подключения к базе данных в коде становятся общедоступными. Администраторам серверов следует: явно указать .phtml в конфигурации обработчика PHP и запретить выполнение скриптов в каталогах загрузки для .php, .phtml, .phar, .php3, .php4, .php5.
Детали формата
в двух словахПрограммы, открывающие файлы PHTML
Технические подробности
глубокая спецификация| Модель выполнения | Обрабатывается на стороне сервера интерпретатором PHP; клиент получает только отрендеренный HTML-вывод |
| Кодировка | Обычный текст, рекомендуется UTF-8; исторически ASCII или Latin-1 |
| Разделители кода | <?php ... ?> (стандарт); <?= ... ?> (короткое эхо); <? ... ?> (короткий тег, устарело) |
| MIME-тип | application/x-httpd-php; также text/html и text/x-php в зависимости от настроек сервера |
| Конфигурация Apache | Для выполнения требуется AddHandler application/x-httpd-php .phtml в .htaccess или httpd.conf |
| Конфигурация Nginx | Требуется fastcgi_param или блок location, сопоставляющий .phtml с PHP-FPM |
| Основной вариант использования | Шаблоны уровня представления Magento (Adobe Commerce); устаревшие представления Zend Framework |
| Функциональное отличие от .php | Отсутствует - обработка идентична; отличается только расширение файла |
| Риск безопасности | Классический обход фильтра загрузки файлов: блокирует .php, но может упустить .phtml, что позволяет выполнять произвольный PHP |
| Размер файла | Обычно от 1 КБ до 500 КБ |
| Поддержка версий PHP | Совместим с PHP 4 до PHP 8.x; на уровне формата изменений между версиями нет |
| Связанные ОС | Linux (Apache/Nginx), Windows (IIS/Apache), macOS |
| Выпущен | circa 1997-1998 (early PHP 3/Zend era) |
| Последняя версия | PHP 8.x (2024); .phtml itself has no versioning |
| Спецификация | www.php.net |
Конвертации PHTML
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах PHTML.