結論:PHPとはサーバー側でHTMLを作り分ける言語です
PHP(Hypertext Preprocessor)とは、サーバー側で動いて条件に応じてHTMLを作り分けるスクリプト言語です。ブラウザに届くのは生成後のHTMLだけで、PHPの条件文やDB接続情報そのものは届きません。
たとえば同じ index.php でも、午前中に開けば「おはようございます」、ログイン済みなら会員名入りのメニュー、未ログインなら新規登録への案内、といった出し分けができます。静的な文書がHTMLとは、置き場所と返答役がWebサーバーとはだとすれば、PHPは「注文内容を見て文書を作る厨房」です。
この記事では、PHPの全体像、できること、HTMLやJavaScriptとの違い、基本文法、バージョンの考え方、最初に覚えるべきセキュリティまでを一通り整理します。読み終えたらPHPの動かし方で hello.php を1ファイル表示し、PHPとMySQL接続へ進むのが最短ルートです。私たちはPHP公式マニュアル(php.net)とMySQL公式ドキュメントを参考にまとめました。
全体像:リクエストからHTML生成までの流れ
ブラウザが https://例.com/greeting.php を開くとき、裏側では次のやり取りが起きています。
- ブラウザがWebサーバーへ「
greeting.phpをください」と要求する - WebサーバーがPHP処理系にファイルを渡して実行させる
- PHPが時刻・ログイン状態・DB内容などを参照してHTML文字列を組み立てる
- Webサーバーが完成したHTMLだけをブラウザへ返す
- ブラウザがHTMLを表示する(PHPコード自体は見えない)
通信の土台はHTTPの要求と応答の往復です。PHPはその応答の中身を動的に作る役割に特化しています。
具体例で考えます。お問い合わせフォームは contact.php(入力画面表示)と contact-send.php(送信内容の受け取りと保存・メール送信)の2ファイル構成が典型的です。掲示板なら bbs.php(一覧表示+投稿フォーム)と bbs-post.php(投稿の受け取りとDB登録)に分けます。WordPressも中身は多数の .php ファイル群で、記事表示のたびにPHPがMySQLから記事本文を取り出してHTML化しています。
- ブラウザ:HTMLの表示と入力の送信(Chrome、Safari、Firefoxなど)
- Webサーバー:ファイルの保管と応答(公開フォルダの
index.phpを返す) - PHP:条件分岐・DB連携・HTML生成(時間帯挨拶、ログイン判定、一覧生成)
- MySQL:データの保存と検索(記事・会員・予約データの保管)
要点:HTMLが完成品の文書、PHPが調理工程、MySQLが食材倉庫です。3者の分担が見えると、エラー時の切り分けも「表示の問題か、処理の問題か、データの問題か」で考えられます。
PHPでできること7選:ファイル名とDB要否で整理する
初心者がつまずく原因の一つは「PHP=何でもできる魔法」と考えて全体像を見失うことです。下表のように用途と代表的なファイル名、DB要否で整理すると学習順序が明確になります。
| できること | 代表的なファイル名 | DB | 難易度 |
|---|---|---|---|
| 時刻・曜日・条件による表示分け | greeting.php、info.php | 不要 | 入門 |
| お問い合わせフォームの受付 | contact.php、contact-send.php | 任意 | 入門〜初級 |
| 簡易掲示板・コメント表示 | bbs.php、bbs-post.php | 要 | 初級 |
| 検索・一覧・詳細表示 | list.php、detail.php、search.php | 要 | 初級〜中級 |
| ログイン・会員管理 | login.php、logout.php、mypage.php | 要 | 中級 |
| 画像・ファイルの受付と一覧 | upload.php、gallery.php | 要 | 中級 |
| WordPressなどCMSの動作基盤 | index.php、single.php ほか多数 | 要 | 応用 |
1つ目の表示分けはDB不要で今日から試せます。greeting.php で date('H') の値により挨拶を変えるだけでも、サーバー側実行の感覚がつかめます。
2つ目のお問い合わせは、入力→確認→送信完了の3画面遷移とメール送信、入力値の検証が学べます。最初は保存先をファイルではなくメール送信のみに絞ると失敗が減ります。
3つ目以降はMySQLとの連携が前提です。いきなりログイン機能から作ると、パスワード管理やセッション管理で詰まるため、一覧表示(SELECTと表示だけ)から始めるのが定石です。
学習順序のおすすめは次の通りです。hello.php 表示→条件分岐とループ→フォーム受け取り($_POST)→ファイル一覧→DB一覧表示→投稿・更新・削除→ログイン、の順です。各段階で動くものを残しながら拡張すると、どこで壊れたかが分かります。
HTML・JavaScript・PHPの違い:動く場所と得意分野
3言語の違いは「動く場所」で覚えると混乱しません。下表が基本です。
| 言語 | 動く場所 | 得意な仕事 | コードは見えるか |
|---|---|---|---|
| HTML | ブラウザ(構造の解釈) | 文書の骨組み、見出し・表・フォーム枠 | ソース表示で見える |
| JavaScript | 主にブラウザ | 画面の動き、入力チェック、非同期取得 | ソース表示で見えることが多い |
| PHP | サーバー | DB連携、認証、条件に応じたHTML生成 | ブラウザには届かない |
たとえば入力チェックは両方で行います。JavaScriptで「未入力です」と即時表示して使い勝手を上げ、PHP側でも empty($_POST['name']) で再検査して不正送信を防ぐ二段構えです。JavaScriptだけではブラウザの改変で回避できるため、最終検査は必ずPHP側で行います。
もう一つの違いはデータの扱いです。HTMLは書いた内容をそのまま見せるだけですが、PHPはMySQLから取り出した数百件の記事をループで <li> に展開できます。JavaScriptも取得表示はできますが、会員パスワードの照合や料金計算のような裏側の正誤判定はPHP側に置くのが基本です。
覚え方:見える側の動きと親切さはJavaScript、裏側の正しさとデータはPHP、骨組みはHTMLです。対立ではなく分担として捉えます。
基本文法:変数・条件分岐・ループ・HTML埋め込み
PHPの書き方の約束は4つだけ先に覚えます。開始タグ <?php、文末のセミコロン ;、変数は $ 始まり、HTMLへの埋め込みは <?= ... ?> です。ファイルの文字コードはUTF-8(BOMなし)で保存し、HTML側にも <meta charset="UTF-8"> を書きます。
次のコードは時間帯で挨拶を変える最小例です。ファイル名は greeting.php とします。
<?php
$hour = (int)date('H');
if ($hour < 12) {
$msg = 'おはようございます';
} elseif ($hour < 18) {
$msg = 'こんにちは';
} else {
$msg = 'こんばんは';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>時間帯挨拶</title>
</head>
<body>
<h1><?= htmlspecialchars($msg, ENT_QUOTES, 'UTF-8') ?></h1>
<p>このHTMLはPHPが作ってブラウザに渡しました。</p>
</body>
</html>
ブラウザのソース表示には <h1>こんにちは</h1> のような結果だけが残り、if 文自体は見えません。これがサーバー側実行の意味です。出力時は必ず htmlspecialchars($msg, ENT_QUOTES, 'UTF-8') で無害化します。変数の中身が外部由来でなくても習慣化すると、後で掲示板や検索表示へ拡張したときの事故を防げます。
2つ目は配列とループの例です。DB連携前の段階として、配列の一覧表示が書けると list.php への移行が滑らかです。
<?php
$items = ['リンゴ', 'みかん', '<b>メロン</b>'];
?>
<ul>
<?php foreach ($items as $item): ?>
<li><?= htmlspecialchars($item, ENT_QUOTES, 'UTF-8') ?></li>
<?php endforeach; ?>
</ul>
この例では3つ目の <b> が文字列としてそのまま表示されます。エスケープを外すと太字になりますが、投稿内容にHTMLを許すとレイアウト崩れやスクリプト混入の原因になるため、初期段階ではすべてエスケープする方針が安全です。フォーム受け取りでは $_GET と $_POST の使い分け、isset や empty による存在確認も合わせて覚えます。詳しい配置手順はPHPの動かし方記事で扱います。
バージョンと実行環境:PHP 8.3を基準に考える
PHPはバージョンで書き方の推奨が変わります。公式の対応状況はPHP公式マニュアル(php.net)の対応バージョン一覧で確認するのが確実です。古い書籍やコピー用コードには、現在は非推奨の書き方が残っている場合があります。
| 観点 | 古い系統(例:5系・7系初期前提の書き方) | 現在の基準(8系前提) |
|---|---|---|
| 型とエラー | 暗黙の変換や警告見落としが多い | 型宣言・例外・厳密なエラー検出が標準 |
| 文字コード | EUC-JP前提の解説が混在 | UTF-8+utf8mb4 が基準 |
| DB接続 | 古い接続関数を紹介する記事が残存 | PDO+プレースホルダが基準 |
| 学習資料 | コピペで動かない例がある | 公式マニュアルで裏取りして使う |
FreeHostBoxではPHP 8.3をご用意しています。公開フォルダへ .php ファイルを置く運用で、ファイルマネージャーまたはFTPでアップロードし、ブラウザでURL確認する流れです。管理画面の表示に従って進めてください。HTTPS化は無料SSLをご用意していますので、フォームを扱う前に有効化しておくと安心です。ぜひ無料プランでお試しください。
環境選びの基準は3つです。対応バージョンが明示されていること、エラー時の確認手段(ログや表示切替)があること、DB連携の情報(ホスト名・DB名・ユーザー)が管理画面で確認できることです。ローカル環境と無料サーバーのどちらで学ぶか迷う場合は、公開までの距離が短い無料サーバーで1ファイル表示を先に体験し、後からローカル開発環境を足す順序が挫折しにくくなります。
セキュリティの入口とよくある誤解・エラー
初心者が最初に覚える安全策は3つです。出力は htmlspecialchars で無害化する、DBはプレースホルダで渡す、本番でエラー詳細を出しっぱなしにしない、です。詳細な接続手順はPHPとMySQL接続記事、DB側の用語はMySQL解説記事で補えます。
| よくある誤解 | 正しい理解 |
|---|---|
| JavaScriptで検査したからPHP側は不要 | 最終検査は必ずPHP側で行う。ブラウザ側は回避できる |
| 身内だけの掲示板だから対策不要 | 自動巡回や推測送信は身内限定でも届く。基本対策は一律に行う |
| エラー表示は常に出した方が親切 | 本番の詳細表示は攻撃の手がかりになる。ログで確認する |
| パスワードをPHPに書けば安全 | 公開リポジトリや共有で漏れる。権限設定と保管方法まで含めて管理する |
警告:DBパスワードやAPIキーなどの秘密情報をソースコードへ直書きしたまま、共有サーバー上で権限を緩めたり、Gitの公開リポジトリへpushしたりしないでください。接続例の
'STRONG_PASSWORD_HERE'のような仮値は必ず実際の値に置き換えた上で、ファイルの公開範囲と保管場所を確認します。
よくあるエラーは4系統です。真っ白はPHP文法エラーや致命的エラー、コードがそのまま表示は拡張子 .html のまま置いた場合やPHP未処理、文字化けは保存形式と meta charset の不一致、404は公開フォルダや大文字小文字の間違いです。いきなり大作で試さず hello.php や greeting.php の最小構成に戻して切り分けるのが近道です。
公開前のチェックリストは次の通りです。
- ファイルはUTF-8(BOMなし)で保存し、
.php拡張子になっている - すべての出力に
htmlspecialchars(..., ENT_QUOTES, 'UTF-8')を付けた - DB接続はPDO+プレースホルダで書き、値をSQL文字列に直接埋め込んでいない
- 本番でエラー詳細表示を無効化し、表示ではなくログで確認できる
- パスワード等の秘密情報を公開場所や共有リポジトリに置いていない
- バージョン表示や対応状況を公式マニュアルと管理画面の表示で確認した
ミニ実践として、今日は hello.php と greeting.php の2ファイル表示を目標にします。できたらフォーム受け取りの receive.php($_POST の中身をエスケープ表示するだけ)を追加し、次記事でDB連携へ進みます。サイト全体の作り方はサイト公開の全体工程記事も参考になります。
次に読む記事
- PHPの動かし方 —
hello.phpを無料サーバーで表示する手順と真っ白・404の直し方 - PHPとMySQL接続 — PDOとプレースホルダで一覧表示する実践手順
- MySQLとは — テーブル・行・SQLの用語整理とMariaDBとの関係
- WordPressとは — PHP製CMSの全体像と自作PHPとの位置づけ
出典・参考資料
- PHP公式マニュアル(php.net):言語リファレンス、対応バージョン、PDO・
htmlspecialcharsの仕様 - MySQL公式ドキュメント:データ型・SQL構文・文字セット(
utf8mb4)の考え方 - 無料プランの内容は料金ページをご覧ください。分からなければ私たちがサポートします。まずは無料プランで実際に触って確かめてみてください。
よくある質問
PHPで何が作れる?
お問い合わせフォーム、ログイン、掲示板、ブログ、ECの裏側などが作れます。WordPress自体もPHPで動いています。最初は時刻表示や条件分岐によるHTML作り分けから始め、慣れてきたらDB連携へ進むのが近道です。
PHPとJavaScriptの違いは?
PHPはサーバー側、JavaScriptは主にブラウザ側で動きます。PHPはDB連携や認証、JavaScriptは画面の動きや入力補助が得意で補完関係です。どちらか一方ではなく、役割分担として覚えるのが正確です。
初心者でも学べる?
HTMLの後に1ファイル表示から始めれば十分学べます。hello.phpの表示、条件分岐、フォーム受け取りの順に進め、いきなりDB連携やフレームワークから始めないのがコツです。
PHPのファイルはどこに置くの?
Web公開用のフォルダに拡張子.phpで置きます。拡張子.htmlのままではPHPとして処理されません。ファイルマネージャーまたはFTPでアップロードし、ブラウザで該当URLを開いて確認します。
PHPのバージョンは何を選ぶべき?
PHP公式マニュアルの対応状況を確認し、対応中の新しいバージョンを選びます。FreeHostBoxではPHP 8.3をご用意していますので、ぜひ無料プランでお試しください。古い書き方のコピーや古いバージョン前提の記事はエラーの原因になるため避けます。
WordPressを使う場合もPHPの知識は必要?
必須ではありませんが、仕組みを知ると不具合対応やカスタマイズが楽になります。WordPress自体がPHPとMySQLで動いているため、テーマの条件分岐やプラグインの動作理解にPHPの基礎が役立ちます。
PHPを無料サーバーで動かす
読むだけより1ファイル動かす方が速いです。無料サーバーで表示確認まで進みましょう。