PHPの基本に関するメモ。参考にしているのはPHPによるWebアプリケーションスーパーサンプル第2版の第8章(ファイル)の前半です。
- die関数はexitと同じでスクリプトを終了するという意味がある。以下のコードはfopenに失敗した場合(ファイルが存在しない場合など)にdieが呼ばれる。
-
$file = fopen($target, "a") or die("ファイルオープンに失敗しました"); flock($file, LOCK_EX); // ファイルの排他的ロック fputs($file, "abc</br>"); // 改行をつけてabcとファイルに書き込む flock($file, LOCK_UN); // unlock、ファイルの排他的ロックを解除する fclose($file);
- 共有ロックはLOCK_SH、ロック中に他のflock()でロックさせたくなければLOCK_NBをflock関数の引数で指定する。
- fopenはaで追記、wは上書きという意味になる。rは読み込み専用。xというオプションもある。+をつけることで読み書きの両方ができるようになる。
- tmpfile()関数を用いると、一時ファイルを作成できる。ここにデータを書き込むなどすればよい。fclose()で一時ファイルを閉じると、ファイルは自動的に削除される。
- file_put_contents関数を使うと、fopenでファイルを開かなくても指定したファイルに書き込みができる。fcloseなども不要になる。
- ファイルの読み込み時はファイルが存在しないとエラーになるので、@をつけてエラーメッセージを非表示にする手法が用いられる。
-
// 読み込み(r)なので、@をつけないとエラーメッセージを抑制できない $file = @fopen($target, "r") or die("ファイルオープンに失敗しました"); flock($file, LOCK_EX); // ファイルの排他的ロック while( feof($file) ){ echo fgets($file, 1000)."</br>"; // 1行ずつ表示。1000と指定すると999バイトまで読み込める。 } flock($file, LOCK_UN); flose($file);
- fgetsに代わり、fgetcとすると1バイトずつ読み込むことになる。freadは指定したバイト数だけ読み込んでいく。
- ファイル全体をまとめて読み込む場合には、fread関数とファイルサイズを調べるfilesize関数を組み合わせる方法がある。その他、file_get_contents関数、file関数がある。file_get_contents関数はファイルの中身を1つの文字列として取得する。file関数はファイルの内容を配列で入れる(改行なんかで1つの要素ごとに区切っているっぽい)。
- ファイルの存在確認にはfile_exists関数(返り値はboolean)が使える。
- rewindはファイルポインタを先頭にセットするための関数である。
- fileatime関数はファイルの最終アクセス時刻を調べるための関数である。最終更新時刻はfilemtime関数で調べる。
- ファイルの許可属性はfileperms関数で調べられる。ただし、出力結果はlinuxのパーミッションのように0~7の3桁の数字でもないので注意が要る。
- 拡張子のチェックはpathinfo関数の返り値のインデックスextensionを使うとよい。pathinfoはパス名に関する情報を得るための関数である。インデックスbasenameにはファイル名(拡張子付)が含まれている。
- ファイルの読み込みができるかについてはis_readable関数を、書き込み可能かどうかはis_writable関数を使う。実行可能かどうかについてはis_executable関数を使う。
- copy(from, to)でファイルコピーができる。ファイルのコピー先は強制的に上書きされる。
- rename(from, to)でファイル名の書き換えができる。変更先にファイルが既に存在しているとエラーになるので、そのような場合にエラーメッセージを抑制したい場合は@rename(from, to)とする。
- unlink($file)で$fileを削除できる。削除対象がないとエラーになるので、file_existsで一度調べてから削除することもある。あるいは@unlink($file)のようにすることもある。
0 件のコメント:
コメントを投稿