PHPのプログラムを学んでいる際、データを取り扱う時に
と考えたことはないでしょうか。
今回は、テキストファイルの出力方法と別のデータ保管方法として、データベースの概要も紹介しています。
PHPのテキストファイルアクセスだけでなくデータベースの概要に触れ、様々なデータの取り扱い方法を学ぶきっかけになれば幸いです。
目次
テキストファイルを出力する方法
PHPのテキストファイル関数は大きく3つあります。基本的に大きな違いはなく、それぞれどれを利用しても大抵は大きな違いはありません。
細かい処理速度や、プログラムのステップ数などが変わってきますので、どれでも利用できるようにしておくと後々役に立つことが多いので見ていきましょう。
touch関数でテキストファイルを出力する
テキストファイルを出力する方法の一つに、空のファイルを作成する関数があります。それが、touch関数です。
これは、とりあえずファイルを作成するような処理の際に使います。後述するtouch関数でもファイルを作成するモードがあります。そのため、とりあえず一旦空のファイルが必要といった場合に利用する関数です。
また、本来はtouchという関数名もあるとおり、すでにファイルが存在する場合にはファイルの更新日付が変わります。touchという関数名でもあるとおり、ファイルを一旦触ったという証のような処理を行います。
記述方法は下記のように記述します。
1 2 3 4 5 6 7 8 |
<?php $filename = 'filestream.txt'; //ファイルがすでに存在する場合には処理を行わない if(!file_exists($filename)){ touch($filename); } |
touch関数の引数一覧
引数 | 説明 |
---|---|
filename | 第1引数。処理対象のファイル名。 |
time | ファイル更新時刻を指定。省略時は実行時の時刻が設定される。 |
atime | 対象ファイルの最終アクセス時刻が設定される。 |
fopen関数でファイルを作成する
fopen関数は本来関数名の通り、ファイルを開く関数です。しかし、モードによってはファイルが存在しない場合に新規ファイル作成をします。
下記はfopen関数のモードの一覧です。
fopen関数は下記のように記述し、第2引数に指定する文字列でモードが変わります。下記のサンプルでは’w’を指定しています。
1 2 3 4 5 6 7 8 9 10 |
<?php $filename = 'filestream.txt'; $content = '入力文字列'; $fp = fopen($filename,'w'); fwrite($fp,$content); fclose($fp); |
下記はfopen関数の引数一覧です。
引数 | 説明 |
---|---|
filename | 処理対象のファイル名。 |
mode | ファイルを開く際のモードを指定。 |
下記がモードの一覧です。
属性 | 説明 |
---|---|
w | 書き込みモードでファイルを開く。書き込む内容は上書きされ、本の内容は消える。ファイルが存在しない場合には新規作成。 |
a | 書き込みモードでファイルを開く。アペンドモードで開かれるため、ファイルポインタがファイルの最後につく。入力した内容は、末尾に追記。 |
c | 書き込みモードでファイルを開く。こちらもアペンドモードなのですが、ファイルの先頭に入力文字列が追記。 |
x | こちらも書き込みモードで開きます。しかし、ファイルがすでに存在する場合には、エラーとなる。存在しない場合には新規作成をおこう。 |
r | 読み込みモードで開きます。書き込みができませんが、fwriteは更新されません。 |
file_put_contents関数でテキストファイルを出力する
file_put_contents関数もテキストファイルへ文字列を書き込むことができます。
この関数の場合には、他の関数が複数行で行う処理を1行で実行できます。
具体的には下記のように記述します。
1 2 3 4 5 6 |
<?php $filename = 'filestream.txt'; $content = '入力文字列'; file_put_contents($filename,$content); |
fopenやtouchを使った場合よりコードが少なく済むのが特徴です。
しかし、内部的には同じようなことを行なっているため、処理速度はそこまで大きく変わりません。
この関数にもモードがあります、しかしこのフラグは特殊で論理演算子のOR「|」で連結することがあるので複数のモードを一度で指定できます。
下記はfile_put_contents関数の引数一覧です。
引数 | 説明 |
---|---|
filename | 処理対象のファイル名。 |
data | 書き込むデータ。文字列や配列、ストリーム。 |
flags | このフラグは論理演算子で複数指定することができます。 |
flagsで指定できるオプションの一覧です。
flag | 説明 |
---|---|
FILE_USE_INCLUDE_PATH | filenameをインクルードディレクトリ(include_path)から参照するようになる。 |
FILE_APPEND | ファイルが存在する場合に、追記するように指定。 |
LOCK_EX | 書き込み処理中にファイルを排他ロックする。 |
データベースによるデータの保存方法もあり
データを保存するという目的としてはテキストファイルで扱うのはシンプルなので、データ量が少ない場合や単純なデータの管理には向いています。
しかし、データ量が多かったり様々な切り口でデータを利用する場合などは、データベースによる管理の方が向いている場合が多いです。
データベースのメリット
ここでいうデータベースはRDBMS(リレーショナルデータベースシステム)です。
RDBMSでは、大量の複雑なデータを簡単で高速に管理することができます。
RDBMSは基本的にはエクセルの表のようなテーブルという単位でデータを管理するシステムのことを指します。様々なデータを、SQLというプログラム言語で取り扱えます。
SQLでできることは多岐に渡り、特定のデータのみ検索をしたり、複数の表を結合したりできます。
また、データを扱うことに特化しているため、データへ高速にアクセスする事もできます。
特にWeb開発の場合には、様々なフレームワークによりさらに簡単にデータベースからデータを取得したり更新することができるようになっています。
設定ファイルのような、ほとんどデータ量が変わらずシンプルな構造のデータ以外は、データベースを利用する方が良い場合が多いです。
データベースのデメリット
データベースのデメリットは一点です。
テキストファイルより、少し手続きが必要なため、本当に単純なデータはデータベースを使うのは少し煩雑になります。
具体的には、プログラムがデータベースからデータを取得するためには、下記の条件や手順が必要です。
- データベースのインストール
- プログラムがIDやパスワードを管理する
- アクセスにはSQLが必要
ただ、これら設定やSQLは一部のフレームワークではほとんど意識することなく使えたりする事もあります。
データベースとは一体何なのか?初心者の疑問をまとめて解決まとめ
テキストファイルの取り扱い方をみてきましたが、いかがでしたでしょうか。
後半データベースの概要も解説しました。データを取り扱うにはテキストファイルやデータベースが考えられます。
テキストファイルの取り扱いだけでなく、様々なデータベースの知識も学習するとプログラム開発の技術が上がるので興味を持つと良いです。
この記事が参考になれば幸いです。