はじめに
調査の目的
本調査は、検索キーワード「web サーバー php」に関する情報を分かりやすく整理することを目的としています。PHPとWebサーバーの関係や動作の仕組みを、実例を交えて丁寧に解説します。
調査範囲
本書は次の内容を扱います。
– PHPの基本定義と特徴
– PHPがどのように動作するかの仕組み
– Webサーバーの役割と動作例
– PHP実行エンジンの詳細
– PHPに必要な動作環境
– ApacheとPHPの連携方式
さらに、WordPressでのPHP利用例にも触れます。
読者の方へ
プログラミング初心者から中級者までを想定しています。専門用語はできるだけ避け、具体例で補足します。実際に手を動かす前に仕組みを把握したい方に役立ちます。
本書の読み方
各章は独立して読めますが、基礎理解のために第1〜3章を順に読むことをおすすめします。必要に応じて章単位で参照してください。
PHPとは
概要
PHPは「Hypertext Preprocessor」の略で、サーバー上で動くプログラミング言語です。主にWebページを動的に作るために使われます。HTMLの中に直接書けるため、既存のHTMLに機能を追加しやすい点が特徴です。
主な特徴
- サーバーサイドで実行されるため、ユーザーごとに異なる内容を返せます。例:ログイン後に個別のページを表示する。
- HTMLとの相性が良く、テンプレートに組み込みやすいです。
- MySQLなど多くのデータベースに接続できます。データの保存・読み出しが簡単です。
具体例(簡単な使い方)
簡単な例だと、フォームで受け取った名前を表示する処理がよく使われます。PHPはテキストや画像を動的に生成したり、データベースから情報を読み出して表示したりします。
どんな場面で使われるか
ブログ、会員サイト、ショッピングカートなど、ユーザーの操作に応じて内容を変える必要があるWebサービスで広く使われています。
PHPの動作仕組み
概要
ブラウザから来たリクエストを受けて、Webサーバーが静的・動的のどちらかを判断します。静的ファイルはWebサーバーが直接返し、.phpへのアクセスはphp-fpmなどのPHP実行エンジンに委ねます。PHPは実行時に必要なデータを読み書きして動的にHTMLを作成し、生成物をブラウザに返します。
処理フロー(順を追って)
- ブラウザがURLへHTTPリクエストを送る。
- Webサーバー(例: Apache/Nginx)がリクエストの種類を判定する。
- .phpならFastCGIプロトコルでphp-fpmに処理を依頼する。
- php-fpmがPHPコードを読み、パーサーと実行エンジンで処理する。
- 必要に応じてデータベースやファイルへアクセスし、動的にHTMLを生成する。
- 生成したHTMLをphp-fpmがWebサーバーへ戻し、Webサーバーがブラウザへ返す。
具体例
- 動的ページ: index.phpにアクセスすると、NginxがFastCGIでphp-fpmに渡し、php-fpmがDBから記事を読みHTMLを作る。
- 静的資産: style.cssや画像はNginxが直接返すため高速です。
補足(ポイント)
- php-fpmは複数プロセスで同時処理を行うため、負荷分散に役立ちます。
- FastCGIはWebサーバーとPHP実行環境のやり取りの約束事(プロトコル)です。
Webサーバーの役割
1. まずは受付(HTTPリクエストの受け取り)
ブラウザがURLを開くと、WebサーバーがHTTPリクエストを受け取ります。リクエストにはファイル名やパラメータが含まれ、サーバーはこれを見て次の処理を決めます。
2. 静的コンテンツはサッと返す
HTMLファイル・画像・CSS・JavaScriptなどの静的ファイルは、サーバーがそのまま返却します。たとえば画像ファイルなら、ディスクから読み取りHTTPで送り返すだけなので速く済みます。
3. 動的コンテンツの判断と委譲
PHPの処理が必要なら、サーバーはphp-fpmなどの実行エンジンに処理を依頼します。サーバーはリクエスト内容を渡し、返ってきたHTMLをブラウザに返却します。
4. 付帯の役割(ルーティングやセキュリティ)
WebサーバーはURLごとの振り分けやアクセス制限、ログ記録、キャッシュ設定も担当します。例えると、受付やフロアの担当者が客の要望を聞き、必要なら厨房(PHP)に注文を出す役目です。
PHP実行エンジンの詳細
php-fpmの役割
php-fpm(PHP FastCGI Process Manager)はPHPコードの実行を担当します。複数のPHPプロセスを立ち上げ、Webサーバーからのリクエストを受け取り高速に応答します。軽い負荷でも高負荷でも安定した処理を目指します。
プロセス管理とプール
php-fpmは「マスター」と「ワーカー」で動きます。設定ファイルでプール(pool)を定義し、各プールごとにユーザーやプロセス数を分けます。代表的な設定例:
[www]
user = www-data
listen = /run/php/php7.4-fpm.sock
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 10
pmにはdynamic、static、ondemandがあり、動的に増減するか固定するかを選べます。メモリと同時接続数に合わせて調整します。
ソケットの種類(通信方法)
FastCGI経由でWebサーバーと接続します。主にTCP/IPソケットとUNIXドメインソケットの2種があります。UNIXソケットは同一ホスト内で速く、権限管理がしやすいです。TCPは別サーバーのphp-fpmと接続する際に必要です。
リクエストの流れ(簡単)
- Webサーバーがリクエストを受け取る
- FastCGIでphp-fpmに転送する
- php-fpmのワーカーがPHPを解釈・実行する
- 結果をWebサーバーに返し、クライアントへ送信する
チューニングと運用のポイント
- pm.max_childrenはメモリ容量と相談して決めます。オーバーするとOOMの原因になります。
- statusページを有効にして稼働状況を監視します。
- ログとエラーハンドリングを整え、再起動はgracefulに行います。
セキュリティ
プールごとに実行ユーザーを分けると、アプリ間の影響を減らせます。公開ディレクトリの権限やソケットのパーミッションも確認してください。
必要な動作環境
概要
PHPを動かす代表的な環境はLAMP構成です。これはLinux(OS)・Apache(Webサーバー)・MySQL(データベース)・PHP(スクリプト)を組み合わせたものです。初心者はこの構成を使うと学習や運用がわかりやすくなります。
代表的な構成要素と具体例
- OS: UbuntuやCentOSなどのLinux系(例: Ubuntu 20.04)
- Webサーバー: ApacheやNginx
- データベース: MySQLまたは互換のMariaDB
- PHP: 実行バイナリと拡張モジュール(後述)
Windows・macOS環境の選択肢
- Windows: WAMPやXAMPPで手軽に構築できます
- macOS: MAMPやHomebrewで個別に入れる方法があります
これらは開発向けに使いやすいパッケージです。
PHP本体と必要な拡張
よく使う拡張はPDO(データベース接続)、mbstring(日本語文字列処理)、openssl(暗号化)、opcache(高速化)です。環境に応じて有効化してください。
開発時の推奨設定
- PHPのバージョンは公式サポート中の安定版を選びます
- Composerを使ってライブラリ管理を行います
- ローカルではエラーレポートを表示、本番では非表示にします
動作確認の簡単な手順
- WebサーバーとPHPを起動する
- ドキュメントルートにinfo.phpを作成し、を置く
- ブラウザで表示されれば基本的な設定は整っています
各項目は用途や規模で変わりますので、まずはローカルで試してから本番環境へ移すと安心です。
ApacheとPHPの連携方式
概要
ApacheとPHPは主に「モジュール方式」と「FastCGI方式(php-fpm)」で連携します。前者はApache内でPHPを直接実行し、後者は別プロセスにPHPを任せて通信します。
方式の違い(わかりやすく)
モジュール方式はApacheの一部として動き、設定が簡単で導入が速いです。一方、全てのApacheワーカーがPHPを読み込むためメモリ消費が大きくなりやすいです。FastCGI方式はApacheとphp-fpmが独立して動き、プロセスを分けることでメモリ効率と安定性が向上します。
モジュール方式のポイント
- 主にmod_phpで使います。設定例: LoadModuleでPHPモジュールを読み込み、拡張子に対してハンドラを設定します。
- シンプルだが、スレッド型MPMでは問題が出ることがあります。プレフォーク型MPMと組み合わせることが多いです。
FastCGI(php-fpm)のポイント
- php-fpmがプールでPHPを処理します。Apache側はmod_proxy_fcgiやmod_fcgidで接続します。
- 例: ProxyPassMatchやUnixソケット経由でphp-fpmに転送します。プロセスごとにユーザーを分けられるため共有環境に向きます。
使い分けと運用上の注意
- 現代の公開サーバーやコンテナ環境ではphp-fpmが主流です。負荷分散や再起動が容易で、スケーリングに強いです。
- セキュリティ: php-fpmはプールごとにユーザー分離が可能です。パーミッション管理を徹底してください。
- パフォーマンス: OPcacheを有効にすると両方式で効果があります。php-fpmはmax_children等の設定を適切に調整してください。
リクエストの流れ(簡易)
- モジュール方式: Apache受信 → Apache内部でPHPを実行 → レスポンス返却
- FastCGI方式: Apache受信 → php-fpmへ転送(ソケット/ TCP)→ php-fpmで実行 → Apache経由で返却
以上がApacheとPHPの主な連携方式の説明です。












