- 更新日: 2017年03月21日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol01 PHPとは
ゼロから始めるPHP講座PHPとは
PHPとは
PHP(Hypertext Pre-processer)は、プログラミング言語の一種で、HTMLの文書内で記述を行えることが特徴です。
世の中には200種以上のプログラミング言語があると言われていますが、インターネットが広く普及して以降、PHPは全てのプログラミング言語の中でシェア率ベスト5に入っており、その中でもWebに向いているプログラミング言語の中ではシェア率1位で、世界中で多くの人が使用しています。
プログラミング言語 | シェア率 | |
---|---|---|
1 | C | 16.975% |
2 | Java | 16.154% |
3 | C++ | 8.664% |
4 | Objective-C | 8.561% |
5 | PHP | 6.43% |
6 | C# | 5.564% |
7 | (Visual)Basic | 4.837% |
8 | Python | 3.169% |
9 | JavaScript | 2.015% |
10 | Transact-SQL | 1.997% |
PHPの使用例
PHPは様々な企業で利用しており、有名なところでFacebook、Yahoo、GREEなどがPHPを使用しています。
具体的にどのような場面でPHPを利用しているかというと、例えばFacebookの場合、
- 友達情報や自分の名前など、個人ごとに異なる情報の読み込みから表示
- ユーザ認証(ログイン)
など、様々なところでPHPを利用し、結果として私達が普段見ているFacebookのページとなっています。
さらに具体的な例として、Facebookユーザ認証ページでは、メールアドレスやパスワードを入力しログインボタンを押した際、PHPで該当するメールアドレスとパスワードの組み合わせのユーザが存在するか照会し、
存在した場合は該当ユーザのトップページ
存在しなかった場合はエラーページ
を表示しています。
プログラミング言語(PHP)はなぜ必要か
PHPに限らず、Webページ作成の上でなぜプログラミング言語が必要かというと、表示する内容を「動的」に変えることにより、よりリッチなWebページ作成が可能となるためです。
現在時刻を表示:サンプル
例えばブラウザで「ページを表示した瞬間の時刻」をWebページに表示したいといった場合、時刻というのは常に変動している動的な値であり、HTMLで現在時刻を表現することはできません。
しかし、PHPを代表としたプログラミング言語を利用すると、簡単に現在時刻を表示することができます。
PHPを体験(RPG)
まずは実際にPHPを使った動的な動きがあるページを体験して頂きたいと思います。
オンラインエディタを利用し、以下内容をコピーしたファイルを作成しましょう。
ファイル名: rpg.php
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
<link rel="stylesheet" href="http://codecamp.lesson.codecamp.jp/sample/sample.css">
</head>
<body>
<div id="stage" style="display: none">
<div id="status-window">
<ul>
<li>
<p class="name">ユーザー</p>
<p class="hp">HP: <span id="player_hp">50</span></p>
<p class="mp">MP: 0</p>
<p class="lv">Lv: 30</p>
</li>
</ul>
</div>
<img id="suraimu" src="http://codecamp.lesson.codecamp.jp/sample/suraimu.png">
<div id="suraimu-damage">10</div>
<div id="player-damage">10</div>
<div id="log-window">
<p><span class="log" style="display :none"></span></p>
</div>
</div>
<script src="http://codecamp.lesson.codecamp.jp/sample/sample.js" type="text/javascript"></script>
</body>
</html>
ファイル作成&保存が完了したら、ファイル名を右クリックし「シミュレーション」を選択するか、オンラインエディタ右側上部に表示されているURLに以下指定をしましょう。
URL:http://最初から記載されている内容/rpg.php
RPGの戦闘画面のようなページが閲覧できたと思いますが、作成したファイルでPHPは利用しておらず、敵、味方ともに与えるダメージは、「10」で固定されています。
ゲームのようにダメージを固定でなくアクセス毎に変えるためには、表示内容を動的に変えることができるプログラミング言語(PHP)が必要となります。
ダメージに幅が出るよう、PHPを使い、動的な動きを実現してみましょう。
プログラミング体験のため今度はコピーではなくできれば手打ちで、お手本を参考に先ほどのファイルを改修してみましょう。
※色の違う行が追加又は変更箇所となります。
<?php
// hp
$enemy_hp = 20;
$player_hp = 50;
// プレイヤー名
$user_name = "ユーザー";
// 敵の攻撃
$attack_enemy = rand(1, 9);
// プレイヤーの攻撃
$attack_player = rand(1,20);
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
<link rel="stylesheet" href="http://codecamp.lesson.codecamp.jp/sample/sample.css">
</head>
<body>
<div id="stage" style="display: none">
<div id="status-window">
<ul>
<li>
<p class="name"><?php echo $user_name; ?></p>
<p class="hp">HP: <span id="player_hp"><?php echo $player_hp; ?></span></p>
<p class="mp">MP: 0</p>
<p class="lv">Lv: 30</p>
</li>
</ul>
</div>
<img id="suraimu" src="http://codecamp.lesson.codecamp.jp/sample/suraimu.png">
<div id="suraimu-damage"><?php echo $attack_enemy; ?></div>
<div id="player-damage"><?php echo $attack_player; ?></div>
<div id="log-window">
<p><span class="log" style="display :none"></span></p>
</div>
</div>
<script src="http://codecamp.lesson.codecamp.jp/sample/sample.js" type="text/javascript"></script>
</body>
</html>
できたらオンラインエディタ上のrpg.phpファイルを上書きし、右側のページを更新し閲覧してみましょう。
今回PHPを使って、「プレイヤー及び敵の体力設定(HP)」や「プレイヤー名の変更」、「プレイヤー及び敵の攻撃ダメージ幅の設定」を行えるようにしました。
この中でもダメージ幅は「rand(1,9);」という記述により、PHPでランダムな数字を毎回表示するという、非常に分かりやすい「動的」な動きを実現しています。
このようにWebページ作成の上で必須となるプログラミング言語(PHP)ですが、HTMLやCSSと異なり、PHPが行っている処理内容というのは、ユーザ(ブラウザ)から見ることができません。
先ほど作成したrpg.phpのWebページのソースを表示してみましょう。
表示されるのはHTMLとCSSだけで、PHPで記述した部分は表示されません。
この詳しい仕組みについては別途説明しますが、PHPを利用することで「ユーザから見えないように裏で処理」を行うことができるのも特徴の1つです。
PHPを体験(ひとこと掲示板)
次に「ユーザ同士のやり取り」があるページを体験して頂きたいと思います。
以下Webページにアクセスし、掲示板に書き込みをしてみましょう。
この掲示板は、PHPとHTMLの組み合わせおよそ100行で作られています。
<?php
// 書き込み情報保存ファイル
$filename = './bbs.txt';
$errors = array();
$data = array();
if ($_SERVER['REQUEST_METHOD'] === 'POST'){
// 名前が正しく入力されているかチェック
$user_name = null;
if (isset($_POST['user_name']) !== TRUE || mb_strlen($_POST['user_name']) === 0){
$errors['user_name'] = '名前を入力してください';
} elseif (mb_strlen($_POST['user_name']) > 20){
$errors['user_name'] = '名前は20文字以内で入力してください';
} else {
$user_name = $_POST['user_name'];
}
// ひとことが正しく入力されているかチェック
$user_comment = null;
if (isset($_POST['user_comment']) !== TRUE || mb_strlen($_POST['user_comment']) === 0){
$errors['user_comment'] = 'ひとことを入力してください';
} elseif (mb_strlen($_POST['user_comment']) > 100){
$errors['user_comment'] = 'ひとことは100文字以内で入力してください';
} else {
$user_comment = $_POST['user_comment'];
}
// エラーがなければ保存
if (count($errors) === 0){
$comment = $user_name . ',' . $user_comment . ',' . date('Y-m-d H:i:s') ."\n";
// 保存ファイルを開く
if (!$fp = fopen($filename, 'a')) {
print 'Cannot open file ' . $filename;
exit;
}
// オープンしたファイルに$commentを書き込む
if (fwrite($fp, $comment) === FALSE) {
print 'Cannot write to file ' . $filename;
exit;
}
fclose($fp);
header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
}
}
// 読み込み可能な場合
if (is_readable($filename) === TRUE) {
// ファイルオープン
if (($fp = fopen($filename, 'r')) !== FALSE) {
// 1行ずつデータを取り出す
while (($row = fgetcsv($fp, 1000, ',')) !== FALSE) {
// 配列に格納
$data[] = $row;
}
fclose($fp);
// 逆順に並べ替える
$data = array_reverse($data);
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ひとこと掲示板</title>
</head>
<body>
<h1>ひとこと掲示板</h1>
<form action="bbs.php" method="post">
<?php if (count($errors) > 0) { ?>
<ul>
<?php foreach ($errors as $error) { ?>
<li>
<?php print htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?>
</li>
<?php } ?>
</ul>
<?php } ?>
名前:<input type="text" name="user_name">
ひとこと:<input type="text" name="user_comment" size="60">
<input type="submit" name="submit" value="送信">
</form>
<?php
?>
<ul>
<?php
// 配列数分繰り返し処理を行う
foreach ($data as $value) {
?>
<li>
<?php print htmlspecialchars($value[0], ENT_QUOTES, 'UTF-8');?>:
<?php print htmlspecialchars($value[1], ENT_QUOTES, 'UTF-8');?>
-<?php print htmlspecialchars($value[2], ENT_QUOTES, 'UTF-8');?>
</li>
<?php
}
?>
</ul>
</body>
</html>
「Aさんが書き込みしたコメントをBさんやCさんも見ることができる」という当たり前のように思えるWebページですが、これを実現するためには「書き込みされた内容の保存」と「過去に書き込みされた内容の表示」という処理が必要になります。
TwitterやFacebook、ブログなど、世の中には多数のユーザ同士でコミュニケーションを行うWebページがありますが、どれも基本的な仕組みはひとこと掲示板と同じで、書き込まれた内容を保存するという「データ保存」処理を利用しています。
データ保存はHTMLやCSSでは行えず、プログラミング言語(PHP)を利用する必要があります。
現時点では100行程度で作成されたひとこと掲示板(PHP)の仕組みは全くといっていいほど分からないと思いますが、実はこの中にプログラムの基礎的な内容がほとんど全て詰まっています。
よってPHPでは、
- ひとこと掲示板の記述内容(ソースコード)を理解できる
- ひとこと掲示板を自力で作れる
上記を最初の目標とし、講義を進めていきます。
NEXT LESSON ☛ 文字の表示方法
PREV LESSON ☛ Ajaxとは
- この記事を書いた人
- CodeCampus編集部