PHPでライブラリを使う

環境変数の管理にライブラリPHPDOTENVを使うので、ライブラリの管理ツールを導入

PHPでライブラリを導入したいときはComposerを使うと便利。

ComposerはPHPの依存管理ツール

Composerの仕組み

composer.jsoncomposer.lockファイルで依存するライブラリを定義する。

  • composer.json
    • プロジェクトで使用するライブラリを一覧にしたもの
  • composer.lock
    • 実際にどのライブラリのどのバージョンをダウンロードしたかをひとまとめにしたもの
  1. composer install を実行すると、インストールしたライブラリとバージョン情報が書き出される
  2. composer.lockがある状態でcomposer installすると、composer.lockに記されたバージョンのライブラリがインストールされる

    Composerのコマンド

  • init 対話形式でcomposer.json を作成する
    • composer init
  • require新しいライブラリを追加する

    composer.jsonにライブラリが、composer.lockに実際にインストールしたものが記載される
    • composer require <ライブラリ名>
  • install composer.jsonもしくはcomposer.lockにしたがってライブラリをインストールする-共通のバージョンのライブラリを使うことができる
    • composer install
  • removeライブラリを取り除く
    • composer remove <ライブラリ名>

      環境変数を管理

  • 通常の変数 - PHPのコードの中で定義し、実行したプロセス内でのみ使用できる
  • 環境変数 - PHPが動いているOSに保存し
    PHPアプリケーションに渡す仕組み(OSに格納される変数)

    PHPで環境変数をつかう

    .envファイルを使って環境変数を管理(phpdotenv)
  • .envファイル: 重要な設定データを定義 = 環境変数
    1
    DB_HOST=db
  • プログラムのファイル: .envファイルに定義された値を取得して使える
    1
    2
    $dbHost = $_ENV['DB_HOST']
    $link = mysqki_connect($dbHost, ..., ..., ...);

    Composerのインストール

    docker-compose exec app composer init

    設定はそのままエンター連打。文字を入力するのは以下の2か所

    Author [, n to skip]: nを入力

    Do you confirm generation [yes]? yesを入力

    src以下にcomposer.jsonファイルができている

    phpdotenvのインストール

    GitHubより、インストール法をコピペ
    docker-compose exec app composer require vlucas/phpdotenv

    .envファイルに環境変数を定義

    .env
    1
    2
    3
    4
    DB_HOST="db"
    DB_USERNAME="book_log"
    DB_PASSWORD="pass"
    DB_DATABASE="book_log"

    PHPファイルで読み込み

    phpファイルの最初にライブラリを読み込む
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php

    require __DIR__ . '/../vendor/autoload.php'; // オートロードファイルを読み込む

    function dbConnect()
    {
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/..'); // .envファイルを読み込む
    $dotenv->load();

    $dbHost = $_ENV['DB_HOST']; // 環境変数を変数に代入
    $dbUsername = $_ENV['DB_USERNAME'];
    $dbPassword = $_ENV['DB_PASSWORD'];
    $dbDatabase = $_ENV['DB_DATABASE'];

    $link = mysqli_connect($dbHost, $dbUsername, $dbPassword, $dbDatabase); // 環境変数を代入した変数を使ってデータベースに接続
    if (!$link) {
    echo 'Error: データベーに接続できません' . PHP_EOL;
    echo 'Debugging error: ' . mysqli_connect_error() . PHP_EOL;
    exit;
    }
    return $link;
    }