#ファイルの入出力onPHP!
COBOLは飽きました。あんなクソみたいな制約の言語なんてやってられるか、俺は自由にクソみたいなコードを書くぞ。記事内でPHPだったりphpだったり表記に揺らぎがありますが気にしたら負け。何も考えずに記事書いてる。
本題です。既に学習済みなのですが、基礎の復習として文章に書き起こしていきます(基本的にphp.net見てます)
phpにおいて、ファイルを扱う際にはfopen
という関数でファイルを開き、そこから弄らないといけません。(他に手段があっても知らん!)
fopen
関数は、C言語等と同じで返り値としてファイルポインタを返します。
C言語なら代入する変数の型はFILE
ではないといけませんが、php
は楽。でもこの方法使ったら偉い人に怒られそう。いきなり変数に代入しても問題ないです。この気楽さがphpのウリだと思っています。正直これ以外にウリが無いような気もしますが・・・
##ファイルポインタを取得!
かなり話が脱線しましたが、phpでは、先述のように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
関数を用います。この関数の式は、
string fread (resource $handle, int $length)
(出典:http://php.net/manual/ja/function.fread.php)
となっております。$handle
はファイルポインタ、$length
は読み込むバイト数です。失敗したらfalse返ります。
この方法はガチでファイルを読み込みたい時に用いるっぽいです。
###file_get_contents
先程はfread
関数を挙げましたが、単純にファイルの中身を文字列に格納したいだけならこっちの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
関数を用います。
この関数の式は
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
に書き込み読み込んで表示させています。動かしてないけど多分動きます。
<?
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"と表示させます。動くかは知らない。
<?
echo file_get_contents("test.txt");
#まとめ
ファイルポインタを開く際はfopen
、読み込みはfread
、書き込みはfwrite
。
別の手段として、ファイルを読み込むだけならfile_get_contents
もある。
文字列としてファイルの内容を出力できたら後は適当に加工すればまともに扱えるからこれだけ知っていれば良いみたいな所ある。
この記事は以上です。
記事の長さの割にはまともなこと書いてないし、見るとしたら最後だけでいいです。ちなみにtwitterのIDは@4a9gn_intです。
閲覧ありがとうごさいました。意見は受け付けていません。