[RISOLTO] Undefined offset, ma lo script funziona

di il
2 risposte

[RISOLTO] Undefined offset, ma lo script funziona

Buongiorno a tutti,
ho fatto una pagina php che apre un file lo explode, lo splitta e funziona. Unica cosa che mi esce questo messaggio (solo se lo lancio da linea di comando)
PHP Notice:  Undefined offset: 1 in /var/www/html/new_ip.php on line 36,37,38,40,41,42
Questo il codice:
$fr = fopen($file, 'r');
while (!feof($fr)) {
       $riga = fgets($fr);
       $split = explode(";", $riga);
       $ip_temp = $split[0];
       $num=explode(".", $ip_temp);
             $num1=intval($num[0]);
             $num2=intval($num[1]);   // <-36
             $num3=intval($num[2]);   // <-37
             $num4=intval($num[3]);   // <-38
       $url=sprintf($url_norm,$num1,$num2,$num3,$num4);
       $stato=$split[2];             // <-40
       $mac_add=$split[5];           // <-41
       $descr=$split[6];             // <-42
       //segue codice che inserisce nel db i valori $url,$mac_add,$descr

}
fclose($fr);
Mentre il file che apre ha questo forma:
..
192.168.51.78;;up;;;00:0C:29:0D:E5:58;VMware
192.168.51.82;;up;;;28:80:23:D4:8A:6D;
192.168.51.85;;up;;;98:0C:82:D0:E4:DC;Samsung
..

Il messaggio è un problema grave?
Come posso fare a toglierlo?

Cmq c'è da dire che quando trovo degli IP nuovi il codice funziona perfettamente e inserisce tutti i dati nel db, ma la Notice compare cmq.

Grazie

2 Risposte

  • Re: [RISOLTO] Undefined offset, ma lo script funziona

    Feof, sia in php che in altri linguaggi (tipo c) è una funzione piuttosto insidiosa, come puoi leggere da alcuni messaggi qui:

    In pratica, credo che nel tuo caso leggi una riga di troppo, prima che feof riconosca la fine del file.

    Una soluzione è sostituire feof con l'operazione di lettura (nel tuo caso fgets) e uscire dal ciclo se il valore ritornato è EOF o simili (verifica sulle reference qual è il valore di ritorno di fgets in caso di EOF).

    quindi:
    
    while(($riga=fgets($fr)!=EOF)...
    
  • Re: [RISOLTO] Undefined offset, ma lo script funziona

    Grazie mille ora funziona.
    Per completezza riporto la soluzione corretta (fgets da FALSE quando arriva a EOF)
    
    while($riga=fgets($fr)!)...
    
Devi accedere o registrarti per scrivere nel forum
2 risposte