PHPの設定ファイルを共通化!require_onceでデータベース接続情報を管理する方法

Webアプリケーション開発を進めていくと、index.phpdetail.phpupdate.phpなど、多くのファイルでデータベースへの接続処理を記述することになります。しかし、全てのファイルにユーザー名やパスワードを直接書き込んでいくと、いくつかの問題が発生します。

  • メンテナンス性の低下: パスワードを変更する際、関連する全てのファイルを修正する必要があり、手間がかかり修正漏れのリスクも増えます。
  • セキュリティリスク: 重要な接続情報をロジックと同じファイルに記述することで、誤って公開してしまう(例: GitHubにアップロードする)危険性が高まります。

この問題を解決するプロフェッショナルな手法が、設定情報を外部ファイルに分離し、必要な場所で読み込むという方法です。


目次

1. なぜ設定を共通化するのか?

設定を一つのファイルにまとめる(共通化する)ことには、主に2つの大きなメリットがあります。

  1. メンテナンス性の向上 (DRY原則) プログラミングには「DRY (Don’t Repeat Yourself / 繰り返しを避ける)」という重要な原則があります。設定を一つのファイルに集約すれば、データベース情報が変更になった場合でも、その一箇所を修正するだけでアプリケーション全体に反映させることができます。
  2. セキュリティの向上 データベースの接続情報のような機密データを、ロジックを記述したメインのファイルから分離することで、管理がしやすくなり、偶発的な情報漏洩のリスクを低減できます。

2. 接続情報ファイルを作成する (config.php)

まず、データベースの接続情報だけを記述した、専用のPHPファイルを作成します。ここではconfig.phpという名前にします。

このような設定値には、一度定義したら変更できない**定数(define())**を使うのが一般的で、より安全です。

config.php のサンプルコード:

<?php

// データベースのホスト名
define('DB_HOST', 'localhost');

// データベース名
define('DB_NAME', 'my_first_db');

// データベースのユーザー名
define('DB_USER', 'root');

// データベースのパスワード
define('DB_PASS', 'root'); // MAMPの初期パスワードは'root', XAMPPは空''

?>

このファイルを、index.phpなどと同じ階層に保存します。


3. ファイルを読み込むrequire_once

作成したconfig.phpを他のファイルから読み込むには、require_onceという構文を使います。

require_once 'ファイル名';

PHPにはファイルを読み込むための命令が4種類ありますが、データベース設定のような**「そのファイルがないとプログラムが絶対に動作しない、かつ重複して読み込むべきでない」**ものにはrequire_onceを使うのが最適です。

  • require: ファイルが見つからない場合、致命的なエラーを出してプログラムを停止させます。(必須ファイル向き)
  • include: ファイルが見つからなくても、警告を出すだけで処理を続行しようとします。(補助的なファイル向き)
  • _once: 上記2つの命令に_onceを付けると、同じファイルが複数回読み込まれるのを防ぎます。設定ファイルなどで定数を定義する場合、二重に読み込むとエラーになるため、_onceは非常に重要です。

4. 実装例:共通設定を使ってデータベースに接続する

それでは、config.phpを実際に使って、データベースへの接続処理を書き換えてみましょう。

index.phpの冒頭部分のサンプルコード:

<?php
// 最初に設定ファイルを読み込む
require_once 'config.php';

try {
    // config.phpで定義した定数を使ってDSNを組み立てる
    $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8mb4';
    
    // 定数を使ってデータベースに接続する
    $pdo = new PDO($dsn, DB_USER, DB_PASS);

    // PDOの重要設定
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    // (これ以降、データベースを操作する処理が続く...)

} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
    exit();
}
?>

このように、index.phpの中からユーザー名やパスワードといった具体的な記述が消え、代わりにconfig.phpで定義した定数を使うようになりました。これで、もしパスワードが変更になっても、修正するのはconfig.phpの1ファイルだけで済みます。

まとめ

  • データベースの接続情報など、複数のファイルで共通して使う設定は、専用の**設定ファイル(例: config.php)**に分離する。
  • 設定値は、変更できない**定数 (define())**として定義するのが安全。
  • 設定ファイルの読み込みには、**require_once**を使うのが最も確実で安全な方法。

この「設定の外部ファイル化」は、小さなプログラムから大規模なシステムまで、あらゆるPHP開発で使われる基本かつ必須のテクニックです。早い段階でこの習慣を身につけ、メンテナンス性と安全性の高いコードを目指しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次