array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'function.feof.php', 1 => 'feof', ), 'up' => array ( 0 => 'ref.filesystem.php', 1 => 'Funções do sistema de arquivos', ), 'prev' => array ( 0 => 'function.fdatasync.php', 1 => 'fdatasync', ), 'next' => array ( 0 => 'function.fflush.php', 1 => 'fflush', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'reference/filesystem/functions/feof.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
feof — Testa pelo fim-de-arquivo em um ponteiro de arquivo
stream
O ponteiro de arquivo deve ser válido e deve apontar para um arquivo aberto com sucesso por fopen() ou fsockopen() (e ainda não fechado por fclose()).
Retorna true
se o ponteiro estiver no fim do arquivo ou um erro ocorrer
(incluindo um limite de tempo de socket); caso contrário retorna false
.
Se uma conexão aberta por fsockopen() não foi fechada pelo servidor, feof() irá travar. Para contornar isto, veja o exemplo abaixo:
Exemplo #1 Handling timeouts with feof()
<?php
function safe_feof($fp, &$start = NULL) {
$start = microtime(true);
return feof($fp);
}
/* Assumindo que $fp foi previamente aberto por fsockopen() */
$start = NULL;
$timeout = ini_get('default_socket_timeout');
while(!safe_feof($fp, $start) && (microtime(true) - $start) < $timeout)
{
/* Handle */
}
?>
Se o ponteiro de arquivo passado não for válido pode-se chegar a um loop infinito, porque
feof() falha em retornar true
.
Exemplo #2 Exemplo de feof() com um ponteiro de arquivo inválido
<?php
// se o arquivo não puder ser lido ou não existir a função fopen retorna FALSE
$file = @fopen("no_such_file", "r");
// FALSE a partir do fopen irá emitir um aviso (warning) e resultar em um loop infinito aqui
while (!feof($file)) {
}
fclose($file);
?>