.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 4
.
<< Prev
出力バッファ制御
« INDEX »
PHP 文法編
Next >>
ファイル操作(ユーティリティ)
作成日:2006/05/10

1X.5 ファイルシステム

1X.5.1 ファイル操作(基本)

構文説明
resource fopen
( string filename,
string mode
[,int use_include_path
[,resource zcontext]] )

filename で指定されたリソースをオープンします。 filename にはローカルのファイル名またはURLが指定できます。 URLをオープンするには php.ini の allow_url_fopen が有効になっている必要があります。 fopen() はオープンが失敗すると FALSE を返し、E_WARNING レベルのエラーを発行します。 @ を使ってこの warning を抑制することもできます。

modeには以下のものが指定できます。
mode説明
'r'
Read Only でオープンします 。ファイルポインタを先頭にセットします。
'r+'
Read/Write 用でオープンします。ファイルポインタを先頭にセットします。
'w'
Write Only でオープンします。ファイルポインタを先頭にセットし、 ファイルサイズをゼロにします。ファイルが存在しない場合は作成します。
'w+'
Read/Write用でオープンします。ファイルポインタを先頭にセットし、 ファイルサイズをゼロにします。ファイルが存在しない場合には作成します。
'a'
Write Only でオープンします。ファイルポインタを終端にセットします。 ファイルが存在しない場合は作成します。
'a+'
Read/Write 用でオープンします。ファイルポインタを終端にセットします。 ファイルが存在しない場合は作成します。
'x'
Write Only でオープンします。ファイルポインタを先頭にセットします。 ファイルが既に存在する場合には fopen() は失敗し、E_WARNING レベルのエラーを発行します。
(PHP4.3.2以降でサポート)
'x+'
Read/Write 用でオープンします。ファイルポインタを先頭にセットします。 ファイルが既に存在する場合には fopen()は失敗し、E_WARNING レベルのエラーを発行します。
(PHP4.3.2以降でサポート)

modeに続けてフラグを指定する事ができます。 Windows上では、\n と \r\n を透過的に変換する テキストモード変換フラグ('t')が提供されてます。 それに対し、'b' を使って強制的にバイナリモードにすることもできます。 その場合データの変換はされません。 これらのフラグを使用するには、'b' または 't'を mode 引数の最後に追加します。 バイナリモードでファイルをオープンする場合は常に 'b' フラグを使用する事が推奨されています。

引数 use_include_path に 1(またはTRUE) を設定することにより、 include_path からファイル検索を行うこともできます。

用例:いろいろなオープン
$handle = fopen ("/home/rasmus/file.txt", "r");
$handle = fopen ("/home/rasmus/file.gif", "wb");
$handle = fopen ("http://www.y2sunlight.com/", "r");
用例:戻り値の処理
($handle=@fopen ($file, "rt")) Or die("Open Error: $file");
bool fclose
( resource handle )

handle で指定されたファイルをクローズします。 成功した場合に TRUE を、失敗した場合に FALSE を返します。

fgets() の用例を参照。

bool feof
( resource handle )

handle で指定されたファイルポインタが EOF に達しているかまたはエラーの場合に TRUE 、 その他の場合に FALSE を返します。

fgets() の用例を参照。

string fgets
( resource handle
[,int length] )

handle で指定されたファイルポインタから最大 length - 1 バイト読み出し、その文字列を返します。 エラーが起こった場合、FALSE を返します。 読み出しは、以下のいずれかになると終了します:

  • length-1バイト読み出した場合
  • 改行文字を検出した場合
  • EOFに達した場合

length が省略された場合、PHP 4.2.0 では 1024バイト が仮定されますが、 PHP4.3 以降では、行の終わりに達するまでストリームを読み続けます。

用例:
$file = "test/file.txt";
($handle=@fopen ($file, "rt")) Or die("Open Error: $file");

while (!feof($handle)) {
  // Windowsに於いて't'で開くとfgets()は\r\nを\nに変換する
  $buffer = fgets($handle, 4096);
  echo $buffer;
}
fclose($handle);
string fread
( resource handle,
  int length )

