PHPのDB設定を安全に分ける方法
PHPサイトをGitHubで管理するなら、DBパスワードをコードに直接書かない形にしておくのが安全です。おすすめは、GitHubに上げる共通ファイルと、サーバーだけに置く秘密ファイルを分ける方法です。
確認日とこのページの使い方
確認日: 2026年5月19日。この記事では、PHPサイトのDB接続情報を、GitHubへ上げるファイルと、ローカルや本番サーバーだけに置くファイルへ分ける方法を整理します。
DBホスト名、DBユーザー名、DBパスワード、DSN、管理画面ログイン情報は、記事、AI相談、GitHub、公開リポジトリにそのまま貼らないでください。ここでは本物の値ではなく、見本名だけを使います。
このページで整理できること
- DB設定をGitHubに上げない理由
db_config.php、db_config.local.php、見本ファイルの役割分担- ローカル、本番、GitHubで置くファイルを分ける確認順
- AIにDB接続まわりを相談する時に伏せる情報
DB設定を貼らない理由
DB接続情報は、サイトのデータへ入るための鍵です。GitHubの公開リポジトリやAI相談欄に貼ると、意図しない相手にDB名、ユーザー名、パスワード、接続先が見える可能性があります。
- GitHubに一度pushした秘密情報は、後から消しても履歴に残ることがある
- AI相談では、会話履歴や共有画面に秘密情報が残る可能性がある
- ローカル用DBと本番DBを混同すると、本番データを壊す危険がある
- サーバーだけに必要な設定は、GitHubではなくサーバー上に残す
ファイル構成
| ファイル | 役割 | GitHub |
|---|---|---|
includes/db_config.php | 接続処理本体 | 上げる |
includes/db_config.local.php | 本物のDB情報 | 上げない |
includes/db_config.local.example.php | 見本 | 上げる |
local/config分離の考え方
GitHubに上げるファイルには、接続処理の形だけを書きます。本物の接続情報は、ローカルPCや本番サーバーにだけ置く*.local.phpへ分けます。
| 場所 | 置くもの | 置かないもの |
|---|---|---|
| GitHub | 接続処理本体、見本ファイル、説明コメント | 本物のDBホスト、ユーザー名、パスワード |
| ローカルPC | ローカル開発用のdb_config.local.php |
本番DBの情報を不用意に置かない |
| 本番サーバー | 本番用のdb_config.local.php |
見本の空設定だけで公開しない |
| AI相談 | エラー文、ファイル構成、伏せたサンプルコード | パスワード、秘密鍵、管理画面ログイン情報 |
db_config.phpの基本形
<?php
$local_config = __DIR__ . '/db_config.local.php';
if (is_file($local_config)) {
require $local_config;
} else {
$dsn = getenv('APP_DB_DSN') ?: '';
$db_user = getenv('APP_DB_USER') ?: '';
$db_password = getenv('APP_DB_PASSWORD') ?: '';
}
if (empty($dsn) || empty($db_user)) {
exit('DB接続設定が見つかりません。');
}
$pdo = new PDO($dsn, $db_user, $db_password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
.gitignoreに追加する
includes/db_config.local.php
ロリポップへアップロードするときは、db_config.php と db_config.local.php の両方が必要です。GitHubへpushするのは db_config.php と見本ファイルだけにします。
本番アップロード前の確認
本番サーバーでは、GitHubに上げないdb_config.local.phpが必要です。一方で、そのファイルを間違ってGitHubへpushしないように分けて確認します。
# GitHubへ上げる前に確認
git status
git diff --cached --name-only
# local設定がGit管理対象になっていないか確認
git check-ignore -v includes/db_config.local.php
includes/db_config.local.phpが.gitignoreに入っているincludes/db_config.local.example.phpには本物の値を書いていない- 本番サーバーには本番用の
db_config.local.phpを置いている - ローカル用DB情報と本番用DB情報を混ぜていない
- アップロード後に、エラー画面ではなく公開URLで動作確認する
ロリポップで自作PHPサイトを安全に更新する全体手順は、ロリポップで自作PHPサイトを安全に更新する入口でも整理しています。
AIにDB設定まわりを相談する時に伏せる情報
AIに相談する時は、本物の接続情報ではなく、伏せ字にしたファイル構成、エラー文、どこで止まっているかを伝えます。接続できない原因を見てもらう時も、パスワードや本番DB情報は貼りません。
PHPのDB設定分離について相談したいです。
やりたいこと:
使っている環境:
- ローカル
- ロリポップなどの本番サーバー
ファイル構成:
- includes/db_config.php:
- includes/db_config.local.php:
- includes/db_config.local.example.php:
- .gitignore:
見えている症状:
- DB接続設定が見つからない
- PDO接続でエラーになる
- ローカルでは動くが本番で動かない
- GitHubへ上げてよいファイルが分からない
貼ってよい情報:
- 伏せ字にしたコード
- エラー文
- ファイル名と配置
- git statusの結果
伏せる情報:
- DBホスト名
- DB名
- DBユーザー名
- DBパスワード
- 管理画面ログイン情報
- 本番サーバーの秘密設定