PHP のきほん:サーバー側で動くプログラム
ブラウザではなく「サーバー」で動く PHP。環境の準備、基本の文法、フォームから送られたデータの受け取り方、そして絶対に守るべきセキュリティの基本を学びます。
更新日:2026-09-25
この記事で分かること
- 「サーバー側」とは何か。JavaScript とどう違うのか
- PHP を自分のパソコンで動かす準備
- PHP の基本文法(JavaScript と似ているところ、違うところ)
- フォームから送られた内容を受け取って表示する
- 最初から身につけておくべきセキュリティの習慣
所要時間の目安は 120 分です。
サーバー側とは
ここまで学んだ HTML・CSS・JavaScript は、すべて ブラウザの中 で動いていました。ページはあなたのパソコンに送られてきて、あなたのパソコンで表示されます。
しかし、次のようなことはブラウザだけではできません。
- 入力されたデータを 保存 する(次にアクセスしたときも残っている)
- 会員登録やログイン
- 他の人が書き込んだ内容を、みんなに表示する
これらは、インターネットの向こう側にある サーバー というコンピュータで処理します。その処理を書く言語の1つが PHP です。WordPress をはじめ、世界中の Web サイトで使われており、日本の求人でも需要が安定しています。
準備:PHP を動かす環境
PHP はブラウザでは動かないので、自分のパソコンに PHP を入れます。インストールは AI に任せるのがおすすめです。手順は前の記事「開発環境の作り方」にまとめてあります。Windows の方は WSL(Ubuntu)の中に、Mac の方は Homebrew で入れます。
Claude Code に頼むなら、たとえば次のように伝えます。
この環境(Ubuntu on WSL2 / macOS)に PHP 8.3 をインストールして、
php --version の結果を見せて。実行する前に、何をするか説明してから進めて。
インストールできたら、ターミナルで確認します。
php --version
バージョンが表示されれば OK です。
次に myphp というフォルダを作り、その中に index.php を作って、次を書きます。
<?php
echo 'こんにちは、PHP';
ターミナルで myphp フォルダに移動し、PHP に内蔵されている簡易サーバーを起動します。
cd myphp
php -S localhost:8000
ブラウザで http://localhost:8000 を開き、「こんにちは、PHP」と出れば成功です。終了は Ctrl+C です。
localhostは「自分のパソコン自身」を指す名前です。8000は番号(ポート)で、他で使っていなければ何でも構いません。
基本の文法
PHP のコードは <?php で始めます。JavaScript を学んだ方なら、似ているところが多いはずです。
<?php
// 変数は $ で始める
$name = '太郎';
$age = 20;
// 文字列の連結は . (ドット)
echo 'こんにちは、' . $name . 'さん';
// ダブルクォートの中では変数が展開される
echo "こんにちは、{$name}さん。{$age}歳ですね。";
| JavaScript | PHP | 補足 |
|---|---|---|
let name = '太郎'; |
$name = '太郎'; |
変数は $ から始める |
'a' + 'b' |
'a' . 'b' |
連結はドット |
console.log(x) |
echo $x; |
画面に出す |
const arr = [1, 2]; |
$arr = [1, 2]; |
配列の書き方は同じ |
{ name: '太郎' } |
['name' => '太郎'] |
連想配列(キーつきの配列) |
function f() {} |
function f() {} |
同じ |
if / for / while |
if / for / while |
ほぼ同じ |
配列と繰り返し
<?php
$fruits = ['りんご', 'みかん', 'ぶどう'];
foreach ($fruits as $fruit) {
echo $fruit . '<br>';
}
$user = ['name' => '太郎', 'age' => 20];
echo $user['name']; // 太郎
foreach は配列を順番に処理する構文で、PHP では非常によく使います。
関数
<?php
function tax(int $price): int
{
return (int) round($price * 1.1);
}
echo tax(1000); // 1100
int $price のように型を書けます(書かなくても動きますが、実務では書く習慣をつけると間違いが減ります)。
HTML の中に PHP を埋め込む
PHP は HTML の中に混ぜて書けます。これが PHP の強みです。
<?php
$items = ['牛乳', '卵', 'パン'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>買い物リスト</title>
</head>
<body>
<h1>買い物リスト</h1>
<ul>
<?php foreach ($items as $item): ?>
<li><?php echo htmlspecialchars($item, ENT_QUOTES, 'UTF-8'); ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
<?php ... ?> の外側は普通の HTML として出力され、内側だけが PHP として実行されます。foreach ... : ... endforeach; は HTML に混ぜるときの書き方です。
htmlspecialchars については次の節で説明します。とても大事 です。
フォームの値を受け取る
HTML のフォームから送られた内容は、$_GET または $_POST に入っています。
<?php
$name = $_POST['name'] ?? ''; // 送られていなければ空文字
?>
<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>あいさつ</title></head>
<body>
<form method="post" action="">
<input type="text" name="name" placeholder="名前">
<button type="submit">送信</button>
</form>
<?php if ($name !== ''): ?>
<p>こんにちは、<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>さん</p>
<?php endif; ?>
</body>
</html>
method="post"のフォームは$_POST、method="get"(URL に?name=...がつく)は$_GET?? ''は「なければ空文字にする」という意味。これがないと、初回表示でエラーになります
セキュリティの基本:最初から身につける
サーバー側のプログラムは、世界中の誰からでもアクセスされます。悪意のある入力も来ます。最初から次の3つを習慣にしてください。
1. 出力するときは必ずエスケープする
ユーザーが入力した文字をそのまま HTML に出すと、<script> タグを入れられてページを乗っ取られます(XSS)。画面に出すときは必ず htmlspecialchars を通します。
<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>
毎回書くのは長いので、実務では短い関数にまとめます。
<?php
function h(string $s): string
{
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
?>
<p><?php echo h($name); ?></p>
2. 入力は信用しない
「数字が来るはず」の欄にも、文字や空が来ます。受け取ったら必ず確認します。
<?php
$age = (int) ($_POST['age'] ?? 0);
if ($age < 0 || $age > 150) {
$error = '年齢が正しくありません';
}
3. データベースに渡すときは「プレースホルダ」を使う
データベースを扱うようになったら、SQL に入力値を直接つなげてはいけません(SQL インジェクション)。PDO のプレースホルダを使います。これは Laravel の回で詳しく扱いますが、原則として覚えておいてください。
やってみよう
- 名前と年齢を入力すると「○○さんは△年後に 30 歳です」と表示するページ(年齢が 30 以上なら別のメッセージ)。
- 買い物リストの配列を、金額つきの連想配列にして、合計金額も表示する。
- わざと名前欄に
<b>太郎</b>と入力して、エスケープあり・なしで表示がどう変わるか確かめる。
3つ目で「エスケープが何を防いでいるか」が実感できます。
つまずきやすいところ
- 画面が真っ白 → PHP のエラーです。
index.phpの先頭に<?php ini_set('display_errors', 1); error_reporting(E_ALL);を足すとエラーが表示されます(練習環境だけで使ってください)。 Undefined index/Undefined array key→$_POST['name']が存在しないときのエラー。?? ''をつけます。?>のあとの空行で「headers already sent」 → ファイルの最後の?>は書かない、が PHP の慣習です。
まとめ
- サーバー側は、保存・ログイン・共有など「ブラウザだけではできないこと」の担当。
- PHP は
$変数、連結は.、foreach、HTML への埋め込みが特徴。 - 出力は必ずエスケープ、入力は信用しない、DB はプレースホルダ。
次は「Laravel とは何か」で、実務で使われるフレームワークの全体像をつかみます。