feof
ファイルポインタがファイル終端に達しているかどうか調べる
説明
bool feof(resource $stream
)
パラメータ
-
stream
-
ファイルポインタは、有効なファイルポインタである必要があり、
fopen または fsockopen で正常にオープンされた
(そしてまだ fclose でクローズされていない)
ファイルを指している必要があります。
戻り値
ファイルポインタが EOF に達しているかまたはエラー
(ソケットタイムアウトを含みます) の場合に true
、
その他の場合に false
を返します。
注意
警告
fsockopen
でオープンした接続がサーバーによって閉じられていない場合、feof
はハングします。回避策は以下の例を参照ください。
例1 feof のタイムアウト処理
<?php
function safe_feof($fp, &$start = NULL) {
$start = microtime(true);
return feof($fp);
}
/* $fp は事前に fsockopen() でオープンしているものとします */
$start = NULL;
$timeout = ini_get('default_socket_timeout');
while(!safe_feof($fp, $start) && (microtime(true) - $start) < $timeout)
{
/* 処理 */
}
?>
警告
無効なファイルポインタを渡した場合、無限ループに陥ることがあります。
なぜなら feof が true
を返すことができないからです。
例2 feof に無効なファイルポインタを使用する例
<?php
// ファイルを読み込めなかったりファイルが存在しなかったりした場合、
// fopen 関数は FALSE を返します。
$file = @fopen("no_such_file", "r");
// fopen からの FALSE が警告を発生させ、ここで無限ループとなります。
while (!feof($file)) {
}
fclose($file);
?>