リレーショナルデータベース(RDB)
SQLというのはデータアクセス言語と呼ばれるものです。
- MySQL
- MySQLはオープンソースで開発されており、誰でも無料で使うことができます。
- MariaDB
- PostgreSQL
キーバリュー型データストア(KVS)
オブジェクト型データストア()
XMLデータベース()
Webアプリの分野でPHPが広く使われる最大の理由、それは「HTMLとの親和性」にあります。
PHP以外にもWebで使われている言語はいろいろあります。
RubyやPython、最近ではJavaScriptもサーバー開発で使われるようになってきました。が、こうしたものとPHPの間には決定的な違いがあります。
これらの言語では「言語で書いたプログラム」と「Webページ(HTML)」がきっちりと分かれています。
PHPはHTMLに埋め込む独自のタグを持っており、それをHTMLのソースコードの中に埋め込んでプログラムを記述します。
XAMPP
XAMPPはApache Friendsという非営利プロジェクトによって開発されているソフトウェアです。
これはWebアプリ開発に必要なソフトウェア一式をパッケージ化したものです。
Apache HTTP Server | Webサーバープログラムです。世界中の商業サーバーで使われている本格的なもの |
PHP/Perl | WebサーバープログラムにはPHPとPerl言語が標準で組み込み済みになっています。 |
MariaDB | これは「MySQL」データベースソフトのコンバチブルプログラムです。 |
phpMyAdmin | Webベースで使えるMySQLデータベース管理ツールです。 |
XAMPPをインストールするとこれらがすべてセットアップされすぐに使える状態で用意されます。
XAMPPに用意されているWebサーバーを使います。
Windows版のXAMPPコントロールパネルはウィンドウ内にモジュールのリストが表示され、それぞれに「Start」ボタンが用意されていてモジュールのプログラムを開始できるようになっています。
一番上にある「Apache」というのがWebサーバープログラムのモジュールです。
この項目の右側にある「Start」ボタンをクリックするとWebサーバーが起動します。
公開フォルダ
Webサーバーが起動できたら、次に行うのは「公開フォルダ」の確認です。
WebアプリはWebサーバーに用意されている公開フォルダというところにファイルを設置します。
Webサーバーは外部からアクセスされるとあらかじめ設定された公開フォルダの中にあるファイルを読み込んで送り返すようになっているのです。ですから、ここにファイルを用意しないとWebサーバーで公開されません。
この公開フォルダは「XAMPP」フォルダの中にある「htdocs」というフォルダです。
PHPの書き方の基本
- PHPの処理は最初に1つだけ<?php ?>を用意し、すべてそこで行う。
- PHPの値を表示する際はすべて<?=?>を使う。
<?php
$price = 12500;
$tax = 0.08;
$res = $price * (1.0 + $tax);
?>
<dody>
<h1>Index</h1>
<p>金額は<?= $res ?></p>
</dody>
<?php ?>タグで計算をし、<?= ?>で結果を表示する。
クエリパラメータ
クエリーパラメータというのはアクセスするアドレス(URL)の末尾に?をつけ、その後に値の情報を記述して送る方法です。
「$_GET」という変数を使うことでクエリーパラメータの値がPHPに渡されます。
この$_GETは連想配列になっています。キーを指定するとそのキーの値が取り出せるようになっているのです。
?a=xxx&b=yyy&c=zzz...
$_GET['a']→"xxx"
$_GET['b']→"yyy"
$_GET['c']→”zzz”
「http://localhost/php/?price=123450」でアクセスするとこの金額がスクリプトに送られ、その金額の税込価格を計算して表示するようになります。
クエリーパラメータの値を変数に取り出しています。
「isset」関数は引数に指定した変数が存在しているかどうかを調べます。
if (isset($_GET['price'])) {
$price = $_GET['price'];
}
ユーザーに値を入力してもらう場合、クエリーパラメータよりも一般的なのは「フォーム」を利用する方法でしょう。
フォームの送信も基本的にはクエリーパラメータの利用と大体同じです。
送信されたフォームの情報はあらかじめ用意されている変数にまとめられているので、そこから取り出して利用すればいいのです。
クエリーパラメータの場合、$_GETという変数を使いましたが、フォームの場合は「$_POST」という変数を利用するのが一般的です。
<?php
$message = 'お名前をどうぞ';
if (isset($_POST['msg'])) {
$message = 'こんにちは、' . $_POST['msg'] . 'さん';
}
?>
<body>
<h1>Index</h1>
<p><?= $message ?></p>
<form action="." method="post">
<label>Message:</label>
<input type="text" name="msg">
<input type="submit">
</form>
</body>
PHPで文字列や変数を結合する場合は「.」と「.=」の2つを使用します。
methodはフォームの送信に使う「HTTPメソッド」を指定するものです。その後のactionはフォームの送信先を指定します。
<form action="." method="post">
チェックボックス
チェックボックスのコントロールにおいてチェックがONになっている場合、チェックボックスは「on」という値を送ります。ではチェックがOFFのときは何も送られないのです。
HTTPメソッドを調べる
$SERVER変数にはサーバーに関する各種の値が連想配列としてまとめられています。
この値がGETならばWebページにアクセスしています。POSTならばフォームを送信してスクリプトが呼び出されています。
$_SERVER["REQUEST_METHOD"]
最初にGET時の処理として$messageと$checkに初期値を代入しています。
そしてif文に進みます。POST送信されていたなら、この中の処理が実行される。
この中では更にif文が用意されていてチェックがONかどうかを調べています。
「POST送信かどうか」「チェックボックスの値があるか」という二重のifでチェックボックス送信の処理を作成している。
セッション
フォームから送信された値はページをリロードすると全部消えてしまいます。
セッションというのはクライアントとサーバーとの間の接続を維持し続けるための仕組みです。
ただ維持するだけでなく、そのセッションには値を保管しておくことができる。
その値は接続が維持されている間、ずっと保持し続けます。
file_get_contentsはファイルに書かれているテキストをすべて読み込んで返します。
- 文字列をファイルに書き込みます。
- ファイルがない場合は新規に作成する。
セッションの内容をファイルに保存
セッションを開始したらすぐにテキストファイルからデータを読み込み、セッションに設定しています。
テキストファイル読み込み
data.txtを読み込む
$content = file_get_contents('data.txt');
改行コードで$contentを分割し配列にする
$data = explode("\n", $content);
作成された配列をセッションに保管
$_SESSION['items'] = $data;
- implode関数は文字列を特定の文字で配列に分割する関数です。
- 第一引数には要素の間にはさみたい区切り文字を指定します。。
テキストファイル書き出し
$data = implode("\n", $_SESSION['items']);
- implode関数は配列の要素を結合して文字列に変換する関数です。
- 第一引数には要素の間にはさみたい区切り文字を指定します。。
セッションごとにファイルを保存する
同時に複数のWebブラウザを起動してアクセスしてみるとすべてのWebブラウザーで同じデータが表示されています。セッションごとに保管するはずのデータが全員共通になってしまう。
この問題はセッションごとに別々のファイルにデータを保存するようにすれば解決できます。
セッションIDとは各セッションごとに割り当てられるIDのことです。これはランダムなテキストになっているので、これをそのままファイル名に使って保存すればセッションごとに異なるファイルを用意できる。
セッションIDは新しいセッションが作成された際に自動的に割り当てられ、これは他のセッションとはかぶらないユニークな値(同じ値が1つもない)が使われます。
複数のWebブラウザでアクセスしデータを保存するとアクセスしたWebブラウザの数だけこうしたファイルが作成されることがわかります。
ちょっとしたサイト程度ならこの「セッションIDごとにテキストファイルを利用する」というやり方はそれなりに有効です。
CSVファイルの利用
本格的なWebアプリではデータベースを使うのですが、「そこまで大げさなものじゃない」というような場合にはもっと手軽に扱えるものがあります。それは「CSVファイル」です。
CSVファイルのアクセスは「fopen」「fclose」といった関数を利用します。
これはCSVファイルに限らず、様々なファイルを開いて操作を行うための基本となるものです。
CSVアクセス
fopenでファイルを開く。
これは引数にファイルパスとファイルアクセスの「モード」を指定します。
$変数 = fopen(ファイルパス, モード);
こうして問題なくファイルが開けると「ファイルポインタリソース」と呼ばれる値が返されます。
アクセスモード
どんなやり方でファイルにアクセスできるようにするかを示す値です。
読み込みモード
ファイルから値を読み込むだけの場合に使います。”r”だと読み込むだけですが、”r+”だと読み込みモードのつもりだけど、書き込みもできるという状態で開きます。
書き出しモード
ファイルに値を書き出す場合に使います。”w”だと書き込むだけですが、”w+”にすると読み込みもできたりします。
追記モード
ファイルに書き出す場合に使いますが、こちらは上書きではなく「追記」になります。
つまり、既にファイルがあった場合にはそのファイルの最後に値を書き足していくわけです。
CSVへ書き出す
CSVファイルへのデータの書き出しは「fputcsv」という関数を使います。
fputcsv(<ファイル>, 配列);
CSVファイルの利用はfopenで開き、アクセスの作業をしたらfcloseで閉じる。
fcloseしなかった場合、そのファイルが開けなくなります。
ファイルアクセスというのは何かのプログラムがファイルにアクセスしているときは、それ以外のアプリはアクセスできないようになっています。