ApacheでPHPを介してMySQLと連携する設定方法を徹底解説

Apache、PHP、MySQLを連携させる環境構築は、Web開発において不可欠な技術です。特に動的なWebサイトやアプリケーションを構築する際には、ApacheがWebサーバーとしてリクエストを処理し、PHPがサーバーサイドスクリプトを実行、MySQLがデータベース管理を担います。これらを連携させることで、ユーザーが入力した情報をデータベースに保存したり、データを動的に表示するWebアプリケーションが構築可能です。

本記事では、LAMP(Linux、Apache、MySQL、PHP)環境を基盤として、PHPを介してMySQLと連携する具体的な設定方法をステップごとに解説します。初めてサーバー構築を行う方でもスムーズに進められるよう、必要なソフトウェアのインストールから、ApacheやPHPの設定、MySQLデータベースへの接続方法まで詳しく説明します。最終的には、PHPスクリプトを通じてMySQLデータベースの操作ができる環境を整えることを目標としています。

目次

LAMP環境とは


LAMPとは、Linux、Apache、MySQL、PHPの頭文字を取ったもので、Webアプリケーションの開発と運用に必要なソフトウェアスタックを指します。これらを組み合わせることで、動的なWebサイトやアプリケーションを構築するための安定した基盤が整います。

各コンポーネントの役割

  • Linux:サーバーOSとして機能し、LAMPスタック全体を動作させる土台となります。
  • Apache:世界で広く使用されているWebサーバーソフトウェアで、クライアントからのリクエストを受け付けて処理します。
  • MySQL:リレーショナルデータベース管理システム(RDBMS)で、データの保存・管理を担当します。
  • PHP:サーバーサイドスクリプト言語で、動的なWebページを生成し、データベースと連携して情報を取得・表示します。

LAMP環境の利点


LAMP環境は以下のような利点があります。

  • オープンソースでコストがかからない
  • 広範なサポートと豊富なドキュメント
  • 高い安定性とパフォーマンス
  • 柔軟なカスタマイズが可能

多くの企業や個人がLAMP環境を利用してWebシステムを構築しており、柔軟でスケーラブルな開発が可能です。本記事では、このLAMP環境を用いてApache、PHP、MySQLを連携させる手順を詳しく解説していきます。

必要なソフトウェアのインストールと準備


LAMP環境を構築するには、Apache、PHP、MySQLの3つの主要コンポーネントをインストールする必要があります。ここでは、UbuntuなどのLinuxディストリビューションを例にして、必要なソフトウェアのインストール手順を解説します。

ステップ1:パッケージリストの更新


まずは、システムのパッケージリストを最新の状態に更新します。以下のコマンドを実行してください。

sudo apt update
sudo apt upgrade


これにより、システムが最新の状態に保たれます。

ステップ2:Apacheのインストール


Apacheをインストールするには、次のコマンドを実行します。

sudo apt install apache2


インストールが完了したら、Apacheを起動し、自動起動を有効にします。

sudo systemctl start apache2
sudo systemctl enable apache2


ブラウザでhttp://サーバーIPアドレスにアクセスし、「Apache2 Ubuntu Default Page」が表示されれば、正常に動作しています。

ステップ3:MySQLのインストール


次にMySQLをインストールします。

sudo apt install mysql-server


インストール後、MySQLのセキュリティスクリプトを実行して初期設定を行います。

sudo mysql_secure_installation


プロンプトに従い、rootパスワードの設定などを行ってください。

ステップ4:PHPのインストール


PHPをインストールするには、以下のコマンドを実行します。

sudo apt install php libapache2-mod-php php-mysql


インストールが完了したら、Apacheを再起動します。

sudo systemctl restart apache2

ステップ5:動作確認


PHPの動作確認を行います。Apacheの公開ディレクトリにテスト用のPHPファイルを作成します。

sudo nano /var/www/html/info.php


以下のコードを記述して保存します。

<?php
phpinfo();
?>


ブラウザでhttp://サーバーIPアドレス/info.phpにアクセスし、PHPの情報が表示されればインストールは成功です。

