PHP 実践 ファイル操作を行う
PHPでは多くの場合、データをファイルに書き出すよりも データベースを利用してしまった方が楽な場合ば多々あります。 ですが、間違いなくファイルにデータを書き出ししなければいけない時も存在します。 ここでは簡単にですがファイル操作について突っ込んでみたいと思います。
ファイル操作には特別なモジュールは必要としませんので前準備は特に必要としません。
ここではファイルからデータを読み出し、 数値を加算してからファイルに上書きするという流れを追ってみたいと思います。 この処理の流れは・・・そう、カウンターですね。
上記のようなコードではファイル名が判っていないと処理が出来ません。 そこで、指定のフォルダから存在するファイルをずらっと表示するコードを書いてみたいと思います。 その為には ファイル操作ではなくフォルダ操作を行わなくてはいけません。
ここではファイルからデータを読み出し、 数値を加算してからファイルに上書きするという流れを追ってみたいと思います。 この処理の流れは・・・そう、カウンターですね。
<?php
$fp = FileOpenFunc("filename.log","r");
$counter = intval( fgets($fp,1024) ) + 1;
fclose($fp);
echo $counter;
$fp = FileOpenFunc("filename.log","w");
fputs($fp,$counter);
fclose($fp);
function FileOpenFunc($fn,$mode){
$fp = fopen($fn,$mode);
if(!$fp){
echo "Miss File Open!!";
exit(-1);
}
}
>
ファイルを fopen("ファイル名","モード") で読み込み、その値に加算を行いそれを 書込みモードでファイルに戻してやっています。 処理の流れ自体は非常に簡単ですし、既にカウンター実戦の部分でこれと同じものを作っていますよね。 カウンター解説のコードと違う点はファイルの入出力を一つの関数にまとめてあるところです。上記のようなコードではファイル名が判っていないと処理が出来ません。 そこで、指定のフォルダから存在するファイルをずらっと表示するコードを書いてみたいと思います。 その為には ファイル操作ではなくフォルダ操作を行わなくてはいけません。
<?php
function SearchDirFunc($lpath){
if(!is_dir($lpath)){
return false;
}
$result = opendir($lpath);
set_time_limit(20);
while($file_name = readdir($result) ){
if($file_name != "." && $file_name != ".."){
$lsec_filename = $lpath . "/" . $file_name;
if(is_dir($lsec_filename)){ //ディレクトリの場合
echo "$lsec_filename is Folder!<br>
<div style=\"margin:0px 0px 0px 32px\">";
SearchDirFunc($lsec_filename);
echo "</div>";
}elseif(is_file($lsec_filename)){ //ファイルの場合
echo "$lsec_filename is File!<br>";
}else{ //ファイルでもディレクトリでも無い場合
echo "$lsec_filename is unkown!<br>";
}//END_if_elseif_else
}//END_if()
}//END_while
}//END_Function
?>
これで指定フォルダのサブフォルダも含めファイル構造を一括取得する事が出来たと思います。 opendir 関数にて指定フォルダへのアクセス権を取得し、後は readdir 関数で開いたフォルダの中を走査しています。 自身のフォルダ、及び親フォルダは [ . ] [ .. ] として表示されるのでこれは例外としています。
if($file_name != "." && $file_name != ".."){
後は フォルダかファイルかで処理を分岐しているだけです。
2008年 12月 25日ドキュメント作成
2008年 12月 25日ドキュメント更新