第11回 スケジューラーを作ろう(2) - ファイルへの書き込み - - PHP基礎講座

PHP基礎編

Saity先生のPHP基礎講座

Lecutures on PHP

第11回 スケジューラーを作ろう(2) - ファイルへの書き込み - (その1)

 このエントリーをはてなブックマークに追加

  • さぁさぁ、Saity先生のPHP講座も、皆さんのおかげでもう11回目です!
  • よーし、今回も張り切ってがんばっていこー☆

ファイルの書き込み方法

  • さて、前回はスケジューラの登録画面を作成して終わったね。
  • はい。それで、ファイルにどうやって内容を書き込めばいいのかがわからなかったんでした。
  • そうだったね。じゃあ、ファイルを読み込む関数に続いては、ファイルを書き込む関数を紹介しようか。
関数の名前 使い方
file_put_contents 指定した内容をファイルに書き込む関数。PHP 5以上でしか使えない。
fputcsv 指定した配列をCSV形式に整形して、ファイルに書き込む関数。
PHP 5.1以上でしか使えない。
fwrite (fputsも同じ動作) 指定した内容をファイルに書き込む関数。
fopen関数と組み合わせて使う。
  • ふーむ、いろいろありますねぇ。。。
  • 今回はPHP 4でも利用できる、fwrite関数の使い方を紹介しよう。
  • これはfopen関数と組み合わせて使うんですね。
  • そう。fopen関数は、ファイルを「開く」関数だ。対して、fwrite関数は、ファイルに「書き込む」関数。file_put_contentsは、この両方の処理を1つにまとめた関数と言えるね。
  • にゃるほど。具体的には、どうやって書き込むんですか?
  • じゃあ簡単なコードを紹介しよう。fwrite関数を使う方法は、下のような感じかな。
<?php
$filename 
"C:\\Program Files\\xampp\\htdocs\\samplefile.txt";
$string "あいうえおabcde亜位卯絵尾";
$fp fopen($filename"w");
fwrite($fp$string);
fclose($fp);
?>
  • 読み込む時に比べて、コードが長くなっちゃったなぁ。
  • そうだね。じゃあ、簡単に各行の説明をしよう。まず最初の3行は、わかるよね。4行目からがファイルの処理で、fopen関数を使って、ファイルを「開いて」いるんだ。
  • なるほど。えっと。。第2引数の「w」って何ですか?
  • マニュアルを見て貰ったら分かると思うんだけど、「書き込みモード」でファイルを開くという意味だ。
  • 書き込みモード?
  • うん。fopenには、大きく分けて3つのモードがある。読み込み(r)、書き込み(w)、そして追記モード(a)だ。
  • ふむふむ。
  • 読み込みモードは、ただ読み込み為だけのもので、前回紹介した表にも出てきた読み込み用の関数などと組み合わせて使う場合には、このモードを用いる。書き込みモードは、第1引数で指定したファイルを開いて、中身を一度まっさらにしてから書き込みを行うモードだ。そして追記モードは、書き込みモードと違ってファイルを消去してから書くのではなく、最後の内容に追記をするためのモードだよ。
  • にゃるほど。
  • で、5行目でfwrite関数で書き込みをしている。
  • fcloseで、ファイルを「閉じる」訳ね。
  • うん。実はPHPでは、プログラムの終了時に自動的にファイルを閉じてくれるから、このfclose関数は書かなくても構わない。ただ、流れとしては以下のようになっていることを理解して欲しいんだ。

ファイルの書き込みの手順

  • freadを使うときには、「書き込みモード」を「読み込みモード」にするのと、fwriteの代わりにfreadとかを使う訳ね。
  • さすが俺の受講生。飲み込み早いねぇ。
  • それほどでも~。。。(って、さりげなく自分をほめてる気が。。。?)
  • 1
  • 2

  



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)