これで、LAMP環境の基本的なインストールと準備が完了しました。次はApacheの設定ファイルを編集し、PHPとMySQLが適切に連携するように構成を進めます。

Apacheの設定ファイル編集方法


ApacheがPHPスクリプトを正しく処理し、MySQLと連携できるようにするためには、設定ファイルを適切に編集する必要があります。ここでは、Apacheの主要な設定ファイルを修正し、PHPを介したデータベース接続がスムーズに行える環境を整えます。

ステップ1:Apacheのモジュール確認と有効化


ApacheがPHPを処理できるように、mod_phpモジュールが有効であることを確認します。以下のコマンドを実行してください。

sudo a2enmod php
sudo systemctl restart apache2


これにより、PHPモジュールがApacheで使用可能になります。

ステップ2:Apacheのデフォルト設定ファイルを編集


Apacheのデフォルトの仮想ホスト設定ファイルを修正し、PHPファイルを適切に処理できるようにします。

sudo nano /etc/apache2/sites-available/000-default.conf


以下の行を確認し、必要に応じて追加または修正します。

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>


変更を加えたら、ファイルを保存して終了します。

ステップ3:index.phpの優先設定


PHPファイルが優先して処理されるように、Apacheのディレクトリインデックス設定を変更します。

sudo nano /etc/apache2/mods-enabled/dir.conf


次のように、index.phpを先頭に追加します。

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>


変更後はApacheを再起動して、設定を反映させます。

sudo systemctl restart apache2

ステップ4:PHPとMySQLの連携確認


PHPがMySQLと連携できるか確認するため、以下のようなテストスクリプトを作成します。

sudo nano /var/www/html/dbtest.php


以下のコードを記述します。

<?php
$servername = "localhost";
$username = "root";
$password = "your_password";

// 接続確認
$conn = new mysqli($servername, $username, $password);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "データベース接続成功";
$conn->close();
?>


ブラウザでhttp://サーバーIPアドレス/dbtest.phpにアクセスし、「データベース接続成功」と表示されれば設定は完了です。

これでApacheがPHPスクリプトを正しく処理し、MySQLと連携できる環境が整いました。次は、PHPのインストールと動作確認を行います。

PHPのインストールと動作確認


ApacheとMySQLの設定が整ったら、次にPHPが正常にインストールされており、Apacheで正しく動作しているかを確認します。PHPはWebサーバー上で動的なコンテンツを生成する重要な役割を担っています。

ステップ1:PHPのインストール


ApacheでPHPを動作させるために、以下のコマンドでPHPをインストールします。

sudo apt install php libapache2-mod-php php-mysql


これにより、PHP自体とApacheのPHPモジュール、そしてMySQLとPHPの連携に必要な拡張モジュールがインストールされます。

ステップ2:PHPのバージョン確認


PHPが正しくインストールされているか確認するため、次のコマンドを実行します。

php -v


インストールされているPHPのバージョンが表示されれば、正常にインストールされています。

ステップ3:ApacheでのPHP動作確認


PHPがApacheで正しく動作するか確認するため、Apacheの公開ディレクトリにテスト用のPHPファイルを作成します。

sudo nano /var/www/html/info.php


以下のコードを記述します。

<?php
phpinfo();
?>


ファイルを保存したら、ブラウザで次のURLにアクセスします。

http://サーバーIPアドレス/info.php


PHPの情報が表示されるページが見えれば、PHPがApacheで正常に動作していることが確認できます。

ステップ4:PHPスクリプトの動作テスト


さらに、簡単なPHPスクリプトを作成し、PHPがサーバーサイドスクリプトとして動作することを確認します。

sudo nano /var/www/html/test.php


以下のコードを記述します。

<?php
echo "PHPは正常に動作しています";
?>


ブラウザで次のURLにアクセスし、「PHPは正常に動作しています」と表示されれば、PHPが正しく動作していることが確認できます。

ステップ5:PHPの拡張モジュール確認


インストールされているPHPの拡張モジュールを確認するには、以下のコマンドを実行します。

php -m


mysqlipdo_mysqlなどが表示されていれば、PHPとMySQLの連携も問題ありません。

