Wat is het PHTML-bestandsformaat?
Een .phtml-bestand is een PHP-script aan de serverzijde dat HTML-opmaak mengt met PHP-codeblokken, functioneel identiek aan een standaard .php-bestand. Het enige betekenisvolle verschil is de bestandsextensie.
Wanneer een webserver een verzoek ontvangt voor een .phtml-bestand, stuurt deze het bestand door naar de PHP-interpreter. PHP voert de ingebedde <?php ... ?>-blokken uit en stuurt de resulterende HTML naar de browser van de client - de browser ziet de PHP-broncode nooit. Om dit te laten werken, moet de server expliciet geconfigureerd zijn om .phtml als PHP te behandelen. In Apache vereist dit een AddHandler application/x-httpd-php .phtml-richtlijn (in .htaccess of httpd.conf); in Nginx is een bijbehorende fastcgi_param-mapping nodig. Zonder die configuratie kan de server de onbewerkte PHP-broncode aan bezoekers leveren, wat een risico op informatielekken met zich meebrengt.
De .phtml-extensie ontstond eind jaren 90 tijdens het PHP 3 / vroege Zend Engine-tijdperk, toen PHP vaak rechtstreeks in HTML-sjabloonbestanden werd ingebed. Het kreeg blijvende navolging in het Zend Framework en wordt nog steeds actief gebruikt in Magento (nu Adobe Commerce) voor de sjabloonbestanden van de weergavelaag.
Vanuit een beveiligingsoogpunt is .phtml een klassiek doelwit voor het omzeilen van bestandsupload-filters: filters die .php-uploads blokkeren, zien .phtml, .php5, .php3 en soortgelijke varianten vaak over het hoofd, wat de uitvoering van willekeurige PHP-code mogelijk maakt.
Gerelateerde formaten zijn onder meer gewone .php-scripts en .phps-bestanden (weergave van PHP-broncode). Er zijn geen magic bytes en er is geen interne versiebeheer; de PHP-runtimeversie wordt volledig bepaald door de serverconfiguratie.
Beveiliging & veiligheid
RISICO: HIGH.phtml-bestanden voeren willekeurige PHP-code uit op de server - hetzelfde risico als .php. Kritieke beveiligingsproblemen: (1) Als een bestandsuploadformulier op een web-app .phtml-uploads toestaat terwijl .php wordt geblokkeerd, kan een aanvaller een PHP-webshell met een .phtml-extensie uploaden en externe code-uitvoering op de server verkrijgen. (2) Als een server onbedoeld de .phtml-broncode blootstelt (geen PHP-handler geconfigureerd), worden inloggegevens en database-verbindingsreeksen in de code openbaar. Serverbeheerders moeten: .phtml expliciet vermelden in de PHP-handlerconfiguratie, en scriptuitvoering weigeren in upload-mappen voor .php, .phtml, .phar, .php3, .php4, .php5.
Formaatdetails
in een notendopProgramma's die PHTML-bestanden openen
Technische details
diepe specificaties| Uitvoeringsmodel | Aan de serverzijde verwerkt door de PHP-interpreter; client ontvangt alleen de gerenderde HTML-output |
| Codering | Platte tekst, UTF-8 aanbevolen; historisch ASCII of Latin-1 |
| Code-scheidingstekens | <?php ... ?> (standaard); <?= ... ?> (korte echo); <? ... ?> (korte tag, verouderd) |
| MIME-type | application/x-httpd-php; ook text/html en text/x-php afhankelijk van serverconfiguratie |
| Apache-configuratie | AddHandler application/x-httpd-php .phtml in .htaccess of httpd.conf vereist voor uitvoering |
| Nginx-configuratie | fastcgi_param of location-blok mapping van .phtml naar PHP-FPM vereist |
| Primair gebruiksdoel | Magento (Adobe Commerce) weergavelaag-sjablonen; legacy Zend Framework-weergaven |
| Functioneel verschil met .php | Geen - verwerking is identiek; alleen de bestandsextensie verschilt |
| Beveiligingsrisico | Klassieke omzeiling van bestandsupload-filters: blokkeert .php maar ziet .phtml mogelijk over het hoofd, wat uitvoering van willekeurige PHP mogelijk maakt |
| Bestandsgrootte | 1 KB - 500 KB typisch |
| PHP-versieondersteuning | Compatibel met PHP 4 tot en met PHP 8.x; geen wijzigingen op formaatniveau tussen versies |
| Bijbehorend OS | Linux (Apache/Nginx), Windows (IIS/Apache), macOS |
| Uitgebracht | circa 1997-1998 (early PHP 3/Zend era) |
| Laatste versie | PHP 8.x (2024); .phtml itself has no versioning |
| Specificatie | www.php.net |
PHTML conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PHTML-bestanden.