Webサイト制作の現場において、PHPは動的なコンテンツを生成するための中心的な役割を担っています。
PHPの最大の特徴の一つは、HTMLコードの中に直接プログラムを埋め込んで記述できる点にあります。
これにより、データベースから取得した情報をHTMLの構造の中に流し込んだり、ユーザーの操作に応じて表示内容を切り替えたりすることが容易になります。
本記事では、2026年現在の開発環境においても通用する、PHPをHTMLに埋め込む際の基本的な書き方や、可読性を高めるための使い分けのポイントを詳しく解説します。
PHPをHTMLに埋め込むための基本構文
PHPのプログラムをHTMLファイル内で動作させるためには、サーバーが「ここからここまではPHPのコードである」と認識できるように特定の記号で囲む必要があります。
その最も基本的な記述方法が<?php ... ?>というタグです。
基本的なタグの記述
PHPのコードを開始する際には<?phpを記述し、終了する際には?>を記述します。
このタグに囲まれた部分は、ウェブサーバー上のPHPインタプリタによって解析・実行され、その結果がHTMLとしてブラウザに送信されます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP埋め込みの基本</title>
</head>
<body>
<h1>PHPのテスト</h1>
<p>
<?php
// 現在の時刻を表示する
echo date("Y年m月d日 H時i分s秒");
?>
</p>
</body>
</html>
上記の結果、ブラウザには以下のようなHTMLが出力されます(実行した日時によって内容は変動します)。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP埋め込みの基本</title>
</head>
<body>
<h1>PHPのテスト</h1>
<p>
2026年05月03日 21時00分00秒
</p>
</body>
</html>
終了タグの省略について
PHPのみが記述されたファイル(クラス定義や関数定義のみのファイルなど)では、末尾の終了タグ ?> を省略することが推奨されています。これは、終了タグの後に意図しない改行やスペースが入ってしまうことで、HTTPヘッダーの送信エラー(Warning: Cannot modify header information)を引き起こすリスクを防ぐためです。
しかし、今回のようにHTMLの中にPHPを埋め込む場合は、HTMLコードに戻る必要があるため終了タグは必須となります。
HTML内でのPHP記述パターンと使い分け
HTMLの中でPHPを使用する場合、単に値を表示するだけでなく、条件によって表示を切り替えたり、リスト形式のデータを繰り返し表示したりする場面が多くあります。
ここでは、現場でよく使われる記述パターンを紹介します。
値を直接出力する:ショートエコータグ
変数の内容をHTMLの中に一行で埋め込みたい場合、<?php echo $variable; ?>と書くのは少し冗長に感じることがあります。
そのような場合に便利なのがショートエコータグと呼ばれる<?= ... ?>という記述です。
<?php
$username = "デザイン太郎";
?>
<p>こんにちは、<?= $username ?>さん!</p>
<p>こんにちは、デザイン太郎さん!</p>
この記述法は、テンプレート部分の可読性を劇的に向上させるため、現在のWeb開発では非常に一般的に使用されています。
PHPの設定(php.ini)で有効にする必要がありますが、現代の主要なサーバー環境ではデフォルトで利用可能です。
制御構造の代替構文(コロン構文)
HTMLの中にif文やforeach文を埋め込む際、通常の波括弧{}を使用すると、どの閉じ括弧がどの制御構造のものなのかが分かりにくくなることがあります。
そこで推奨されるのが、代替構文(コロン構文)です。
代替構文では、開始の括弧を:に置き換え、終了をendif;やendforeach;のように明示します。
if文による条件分岐の例
ログイン状態によってメニューの表示を切り替えるようなケースです。
<?php $is_logged_in = true; // ログイン状態のシミュレーション ?>
<nav>
<?php if ($is_logged_in) : ?>
<a href="/profile">マイページ</a>
<a href="/logout">ログアウト</a>
<?php else : ?>
<a href="/login">ログイン</a>
<a href="/register">新規登録</a>
<?php endif; ?>
</nav>
実行結果(ログイン状態がtrueの場合):
<nav>
<a href="/profile">マイページ</a>
<a href="/logout">ログアウト</a>
</nav>
このように記述することで、HTMLの構造を崩さずにプログラムの論理構造を組み込むことができます。
繰り返し処理での実践的な埋め込み
Webサイトでは、商品一覧やニュースリストなど、配列データを繰り返し表示する処理が頻出します。
ここではforeach文を使用した表(テーブル)の生成例を見てみましょう。
商品リストをテーブルで出力する
<?php
// 商品データの配列
$products = [
['name' => '高性能マウス', 'price' => 5400],
['name' => 'メカニカルキーボード', 'price' => 12800],
['name' => '曲面ディスプレイ', 'price' => 35000],
];
?>
<table border="1">
<thead>
<tr>
<th>商品名</th>
<th>価格(税込)</th>
</tr>
</thead>
<tbody>
<?php foreach ($products as $item) : ?>
<tr>
<td><?= $item['name'] ?></td>
<td><?= number_format($item['price']) ?>円</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
| 商品名 | 価格(税込) |
|---|---|
| 高性能マウス | 5,400円 |
| メカニカルキーボード | 12,800円 |
| 曲面ディスプレイ | 35,000円 |
このように、HTMLのタグの間にPHPの制御文を挟むことで、動的なテーブル生成がスムーズに行えます。
セキュリティとエスケープ処理の重要性
HTMLにPHPで値を出力する際、最も注意しなければならないのがセキュリティ(XSS:クロスサイトスクリプティング対策)です。
ユーザーが入力したデータや外部から取得したデータをそのままechoしてしまうと、悪意のあるスクリプトが実行されてしまう危険性があります。
htmlspecialchars関数の使用
PHPで文字列をHTMLとして安全に出力するためには、htmlspecialchars関数を使用して、特別な意味を持つ文字(<や>など)をHTMLエンティティに変換する必要があります。
| 文字 | 変換後の文字列 |
|---|---|
| & | & |
| < | < |
| > | > |
| “ | “ |
| ‘ | ‘ |
以下のように記述するのが基本的なルールです。
<?php
$user_input = "<script>alert('危険!');</script>";
?>
<!-- 危険な出力(スクリプトが実行される) -->
<div><?php echo $user_input; ?></div>
<!-- 安全な出力(文字列としてそのまま表示される) -->
<div><?= htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8') ?></div>
実際の開発現場では、この処理を簡略化するために独自の関数(例:h()など)を定義して使用することが一般的です。
<?php
// エスケープ処理用の関数定義
function h($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
?>
<p>ようこそ、<?= h($username) ?>さん!</p>
「外部からのデータを出力するときは必ずエスケープする」というルールを徹底することが、安全なWebサイト構築の第一歩です。
PHP埋め込み時のコーディング規約と可読性
HTMLとPHPを混在させると、コードが煩雑になりがちです。
後から修正しやすいクリーンなコードを保つためのポイントをいくつか挙げます。
インデントの維持
PHPのタグを挿入しても、HTMLのインデントを崩さないように配慮しましょう。
PHPの開始・終了タグ自体も、HTMLの階層構造に合わせて配置することで、全体の構造が把握しやすくなります。
ロジックと表示の分離(関心の分離)
HTMLファイルの中に複雑なデータベース操作や計算処理を直接記述することは避けましょう。
理想的な構成は以下の通りです。
- ファイルの先頭部分:データの取得、計算、変数の準備などのロジックをまとめて記述する。
- HTML部分:準備された変数を表示したり、最小限のループや条件分岐を行うだけにとどめる。
このように「表示のためのコード」と「処理のためのコード」を分けることで、デザイン修正時にプログラムを壊すリスクを軽減できます。
大規模開発でのテンプレートエンジン
HTMLの中にPHPを直接埋め込む手法は、小規模なページや学習段階では非常に有効ですが、大規模なプロジェクトでは「Blade」や「Twig」といったテンプレートエンジンが採用されることが多いです。
これらは、今回紹介した<?php ... ?>の記述をより簡潔かつ安全に行えるように設計されています。
しかし、テンプレートエンジンも内部的にはPHPの埋め込み構文に変換されているため、基本を理解しておくことは必須です。
PHP埋め込みコードのデバッグ方法
HTMLの中に埋め込んだPHPが期待通りに動作しない場合、ブラウザの「ページのソースを表示」機能を確認することがデバッグの第一歩です。
PHPのコードがそのままブラウザに表示されてしまっている場合、以下の原因が考えられます。
- サーバーでPHPが動作していない。
- ファイルの拡張子が
.phpではなく.htmlになっている。 - PHPの開始タグ
<?phpの記述が間違っている(例:<?など、短縮タグが許可されていない環境)。
また、エラー内容を表示させるためには、開発環境においてPHPのエラー表示設定(display_errors)を有効にしておくことが重要です。
まとめ
PHPをHTMLに埋め込む手法は、動的なウェブサイト制作における最も基本的かつ強力な技術です。
本記事で解説した以下のポイントを意識することで、より確実なコーディングが可能になります。
- 基本タグは
<?php ... ?>、出力にはショートエコータグ<?= ... ?>を活用する。 - HTML内での条件分岐やループには、可読性の高い代替構文(コロン構文)を使用する。
- セキュリティのために、出力時には必ず
htmlspecialchars関数によるエスケープ処理を行う。 - コードの可読性を保つため、ロジックと表示を適切に分離し、インデントを整える。
2026年のWeb開発環境においても、これらの基本原則は変わりません。
フレームワークやテンプレートエンジンを使用する場合でも、この基礎知識があることで、より深い理解とトラブルシューティング能力を身につけることができるでしょう。
まずはシンプルなプロフィールページやリスト表示から、PHPの埋め込みを実践してみてください。