handle で指定されたファイルポインタから最大 length バイト 読み込みます。 エラーが起こった場合、FALSE を返します。 読み出しは、以下のいずれかになると終了します:

  • length バイト分読み込まれた場合
  • EOF 達した場合
  • パケットが利用可能になった場合(ネットワークストリームの場合)

(Windowsのように)バイナリとテキストファイルの形式が異なるシステ ムにおいては、 ファイルをオープンする際に fopen()の mode パラメータに 'b' (または't')を指定する必要があります。 また、文字列にファイルを読み込みたいだけならば、file_get_contents() を使う事もできます。

ネットワークストリームの場合、指定 length の如何に関わらす途中でデータが切れる可能性があります。 従って、以下の用例のように分割されたデータを結合する必要があります。

用例:
$handle = fopen("http://www.y2sunlight.com/", "rb");
$contents = '';
while (!feof($handle)) $contents .= fread($handle, 8192);
fclose($handle);
int fwrite
( resource handle,
  string string
[,int length] )

string の内容を handle で指定されたファイル・ストリームに書き込みます。 書き込んだバイト数、またはエラー時に FALSE を返します。 書き込みは、以下のいずれかになると終了します:

  • length バイト数分の書き込みが終わった場合 (lengthを指定している時)
  • string が終わりに達した場合

(Windowsのように)バイナリとテキストファイルの形式が異なるシステ ムにおいては、 ファイルをオープンする際に fopen() の mode パラメータに 'b' (または't')を指定する必要があります。

用例:
$file = "test/file.txt";
$text = "Hello World.\n";

if (is_writable($file)) { // ファイルの確認

  ($handle = @fopen($file, 'a')) Or die("Open Error: $file");
  // Windowsに於いて't'で開くと\nを\r\nに変換(出力)する
  (@fwrite($handle, $text)) Or die("Write Error: $file");
  fclose($handle);
}
bool fflush
( resource handle )

バッファリングされている出力をリソースに強制的に書き込みます。 成功した場合に TRUE を、失敗した場合に FALSE を返します。

bool flock
( resource handle,
  int operation
[,int &wouldblock] )

handleに結合しているファイルに対して operation で指定されたロック操作を行います。 operation は、次の値を取ります。 flock() は成功した場合に TRUE を、失敗した場合に FALSE を返します。

操作
LOCK_SH (=1)共有ロック (読み込みは可)
LOCK_EX (=2)排他的ロック(読み書き禁止)
LOCK_UN (=3)ロックを解除
LOCK_NB (=4)既にロックされている場合、ブロックせずに復帰
※LOCK_NBは他の操作と共に論理和で指定します

ロックはファイルをクローズすると自動解除されるので、ほとんどの場合、明示的な LOCK_UN は必要ありません。

用例:
flock($handle,LOCK_EX) Or die();  // ブロック

for( $i=0; !flock($handle,LOCK_EX+LOCK_NB); $i++){ // 非ブロック
  if ($i>3) die();
  sleep(1);
}
array fstat
( resource handle )

handleに結合しているファイルのステータス情報を含む配列を返します。 この配列のフォーマットは stat() 関数と同じです。 stat() は、ファイル名を指定してステータス情報を取得します。


stat() と fstat() が返す配列のフォーマット:
添字キー内容
0dev デバイス番号
1ino inode の番号
2mode inode のプロテクトモード
3nlink リンク数
4uid 所有者のユーザID
5gid 所有者のグループID
6rdev inode デバイス の場合、デバイスの種類 (※1)
7size バイト単位のサイズ
8atime 最終アクセス時間 (Unix タイムスタンプ)
9mtime 最終修正時間 (Unix タイムスタンプ)
10ctime 最終INODE変更時間 (Unix タイムスタンプ)
11blksizeファイル IO のブロックサイズ (※1)
12blocks ブロックの確保数
(※1) st_blksize タイプをサポートするシステムでのみ有効です。 その他のシステム(例えば Windows)では -1 を返します。
最終修正時間
mtime はファイルの内容が変更された時間です。ファイルの更新日時を取得するには、この値にdate()関数を適用します。
<< Prev
出力バッファ制御
« INDEX »>
Page Top
Next >>
ファイル操作(ユーティリティ)

.