これで、PHPが正しくインストールされ、Apache上で動作していることが確認できました。次のステップでは、MySQLのセットアップとデータベース作成を行います。

MySQLのセットアップとデータベース作成


PHPからデータを扱うためには、MySQLのセットアップとデータベースの作成が必要です。ここでは、MySQLの初期設定からデータベース作成までの手順を解説します。

ステップ1:MySQLのインストール確認


まず、MySQLが正しくインストールされているか確認します。

mysql --version


インストールされているMySQLのバージョンが表示されれば、正常にインストールされています。

ステップ2:MySQLの起動と自動起動設定


MySQLが動作していない場合は、以下のコマンドで起動します。

sudo systemctl start mysql
sudo systemctl enable mysql

ステップ3:MySQLの初期セキュリティ設定


MySQLのセキュリティを強化するため、mysql_secure_installationスクリプトを実行します。

sudo mysql_secure_installation
  • rootパスワードの設定
  • 匿名ユーザーの削除
  • リモートからのrootログイン禁止
  • テストデータベースの削除

これらのプロンプトに従い、セキュリティ設定を完了します。

ステップ4:MySQLへのログイン


MySQLにrootユーザーでログインします。

sudo mysql -u root -p


パスワードを求められるので、先ほど設定したrootパスワードを入力します。

ステップ5:データベースの作成


データベースを作成します。ここでは「sample_db」という名前のデータベースを作成します。

CREATE DATABASE sample_db;


作成したデータベースを確認します。

SHOW DATABASES;


sample_dbが表示されれば、データベースの作成は成功です。

ステップ6:MySQLユーザーの作成と権限付与


PHPからデータベースにアクセスするためのユーザーを作成し、必要な権限を付与します。

CREATE USER 'sample_user'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON sample_db.* TO 'sample_user'@'localhost';
FLUSH PRIVILEGES;


これにより、sample_usersample_dbにアクセスできるようになります。

ステップ7:テーブルの作成


作成したデータベースに移動し、サンプルテーブルを作成します。

USE sample_db;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


テーブルを確認します。

SHOW TABLES;


usersテーブルが表示されれば、セットアップは完了です。

これでMySQLのセットアップとデータベースの作成が完了しました。次はPHPからMySQLに接続する方法を解説します。

PHPからMySQLへ接続する方法


PHPを使用してMySQLデータベースに接続することで、データの取得・保存・更新が可能になります。ここでは、基本的な接続方法と、データの取得・挿入のサンプルコードを紹介します。

ステップ1:MySQLデータベースへの接続


PHPでMySQLに接続するには、mysqli関数またはPDOを使用します。ここではmysqliを使用した接続方法を示します。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

// 接続確認
if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "データベース接続成功";
?>


このスクリプトを/var/www/html/db_connect.phpとして保存し、ブラウザでアクセスして「データベース接続成功」と表示されれば接続は成功です。

ステップ2:データの取得


データベース内のデータを取得するサンプルコードを作成します。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}

// データ取得クエリ
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 名前: " . $row["name"]. " - メール: " . $row["email"]. "<br>";
    }
} else {
    echo "0件のデータ";
}
$conn->close();
?>


このスクリプトは/var/www/html/fetch_users.phpとして保存し、ブラウザでアクセスすると、usersテーブルのデータが表示されます。

ステップ3:データの挿入


フォームからデータを挿入する簡単なスクリプトを作成します。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}

$name = "山田太郎";
$email = "taro@example.com";

$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";

if ($conn->query($sql) === TRUE) {
    echo "新しいレコードが追加されました";
} else {
    echo "エラー: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>


このスクリプトを/var/www/html/insert_user.phpに保存して実行することで、usersテーブルに新しいデータが挿入されます。

ステップ4:データの更新


以下のスクリプトでデータを更新します。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}

$id = 1;
$new_email = "new_email@example.com";

$sql = "UPDATE users SET email='$new_email' WHERE id=$id";

if ($conn->query($sql) === TRUE) {
    echo "レコードが更新されました";
} else {
    echo "エラー: " . $conn->error;
}

