(PHP 4, PHP 5, PHP 7, PHP 8)
feof — Проверяет, достигнут ли конец файла
Функция проверяет, наступило ли событие EOF в указателе на файл.
streamТребуется допустимый указатель на файл, который успешно открыли функцией fopen() или функцией fsockopen() и ещё не закрыли функцией fclose().
Функция возвращает true, если для файлового указателя наступило событие EOF
или возникла ошибка (включая превышение времени ожидания сокета), иначе возвращает false.
Функция feof() зависнет, если сервер не закрыл подключение, открытое функцией fsockopen(). Следующий пример показывает, как этого избежать:
Пример #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");
// Значение FALSE, которое вернула функция fopen, вызовет предупреждение и следующий цикл станет бесконечным
while (!feof($file)) {
}
fclose($file);
?>