サーバー側

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 の回で詳しく扱いますが、原則として覚えておいてください。

やってみよう

  1. 名前と年齢を入力すると「○○さんは△年後に 30 歳です」と表示するページ(年齢が 30 以上なら別のメッセージ)。
  2. 買い物リストの配列を、金額つきの連想配列にして、合計金額も表示する。
  3. わざと名前欄に <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 とは何か」で、実務で使われるフレームワークの全体像をつかみます。

公開教材の一覧へ