Ciao a tutti!

eccomi qui con uno dei miei dubbi

Sto scrivendo un programmino per manipolare i file mul di ultima online.
Devo scorrere un file indice per recuperare i valori di seek da usare per recuperare i dati da un altro file.

Ecco la funzione che uso:

Codice PHP:
function artmulIdxs() {    
    global 
$fp//<- puntatore al file aperto in read-binary
    
$idxs = Array();
    for(
$x=0;feof($fp)===false;$x++) { //feof dovrebbe ritornare false alla fine del file
        
$lk=fread($fp,4);
        
$size fread($fp,4);
        
$unknow fread($fp,4);
                echo 
ftell($fp), "\n";
        if(
$size === false || $unknow === false || $lk === falsetrigger_error("Il file è terminato in modo imprevisto",E_USER_NOTICE);
        else 
$idxs[] = new artidx($x+1,$lk,$size,$unknow);
    }
    return 
$idxs;

Ora, tutto funziona alla perfezione finchè non arrivo alla fine del file.
Mi spiego meglio.
Il ciclo gira tranquillamente e tutti i dati vengono recuperati ma mi va in output questo:

(riporto solo le ultime righe)

786396
786408
786420
786432
786432

Trovati 65537 artworks.
Invalid lookup_bytes for 65537 (0).

Cosa succede!?
Nel ciclo arrivo alla fine (lo dimostra ftell) e per una volta è corretto che venga riportato perchè ho appena finito di leggere l'ultimo byte. Ma poi cosa succede!?
Ho letto l'ultimo byte!!! Perchè feof fa rientrare ancora una volta nel ciclo!?

Ripassa per i vari fread che ritornano 0 byte (giustamente siamo ad EOF), la posizione nel file non viene variata, ma al secondo tentativo feof rileva la fine del file! :master:

E' un bug secondo voi?
Devo segnalarlo?

Grazie!!