「PHP言語」のファイル操作の方法を学習しよう

PHPで「ファイル操作」ができる関数について学んでいきたいと思います。

「ファイル」をサーバーに作成し、ファイルにデータを追加したり、ファイルのデータを読み込んだりと、「サーバーログの記録」などでは、ファイルベースのデータ管理が行われているとのことでした。

WEBアプリケーションのデータ管理は「データベース」が主流ですが、ファイル操作についても学んでいきたいと思います。

ファイル操作の基本

ファイル操作を行うためには、PHPにあらかじめ用意されている「ファイル操作関数」を使っていきます。

まず、サーバーにファイルを用意し、そのファイルを操作することを考えると、「ファイルを開くことができるのか?」が問題になってきます。

file_exists

PHPには、ファイルが存在しているかを調べるために「file_exists」関数が用意されています。

この関数は、引数に「ファイルまたはディレクトリ」のパスを指定すると、ファイルがあれば「true」、なければ「false」が返ってくるようになっています。

例えば、「PHPファイルと同じディレクトリ」にある「test.txt」というファイルがあるかどうかを調べる場合は、

if( file_exist('test.txt') === true ){
    // ファイルが存在する場合の処理
} else {
    // ファイルが無い場合の処理
}

のようにプログラムを書いていきます。

is_readable・is_writable

ファイルが読み込めるかどうを調べるためには「is_readable」関数を使い、ファイルへ書き込めるかどうかを調べるためには、「is_wriable」関数を使用します。

「読み込み・書き込み」ができれば、「true」が返り、できなければ「false」が返ってきます。

先ほどの「file_exists」と組み合わせて、

$file = 'test.txt';
if( file_exist($file) === true ){
    if ( is_readable($file) === true ){
        // ファイルが読み込み可能な時の処理
    }
    if ( is_writable($file) === true ){
        // ファイルが書き込み可能な時の処理
    }
} else {
    // ファイルが無い場合の処理
}

のように書いていきます。

rename

ファイルの名前を変えたい場合は、「rename」関数に、

rename(変更前のファイルのパス, 変更後のファイルのパス);

ファイル名の変更が成功した場合は「true」、できなかった場合は「false」が返ってきます。

unlink

ファイルを削除したい場合は、「unlink」関数に、

unlink(ファイルのパス);

のようにファイルパスを渡すと、削除に成功すれば「true」、失敗すると「false」が返ってきます。

「SplFileObject」を利用したファイル操作

「PHP言語」には、「SplFileObject」というものが用意されていて、このオブジェクトを使うことでもファイルを操作できるとのことでした。

このオブジェクトを作るためには、

$f = new SplFileObject('ファイルパス');

のように、コンストラクタの引数に「ファイルパス」を書くと、「SplFileObject」クラスのインスタンスを作ることができます。

ファイルのデータ読み込み

ファイルの内容を読み取るプログラムを作るために、「test.txt」というテキストファイルを用意しました。

テキストファイルには、アルファベットを5行分書いています。

このテキストファイルを読み込むプログラムを、

$file = 'test.txt';
if( file_exists($file) === true ){
    if( is_readable($file) === true){
        $f = new SplFileObject($file);
        while ($f->eof() === false ) {
            print $f->fgets() . '<br>';
        }
    }
} else {
    print 'ファイルは存在しません。';
}

のように作って実行してみると、

ABCDE
FGHIJ
KLMNO
PQRST
UVWXYZ

のように表示されます。

今回作成したプログラムでは、「SplFileObject」クラスの「eof」と「fgets」メソッドが使われています。

eof

「eof」メソッドは、「ファイルの最後に到達しているか?」を調べることができるメソッドです。

ファイルの最後に到達していれば、「true」が返り、到達していなければ「false」が返ってきます。

fgets

「fgets」メソッドは、ファイルから1行分のデータを読み込むことができます。

読み込みに成功すれば、「ファイルから読み込んだ文字列」が返ってきて、読み込みに失敗すると「false」が返ってきます。

ファイルへのデータ書き込み

ファイルにデータを書き込む場合は、「SplFileObject」クラスのオブジェクトを作る際に、「オープンモード」を指定しないといけないとのことで、データを追加するときは、「a」モードで開く必要があるとのことでした。

そして、データを追加する際には、「fwrite」メソッドを利用します。

$file = 'test.txt';
if( file_exists($file) === true ){

    if( is_writable($file) === true ){
        $f = new SplFileObject($file, 'a');
        $f->fwrite(書き込むデータ);
    }
} else {
    print 'ファイルは存在しません。';
}

のようにプログラムを作ると、「ファイルの既存データ」の最後にデータを追加することができます。

fwrite

「fwrite」メソッドの引数に「書き込むデータ」を指定すると、ファイルにデータを書き込むことができます。

成功すると、書き込んだバイト数が返ってきます。この値が「0」の時は書き込み失敗を表しています。

→(前へ)「PHP言語」の「インターフェース・名前空間・例外処理」を勉強しよう!

→(次へ)「PHP言語」で「XML」「JSON」データの「読み込み」と「作成」を行う方法を勉強しよう!

→「Twitter:@satoru78888」

HOMEへ