$conn->close();
?>

ステップ5:データの削除


データを削除するサンプルコードです。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}

$id = 1;

$sql = "DELETE FROM users WHERE id=$id";

if ($conn->query($sql) === TRUE) {
    echo "レコードが削除されました";
} else {
    echo "エラー: " . $conn->error;
}

$conn->close();
?>

これで、PHPからMySQLへの接続・データ取得・データ挿入・更新・削除が行えるようになりました。次は、セキュリティ対策について解説します。

セキュリティ対策と推奨設定


PHPとMySQLを連携させたWebアプリケーションでは、セキュリティ対策が非常に重要です。不十分なセキュリティは、SQLインジェクションや不正アクセスなどの脅威を引き起こす可能性があります。ここでは、セキュリティを強化するための推奨設定を解説します。

ステップ1:SQLインジェクション対策


SQLインジェクションは、外部からの不正なSQLクエリでデータベースが操作される攻撃です。mysqliPDOプレースホルダーを利用することで、このリスクを防ぐことができます。

以下はプレースホルダーを使った安全なデータ挿入の例です。

<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

// 接続
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}

$name = "山田太郎";
$email = "taro@example.com";

// プレースホルダーを使用
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();

echo "レコードが安全に追加されました";
$stmt->close();
$conn->close();
?>


プレースホルダーを利用することで、外部からの悪意あるSQLが実行されることを防げます。

ステップ2:データベースユーザーの権限制限


rootユーザーでのデータベース操作は避け、必要最小限の権限を持つユーザーを作成して使用します。

CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'securepassword';
GRANT SELECT, INSERT, UPDATE ON sample_db.* TO 'web_user'@'localhost';
FLUSH PRIVILEGES;


この設定により、web_userはデータベースへのアクセス権はあるものの、不要な権限を持ちません。

ステップ3:エラーメッセージの非表示


データベース接続エラーなどのエラーメッセージは、外部にシステム情報を漏洩する可能性があります。エラーメッセージはログに出力し、画面には表示しないように設定します。

ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL);


エラーログは/var/log/apache2/error.logなどに記録されます。

ステップ4:データのバリデーションとサニタイジング


入力データは必ず検証し、不正なデータがデータベースに登録されないようにします。

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);


これにより、不正なデータが排除され、安全に処理されます。

ステップ5:ファイルアップロードの制限


PHPでファイルアップロードを許可する場合、不正なファイルがサーバーにアップロードされるリスクがあります。以下のようにファイル形式やサイズを制限します。

if ($_FILES['file']['size'] > 1000000) {
    die("ファイルサイズが大きすぎます");
}

$allowed = ['jpg', 'png', 'pdf'];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

if (!in_array($ext, $allowed)) {
    die("許可されていないファイル形式です");
}

ステップ6:MySQLのリモートアクセス制限


MySQLはデフォルトでローカルホストからの接続のみを許可します。リモートからの接続が必要な場合でも、特定のIPアドレスのみ許可するように制限します。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf


次の行を確認し、必要に応じて修正します。

bind-address = 127.0.0.1


リモートアクセスが必要な場合は、接続を許可するIPアドレスを指定します。

bind-address = 192.168.1.100

ステップ7:Apacheのディレクトリ制限


Apacheの設定ファイルを編集し、アクセスを許可するディレクトリを制限します。

sudo nano /etc/apache2/apache2.conf


以下のように/var/www/htmlのディレクトリに制限を追加します。

<Directory /var/www/html>
    Options -Indexes
    AllowOverride All
    Require all granted
</Directory>


これにより、インデックスページが存在しない場合にディレクトリの中身が一覧表示されることを防ぎます。

まとめ


PHPとMySQLの連携は非常に強力ですが、適切なセキュリティ対策を行わなければ脆弱性を抱えることになります。SQLインジェクション対策、ユーザー権限の制限、データのバリデーションなど、基本的なセキュリティ対策を徹底することで、安全で信頼性の高いWebアプリケーションを構築できます。

動作確認とデバッグ方法


