初心者必見!web・サーバー・phpの基本仕組み徹底解説

目次

はじめに

調査の目的

本調査は、検索キーワード「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を作成し、生成物をブラウザに返します。

処理フロー(順を追って)

  1. ブラウザがURLへHTTPリクエストを送る。
  2. Webサーバー(例: Apache/Nginx)がリクエストの種類を判定する。
  3. .phpならFastCGIプロトコルでphp-fpmに処理を依頼する。
  4. php-fpmがPHPコードを読み、パーサーと実行エンジンで処理する。
  5. 必要に応じてデータベースやファイルへアクセスし、動的にHTMLを生成する。
  6. 生成した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と接続する際に必要です。

リクエストの流れ(簡単)

  1. Webサーバーがリクエストを受け取る
  2. FastCGIでphp-fpmに転送する
  3. php-fpmのワーカーがPHPを解釈・実行する
  4. 結果を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を使ってライブラリ管理を行います
  • ローカルではエラーレポートを表示、本番では非表示にします

動作確認の簡単な手順

  1. WebサーバーとPHPを起動する
  2. ドキュメントルートにinfo.phpを作成し、を置く
  3. ブラウザで表示されれば基本的な設定は整っています

各項目は用途や規模で変わりますので、まずはローカルで試してから本番環境へ移すと安心です。

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の主な連携方式の説明です。

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

この記事を書いた人

目次