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