CODE-U - はじめてのPHPプログラミング - 超速習 - PHPプログラミング(Web編)
PHPにはビルトインWebサーバというWebサーバが付属しています。ビルトインWebサーバを使えば簡単にWebアプリケーションの開発を始めることができます。

このWebサーバというソフトウェアをパソコンの中で予め起動しておくことで、ブラウザとの通信を処理できます。具体的にはブラウザのアドレスバーに入力するURLにlocalhostと指定することで自分のパソコン内でのHTTP通信が発生します。また図の数値の部分をポート番号といいます。このポート番号を使ってパソコンで動作しているプログラムの中からWebサーバを識別します。
My BBS - Part1
ここではPHPを使って簡単なBBSアプリを作成します。以下の2つのPHPファイルを作成します。
- bbs.php
 - bbs_post.php
 
bbs.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My BBS</title>
</head>
<body>
  <h1>My BBS</h1>
  <hr>
  <form action="bbs_post.php" method="post">
    <input type="text" name="message">
    <input type="submit" value="send">
  </form>
  <ul>
    <li>Bonjour</li>
    <li>Ciao</li>
  </ul>
</body>
</html>
bbs_post.php
<?php
$message = $_POST["message"];
$message = $message . PHP_EOL;
file_put_contents("messages.txt", $message, FILE_APPEND);
header("Location: bbs.php");
Webサーバの起動
PHPに付属しているビルトインWebサーバを起動するにはターミナルから以下のように入力します。
$ php -S localhost:8000

図のように表示されればビルトインWebサーバは起動しています。ターミナル上で
ctrl - cとタイプするとビルトインWebサーバは停止します。
Webブラウザからアクセス
続いてWebブラウザからPHPプログラムにアクセスしてみましょう。以下のURLにアクセスします。
http://localhost:8000/bbs.php

テキストボックスに Hello と入力して send ボタンをクリックします。

この時点では画面に
Helloは表示されませんが、messages.txtファイルにメッセージが追加されます。
My BBS - Part2
bbs.php ファイルを修正してしてメッセージを表示するようにします。ここでは以下のPHPファイルを修正します。
- bbs.php(修正)
 
bbs.php
<?php
$messages = file("messages.txt");
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My BBS</title>
</head>
<body>
  <h1>My BBS</h1>
  <hr>
  <form action="bbs_post.php" method="post">
    <input type="text" name="message">
    <input type="submit" value="send">
  </form>
  <ul>
    <?php for ($i = 0; $i < count($messages); $i++) { ?>
    <li><?php echo $messages[$i]; ?></li>
    <?php } ?>
  </ul>
</body>
</html>
Webサーバの起動
ビルトインWebサーバを起動します。
$ php -S localhost:8000
既に起動している場合は不要です。
Webブラウザからアクセス
WebブラウザからPHPプログラムにアクセスしてみましょう。
http://localhost:8000/bbs.php

テキストボックスに何かメッセージを入力してみてください。
(参考) My BBS - Part3
さいごにセキュリティを考慮したプログラムに修正します。
ここでは以下の2つのPHPファイルを修正します。
- bbs.php(修正)
 - bbs_post.php(修正)
 
bbs.php
<?php
$messages = file("messages.txt");
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My BBS</title>
</head>
<body>
  <h1>My BBS</h1>
  <hr>
  <form action="bbs_post.php" method="post">
    <input type="text" name="message">
    <input type="submit" value="send">
  </form>
  <ul>
    <?php for ($i = 0; $i < count($messages); $i++) { ?>
    <li><?php echo htmlspecialchars($messages[$i]); ?></li>
    <?php } ?>
  </ul>
</body>
</html>
echo処理にhtmlspecialchars関数を追加します。これは「スクリプト挿入攻撃(クロスサイト・スクリプティングなど)」への対処です。
bbs_post.php
<?php
# $message = $_POST["message"];
$message = (string)filter_input(INPUT_POST, "message");
if ($message != "" && mb_strlen($message) <= 14) {
  $message = $message . PHP_EOL;
  file_put_contents("messages.txt", $message, FILE_APPEND);
}
header("Location: bbs.php");  
filter_input関数を使ってリクエストパラメータを処理しています。また入力チェックを追加しています。
Webサーバの起動
ビルトインWebサーバを起動します。
$ php -S localhost:8000
既に起動している場合は不要です。
Webブラウザからアクセス
WebブラウザからPHPプログラムにアクセスしてみましょう。
http://localhost:8000/bbs.php

テキストボックスが空のまま
sendボタンをクリックした場合や15文字以上に入力してsendボタンをクリックすると入力チェックにより、ファイルにデータを追加しないようになります。またスクリプト挿入攻撃も無効にしています。