(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);
?>