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 ボタンをクリックすると入力チェックにより、ファイルにデータを追加しないようになります。またスクリプト挿入攻撃も無効にしています。