ガードブロッキング的ブログ

PHPのノート17 – 関数5(ファイル関数とファイル操作)

PHPのノート17 – 関数5(ファイル関数とファイル操作)

ファイル関数

ファイルを操作する関数。
これらを使ってファイルを操作する。

file_exists

ファイルに対してなんらかの操作をするときは必ず存在チェックをしなければならない。
そのための関数。
この例ではtest.datというファイルを用意して動作確認しています。

$testFile = "test.dat";
if (file_exists($testFile)){
 echo "存在します!";
 } else {
 echo "ありません!";
 }

確認
note17_01

is_writable

対象のファイルが書き込み可能かどうかを調べる関数。
対象のファイルが存在しなければ書き込みは不能となるのでfile_existsはis_writableで
代替される場合が多い。

$contents = "こんにちは!";
if (is_writable($testFile)){
 echo "writable";
 } else {
 echo "not writable! - 存在しないかも";
 }

確認
note17_02

fopen

ファイルを開く関数。
a = append追加
w = write上書き
r = read読み取り

$testFile = "test.dat";
if (is_writable($testFile)){
 $fp = fopen($testFile, "a");
 if (!$fp) {
 echo "オープンできません!";
 exit;
 }

確認
note17_03

$fpにtestFileを開いて内容を代入する。
できなければオープンできませんと表示する。
というプログラムを、スマートに書くと

$testFile = "test.dat";
if  (!$fp = fopen($testFile,"r")){
 echo "File could not open!";
 exit;
 }

となる。
もし$fpにtestFileを開いて中身を代入していなければFile could not open!と表示する。

確認
note17_04

file_existsからの文のチェックはtest.datを準備した状態としていない状態で確認すればわかりやすい。

fwrite

ファイルを保存する関数。

if (fwrite($fp,$contents) === false){
 echo "書き込み失敗!";
 exit;
 }

「===」は型も内容も含めて同じかどうかの比較演算子

fclose

ファイルを閉じる。

fclose($fp);

fwriteとfcloseはfopenで開いていないと動作確認できないので、
それらを連結したもので確認してみる。

$testFile = "test.dat";
 $contents = "こんにちは!";
if (is_writable($testFile)){
 $fp = fopen($testFile, "a");
 if (!$fp) {
 echo "オープンできません!";
 exit;
 }
 if (fwrite($fp,$contents) === false){
 echo "書き込み失敗!";
 exit;
 }
 echo "書き込み成功!";
 fclose($fp);
 } else {
 echo "NOT writable! - 存在しないかも";
 }

ファイルの中身の読み込み

fread

ファイルの中身を読み込む。

$testFile = "test.dat";
 $contents = "こんにちは!";
if (!$fp = fopen($testFile,"r")){
 echo "File could not open!";
 exit;
 }
 $contents = fread($fp, filesize($testFile));
 echo $contents;
 fclose ($fp);

fileseizはファイルをそのままのサイズで読み込むということ。
決まり文句的に使う。

file_get_contentsとfile

読み込みに関してはfopenやfile_exists、is_writableなどで逐一チェックせずとも
file_get_contentsで読み込み可能。

また、fileは変数(ファイルの中身)を配列で読み込む。

$testFile = "test.dat";
 $contents = file_get_contents($testFile);
echo $contents;
 echo ("<br />");
 $contents =file($testFile);
 var_dump($contents);

ファイルの書き込み系の確認は現時点ではネット上でやるのは危ないのでローカルにて確認。

注意事項

モバイルバージョンを終了