(PHP 4, PHP 5, PHP 7, PHP 8)
feof — ファイルポインタがファイル終端に達しているかどうか調べる
$stream
): boolファイルポインタがファイル終端に達しているかどうかを調べます。
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);
?>