第10回 スケジューラーを作ろう(1) - ファイル操作の基礎知識 - - PHP基礎講座
Saity先生のPHP基礎講座
Lecutures on PHP
第10回 スケジューラーを作ろう(1) - ファイル操作の基礎知識 - (その2)
スケジュールのデータをどうやって保存する?
- 今回のスケジューラーを作る上で、1つ必ず避けては通れない課題があるんだ。それは、どうやってスケジュールを保存するか、なんだよね。

- え。。。それはセッションを使ったらいいのでは?セッションはデータを保存するための技術ですよねぇ??
- いやいや、それではダメなのだよ。セッションはクッキーをベースにしているから、そのクッキーの有効期限が切れてしまうと、セッションに入れたデータが無くなってしまう。でも、スケジューラーのデータが勝手に消えてしまっては困るよね。
- じゃあ、クッキーの有効期限を無限に長くしちゃえばいいんじゃないの?
- それでも困ったことになる。クッキーはPCに保存されるから、別のPCでアクセスしたときは、別のセッションになってしまうんだ。これでは、スケジューラーとして機能しないよね?
- ん~それでも良いんだけど(ブツブツ・・・)。まぁ、じゃあどうしたらいいのか、教えてくださいよ。
- うん。ブラウザ側に保存するからダメなんだ。利用者のデータはサーバーで保存する、これ原則ね。
- はぁぃ、わかりましたー。

- さて。サーバーで保存する方法には大きく2通りあって、データベースを使うやり方と、ファイルを使うやり方があるんだ。
- メモメモ。
- まだデータベースについては詳しく説明しないけど、一般的にはRDBMS(リレーショナルデータベースマネジメントシステム)と呼ばれるソフトウェアを使って管理することになる。RDBMSを使うと、とても効率よくデータを格納したり、検索したりできるんだ。ただ、PHPとは別の知識が必要になるから今回はちょっとパスして、ファイルを使った方法にしよう。
- ファイルだと、データベースを使った場合と比べて、メリット、デメリットはどういうものが挙げられるの?
- そうだな。ざっとこんな感じかな。
| データベース | ファイル | |
|---|---|---|
| 対応するデータ個数 | 大量のデータでも効率よく管理できる | 少ないデータの数に適している |
| データを検索する速度 | データを素早く見つけ出す仕組みが用意されている | データの検索をするためには、自分で実装する必要がある |
| プログラミングの簡単さ | SQL言語というRDBMS特有の言語を学習する必要がある | PHPの「ファイル関数」でプログラミングができる |
| インストールの簡単さ | 別途RDBMSをインストールし、セットアップが完了している必要がある | PHPの「ファイル関数」が標準で入っているので、それを使うだけで良い |
- データベースを使ったら、大量のデータを効率よく探し出したり、登録したりできるんだ。だから、数千件から数百万件のデータを想定している場合には、データベースを使った方がいいだろう。ただ、自分のスケジュールぐらいだったらデータ数もそんなに多くはないはずだから、ファイルでも十分だ。
- そうですね。ファイルについてもまだ勉強していないから、丁度いい機会だわ。
- では、早速スケジュールの登録画面の話に進んでいこう。
ファイルを扱う
- まずはファイルの仕組みについて、学んでいこう。ユキちゃん、さすがにディレクトリとかファイルという言葉の意味は分かっているよね・・・
- たぶん・・・。ディレクトリはフォルダとも呼ばれていますよね。WindowsのパソコンだとCドライブの下に、WINDOWSとかPROGRAM FILESとかのフォルダがあるわ。
- うん、その通り。XAMPPを使っている場合だと、ドキュメントルート直下に保存されたhello.phpは「C:\Program Files\xampp\htdocs\hello.php」と指定する。\(バックスラッシュ)がディレクトリの区切りを表すんだ。windowsでは、このバックスラッシュ記号は¥(円マーク)として記述されるけど、見た目が違うだけで、コンピュータにとってはどちらも同じ意味だよ。
- 円マークかぁ。。。うん、でもそれ当然よね・・・??
- いやいや、実はこの区切り文字が\なのは、Windowsの特徴なんだ。MacOS XやLinuxなどのシステムでは、/が区切り文字に使われるよ。
- 覚えておきまーす。

- では、ファイルを読み込んで表示する、簡単なプログラムを作ってみよう。
- ほいキタ!
- まずは「C:\Program Files\xampp\htdocs\」 に、samplefile.txtというファイルを作って、「This is samplefile」とだけ書いて保存しよう。
- ただのテキストファイルですよね。。。これを読み込んで表示する、ってことですか?
- うん。そして、そのコードは次のようになるよ。
<?php
$filename = "C:\\Program Files\\xampp\\htdocs\\samplefile.txt";
print(file_get_contents($filename));
?>
- あら、\が2重になってますよ。先生もおっちょこちょいだなー。
- いやいや、これは2重になってないとだめなんだよ。\は「エスケープ文字」といって、" "で囲まれた文字列の中で特殊な意味を持つ文字なんだ。
- へええ、そうなんだ!間違えて書いたんじゃなかったんですね。。。
- あはは、知らないとそう思っちゃうよね。まぁ、そんなわけで\を文字列の中で「普通の文字」として使いたい場合は、\\と2重にして書く必要があるんだよ。エスケープ文字については、また後で詳しく解説するよ。
- なるほど。それにしても、コードはずいぶん簡単ですねー。file_get_contentsという関数を使うだけでいいんですか。

- うん。この関数は、ファイルの内容を読み込んでその内容を戻すんだ。同じような関数にreadfileという関数があるけど、こちらはファイルの内容を直接ブラウザに出力してしまう。file_get_contents関数の方が使い勝手がいいだろうね。
- ふむふむ。マニュアルのファイル関数の項を見ると、他にも多くの読み込み用関数があるのがわかりますね。
- そうだね。例えばfile関数は、ファイルの内容を1行ずつの配列にして返してくれる関数だ。freadやfgetsなどの関数は、fopen関数と組み合わせて使う関数だよ。
- 色々あるんですねー。まとめて欲しいなぁ、先生☆
- 仕方ないなぁ。じゃあちょっと、表にまとめてみることにしよう。
| 関数の名前 | 使い方 |
|---|---|
| file_get_contents | ファイルの全内容を読み込んで、返す関数 |
| readfile | ファイルの全内容をそのままブラウザに出力する関数 |
| file | ファイルの全内容を、1行ごとの配列にして返す関数 |
| fgets | ファイルの内容を、1行ごと読み込み、返す関数。fopen関数と組み合わせて使う。 |
| fgetc | ファイルの内容を、1文字ごと読み込み、返す関数。fopen関数と組み合わせて使う。 |
| fread | ファイルの内容を指定した長さだけ読み込み、返す関数。fopen関数と組み合わせて使う。 |
| fgetcsv | CSVファイルの内容を、1行ごと読み込み、各列ごとの配列にして返す関数。fopen関数と組み合わせて使う。 |
| fgetss | ファイルの内容を、1行ごと読み込み、HTMLタグを取り除いて返す関数。fopen関数と組み合わせて使う。 |
- なるほど・・・どれも似ているようで、微妙に使い方が異なるんですね。
- うん。この「微妙」な差が、PHPで開発する上で便利な事もあるし、逆に多すぎてどれを使ったらいいか分からなくなる理由でもある。
- 適所適材、が難しい訳か。




ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。