PHP、Apache、MySQLの連携が完了した後は、システム全体が正しく動作するか確認し、問題があればデバッグを行います。ここでは、エラーの特定方法やデバッグの手順について解説します。

ステップ1:PHPの動作確認


PHPがApacheで正しく動作しているかを確認するために、phpinfo関数を使います。

sudo nano /var/www/html/info.php


以下のコードを記述して保存します。

<?php
phpinfo();
?>


ブラウザで以下にアクセスします。

http://サーバーIPアドレス/info.php


PHPの詳細情報が表示されれば、PHPは正常に動作しています。表示されない場合は、Apacheのエラーログを確認します。

sudo tail /var/log/apache2/error.log

ステップ2:MySQL接続の確認


PHPからMySQLへの接続を確認するために、簡単な接続スクリプトを作成します。

sudo nano /var/www/html/db_test.php
<?php
$servername = "localhost";
$username = "sample_user";
$password = "password123";
$dbname = "sample_db";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "データベース接続成功";
$conn->close();
?>


ブラウザで以下のURLにアクセスします。

http://サーバーIPアドレス/db_test.php


「データベース接続成功」と表示されれば、接続は問題ありません。エラーが表示された場合は、エラーログを確認して原因を特定します。

ステップ3:エラーログの確認


エラーが発生した場合は、ApacheやPHPのエラーログを確認します。

  • Apacheエラーログの確認
sudo tail /var/log/apache2/error.log
  • PHPエラーログの確認
sudo tail /var/log/php7.4-fpm.log

エラーメッセージを確認し、該当する箇所を修正します。

ステップ4:MySQLの動作確認


MySQLのサービスが動作しているか確認します。

sudo systemctl status mysql


問題がある場合は、再起動して状態を確認します。

sudo systemctl restart mysql


MySQLにログインしてデータベース一覧を表示することで、MySQLが正しく動作しているかを確認できます。

sudo mysql -u root -p
SHOW DATABASES;

ステップ5:Apacheの設定確認


Apacheの設定ファイルに問題がないか確認します。

sudo apache2ctl configtest


問題があれば、「Syntax Error」などのエラーが表示されます。エラーが表示された場合は、設定ファイルを修正します。

sudo nano /etc/apache2/sites-available/000-default.conf


修正後はApacheを再起動します。

sudo systemctl restart apache2

ステップ6:デバッグモードの有効化


開発環境ではPHPのエラーを即座に確認できるように、display_errorsを有効にします。

sudo nano /etc/php/7.4/apache2/php.ini


以下の行を修正します。

display_errors = On
error_reporting = E_ALL


設定を反映するためにApacheを再起動します。

sudo systemctl restart apache2

ステップ7:データの検証


MySQLデータベース内のデータが正しく反映されているか確認します。

USE sample_db;
SELECT * FROM users;


正しいデータが表示されれば、PHPからMySQLへのデータ操作は成功しています。

ステップ8:ブラウザのデバッグツール活用


ブラウザのデベロッパーツール(F12キー)を使用して、HTTPリクエストやレスポンスの状態を確認します。特に、500 Internal Server Error404 Not Foundなどのエラーは、サーバーログと併せて確認します。

まとめ


動作確認とデバッグは、システムが安定して動作するために不可欠です。Apache、PHP、MySQLそれぞれのログを確認し、エラーの特定と修正を行うことで、安全で信頼性の高いWebアプリケーションを構築できます。

まとめ


本記事では、Apacheを用いてPHPとMySQLを連携させる方法を解説しました。LAMP環境の構築から、Apacheの設定、PHPの動作確認、MySQLのセットアップ、そしてPHPを介したデータベースの操作まで、ステップごとに詳しく説明しました。

特に、SQLインジェクション対策やユーザー権限の適切な設定など、セキュリティ面での配慮は重要です。適切なセキュリティ対策を施すことで、安全なWebアプリケーションを構築できるようになります。

LAMP環境の構築は、Web開発の基礎であり、習得することで幅広い開発に対応できるスキルが身に付きます。ぜひ本記事を参考にし、実際にLAMP環境を構築して、PHPとMySQLの連携を体験してみてください。

コメント

コメントする

目次