PHPで共通パーツをインクルードする方法|相対パス&.htaccess対応も解説!

Web制作で「ヘッダーやフッターを毎回コピペして管理するの大変…」という悩み、ありませんか?

そんなときに役立つのが、PHPのinclude()を使ったパーツ共通化です!
この記事では、HTMLファイルも含めたincludeの使い方と、相対パス・.htaccess対応のポイントまで解説します。


PHPのinclude()で共通パーツを読み込む

PHPの include は、他のファイルを読み込んでその場に挿入する命令です。

このように書くだけで、header.html の内容をその場所に差し込むことができます。

<?php include("header.html"); ?>

HTMLファイルのままでも読み込める!

includeの対象は.phpファイルだけでなく、.htmlでもOK!

<?php include("parts/header.html"); ?>

これにより、デザイナーがHTMLで管理しているパーツも、PHPで読み込んで共通化できます。

PHPファイルを読み込むパターン(より動的な処理が可能)

HTMLではなく、PHPファイルとして管理しておくと、以下のように処理も含めたヘッダーなどを読み込めます。

<?php include("parts/header.php"); ?>

例)header.phpに現在のページタイトルを出力する処理などを追加可能:

<title><?php echo $pageTitle; ?> | サイト名</title>

相対パスで読み込むには?

相対パスを使えば、階層が違っても柔軟に読み込めます。

<?php include("./common/header.html"); ?>
<?php include("../parts/footer.php"); ?>
  • ./ は現在の階層
  • ../ は1つ上の階層

dirname(__FILE__) を使った安全な書き方

動的なパス管理でよく使われるのがこの書き方:

<?php include(dirname(__FILE__) . '/header_inc.php'); ?>

これは絶対パスとしての安全性が高く、どの階層からでも正確に読み込めるのが特徴です。

ただし、HTMLファイルを相対パスで読み込む場合は、シンプルな書き方の方が扱いやすいです。

<?php include("parts/header.html"); ?>

.htaccessでHTMLもPHPとして動かす(応用)

通常、.htmlファイルではPHPが動作しません。
でも .htaccess を使えば、HTMLファイル内でもPHPが使えるようにすることも可能です。

例).htaccessに以下を記述:

AddType application/x-httpd-php .html

これで .html ファイルも PHPとして処理されます。
ただし、セキュリティやメンテナンス性の面から常用は推奨されません
→ 基本的には .php 拡張子で管理しましょう!

ディレクトリ構成の例

/site/
├── index.php
├── about.php
├── parts/
│   ├── header.html
│   └── footer.php

index.php の中身例:

<?php include("parts/header.html"); ?>
<h1>トップページ</h1>
<?php include("parts/footer.php"); ?>

共通パーツ内のリンクを簡単管理!<?php print $Path; ?>の使い方

共通のヘッダーやフッターをPHPでinclude()していると、
/index.php にいるときはリンクが通るのに、/about/index.php にいるとリンク切れになる…
そんなときに便利なのが、相対パスを自動で補完できる $Path 変数です。

こんなとき困る!

<!-- 共通header.htmlなどに書いたリンク -->
<a href="contact.php">お問い合わせ</a>

↑ トップページ(/index.php)では通るけど、
サブページ(/about/index.php)では about/contact.php を探してしまってリンク切れ!

解決策:パスのプレフィックスを変数で管理!

まず、各ページで $Path を定義しておきます。

index.php(トップページ)

<?php $Path = "./"; ?>
<?php include("parts/header.php"); ?>

about/index.php(サブディレクトリ)

<?php $Path = "../"; ?>
<?php include("../parts/header.php"); ?>

共通パーツ(header.php)内の書き方

<nav>
  <ul>
    <li><a href="<?php print $Path; ?>index.php">ホーム</a></li>
    <li><a href="<?php print $Path; ?>about/index.php">会社概要</a></li>
    <li><a href="<?php print $Path; ?>contact.php">お問い合わせ</a></li>
  </ul>
</nav>

$Pathがそれぞれのページで相対パスになっているので、
共通パーツ内のリンクがすべてのページで正しく機能します!

注意点

  • $Pathを使うには読み込む前に必ず変数を定義しておくこと!
  • JavaScriptやCSSの読み込みパスも $Path を使えば統一可能:
<link rel="stylesheet" href="<?php print $Path; ?>assets/style.css">
<script src="<?php print $Path; ?>assets/script.js"></script>

WordPressでは不要(get_template_directory_uri() などを使うため)

まとめ

項目 内容
HTML読み込み <a>やナビなど静的要素に便利
PHP読み込み 動的要素・変数使用に最適
相対パス対応 ./, ../などで柔軟に管理可能
dirname(FILE) 絶対パスで安全に管理したいときに有効
.htaccess .htmlにPHPを使いたい場合の裏技(注意あり)

おすすめの使い分け

ファイルタイプ 使い道
.html ナビ・フッター・単純なデザインパーツ
.php ロジック付きのヘッダー、条件分岐を含むテンプレートなど

共通パーツの管理をラクにしたいなら、include()を上手に使って、
効率的でミスのないWeb制作を目指しましょう!

ABOUTこの記事を書いた人

  • mm
  • Editor: うぇぶもようの中の人