PHP

PHPにおいてファイルの入出力

ファイルの入出力onPHP!

COBOLは飽きました。あんなクソみたいな制約の言語なんてやってられるか、俺は自由にクソみたいなコードを書くぞ。記事内でPHPだったりphpだったり表記に揺らぎがありますが気にしたら負け。何も考えずに記事書いてる。

本題です。既に学習済みなのですが、基礎の復習として文章に書き起こしていきます(基本的にphp.net見てます)

phpにおいて、ファイルを扱う際にはfopenという関数でファイルを開き、そこから弄らないといけません。(他に手段があっても知らん!)
fopen関数は、C言語等と同じで返り値としてファイルポインタを返します
C言語なら代入する変数の型はFILEではないといけませんが、php
楽。でもこの方法使ったら偉い人に怒られそう。いきなり変数に代入しても問題ないです。この気楽さがphpのウリだと思っています。正直これ以外にウリが無いような気もしますが・・・

ファイルポインタを取得!

かなり話が脱線しましたが、phpでは、先述のようにfopen関数でファイルのポインタを取得します。
ちなみに、関数の式としては

fopen
resource fopen (string $filename, string $mode[, bool $use_include_path = false[, resource $context]])

(出典:http://php.net/manual/en/function.fopen.php)
となっております。
賢い人ならこれ見ただけで使い方は分かるね。ちなみに私はわかるので解説しません。賢いフレンズなので。

ファイルを読み込む!

fread

次はファイルを読み込む方法です。phpではファイルを読み込む際にfread関数を用います。この関数の式は、

fread
string fread (resource $handle, int $length)

(出典:http://php.net/manual/ja/function.fread.php)
となっております。$handleはファイルポインタ、$lengthは読み込むバイト数です。失敗したらfalse返ります。
この方法はガチでファイルを読み込みたい時に用いるっぽいです。

file_get_contents

先程はfread関数を挙げましたが、単純にファイルの中身を文字列に格納したいだけならこっちのfile_get_contents関数を用いた方が効率が良いらしいです。知らなかった・・・
関数の式は次のようになっています。

file_get_contents
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen]]]])

(出典:http://php.net/manual/ja/function.file-get-contents.php)
賢いフレンズさんたちなら意味はわかりますね。失敗したらfalse返ります。
注意点としては、関数仕様を見る限り引数はファイルポインタではなくてファイルのパスです。あれ?fopen関数いらなくね・・・

ファイルに書き込む!

fwrite

ファイルにデータを書き込むにはfwrite関数を用います。
この関数の式は

fwrite
int fwrite ( resource $handle, string $string [, int $length] )

(出典:http://php.net/manual/ja/function.fwrite.php)
となっています。$stringは書き込む文字列です。多分int型の変数とかぶち込んだら自動でstringとして扱われるようになってると思うので無事書き込めます。
また、注意点としては同じファイルポインタに二階書き込みを行うとファイルの末尾に追記されるぽいです。知らん。

実際のコード例!

例1(fopen~fwrite~fread)

例1では"Hello"という文字列をファイルtest.txtに書き込み読み込んで表示させています。動かしてないけど多分動きます。

sample1.php
<?
    if(($fp = fopen("test.txt","a+")) == false) //"a+"は読み込み&書き出し両方行える、常に追記
        echo "読み込みエラー!";
    fwrite($fp, "Hello");
    echo fread($fp);
    fclose($fp); //ファイルポインタを閉じる

例2(file_get_contents)

関数file_get_contentsと先ほどの例1のコードで生成されたtest.txtを用いて"Hello"と表示させます。動くかは知らない。

sample2.php
<?
    echo file_get_contents("test.txt");

まとめ

ファイルポインタを開く際はfopen、読み込みはfread、書き込みはfwrite
別の手段として、ファイルを読み込むだけならfile_get_contentsもある。
文字列としてファイルの内容を出力できたら後は適当に加工すればまともに扱えるからこれだけ知っていれば良いみたいな所ある。

この記事は以上です。
記事の長さの割にはまともなこと書いてないし、見るとしたら最後だけでいいです。ちなみにtwitterのIDは@4a9gn_intです。

閲覧ありがとうごさいました。意見は受け付けていません。