PHTML ファイル形式とは?
.phtmlファイルは、HTMLマークアップとPHPコードブロックを混在させたサーバーサイドのPHPスクリプトで、機能的には標準的な.phpファイルと同一です。唯一の大きな違いはファイル拡張子です。
ウェブサーバーが.phtmlファイルへのリクエストを受け取ると、そのファイルをPHPインタープリタに渡します。PHPは埋め込まれた <?php ... ?> ブロックを実行し、生成されたHTMLをクライアントのブラウザに出力します。ブラウザがPHPのソースコードを見ることはありません。これが機能するためには、サーバー側で.phtmlをPHPとして扱うように明示的に設定する必要があります。Apacheの場合は(.htaccessまたはhttpd.confで)AddHandler application/x-httpd-php .phtmlディレクティブが必要です。Nginxの場合は、対応するfastcgi_paramのマッピングが必要になります。この設定がない場合、サーバーはPHPのソースコードをそのまま訪問者に配信してしまう可能性があり、情報漏洩のリスクとなります。
.phtml拡張子は、PHPがHTMLテンプレートファイルに直接埋め込まれることが一般的だった1990年代後半のPHP 3および初期のZend Engine時代に誕生しました。Zend Frameworkで継続的に採用されたことで定着し、現在もMagento (現 Adobe Commerce) のビューレイヤーのテンプレートファイルとして活発に使用されています。
セキュリティの観点からは、.phtmlはファイルアップロードのバイパス(回避)の古典的な標的です。.phpのアップロードをブロックするフィルタが、.phtml、.php5、.php3などの類似バリアントを見落としていることが多く、任意のPHP実行を許してしまう可能性があります。
関連するフォーマットには、通常の.phpスクリプトや.phpsファイル(PHPソース表示用)があります。マジックバイトや内部的なバージョニングは存在せず、PHPランタイムのバージョンは完全にサーバーの設定によって決定されます。
セキュリティと安全性
リスク: HIGH.phtmlファイルはサーバー上で任意のPHPコードを実行するため、.phpと同じリスクがあります。重大なセキュリティ上の問題:(1) ウェブアプリのファイルアップロードフォームが.phpをブロックしつつ.phtmlを許可している場合、攻撃者は.phtml拡張子のPHPウェブシェルをアップロードし、サーバー上でリモートコード実行を行う可能性があります。(2) サーバーが誤って.phtmlのソースを公開してしまった場合(PHPハンドラが設定されていない場合)、コード内の認証情報やデータベース接続文字列が公開されます。サーバー管理者は、PHPハンドラ設定に.phtmlを明示的にリストし、アップロードディレクトリでの .php, .phtml, .phar, .php3, .php4, .php5 のスクリプト実行を拒否すべきです。
形式の詳細
概要PHTML ファイルを開くプログラム
技術的詳細
詳細仕様| 実行モデル | PHPインタープリタによってサーバーサイドで処理され、クライアントはレンダリングされたHTML出力のみを受け取る |
| エンコーディング | プレーンテキスト、UTF-8推奨(歴史的にはASCIIまたはLatin-1) |
| コード区切り文字 | <?php ... ?> (標準); <?= ... ?> (短縮echo); <? ... ?> (短縮タグ、非推奨) |
| MIMEタイプ | application/x-httpd-php; サーバー設定により text/html や text/x-php となる場合もある |
| Apache設定 | 実行には .htaccess または httpd.conf での AddHandler application/x-httpd-php .phtml が必要 |
| Nginx設定 | .phtmlをPHP-FPMにマッピングする fastcgi_param または location ブロックが必要 |
| 主なユースケース | Magento (Adobe Commerce) のビューレイヤーテンプレート、レガシーなZend Frameworkのビュー |
| .phpとの機能的な違い | なし - 処理は同一であり、ファイル拡張子のみが異なる |
| セキュリティリスク | ファイルアップロードフィルタの古典的なバイパス手法:.phpはブロックしても.phtmlを見落とすと、任意のPHP実行を許すことになる |
| ファイルサイズ | 通常 1 KB - 500 KB |
| PHPバージョンのサポート | PHP 4からPHP 8.xまで互換性あり。バージョン間でのフォーマットレベルの変更はなし |
| 関連OS | 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 の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。PHTML ファイルについて最初の質問をしてみましょう。