• User Attivo

    Undefined index: HTTP_ACCEPT_LANGUAGE. A cosa è dovuto?

    Ciao ragazzi,
    spesso il mio server va offline e controllando il log degli errori del server web ho notato che è pieno zeppo di questo errore:

    FastCGI sent in stderr: "PHP Notice: Undefined index: HTTP_ACCEPT_LANGUAGE in [percorso del file]

    Qualcuno sa dirmi cosa vuol dire di preciso quell'errore?
    Tra l'altro è molto strano anche perchè la lingua del browser viene correttamente individuata nonostante l'errore generato.

    Aspetto vostri suggerimenti! :gthi:


  • User Attivo

    Dovresti incollare qui la riga che dà errore così da vedere come modificarla per evitarlo.


  • User Attivo

    Grazie per la risposta ma ho risolto 😄
    In pratica la funzione $_SERVER['HTTP_ACCEPT_LANGUAGE']; dava un errore quando un browser non restituiva la lingua dell'utente o quando un BOT di Google mi scannerizzava il sito. Ecco tutto :gthi:


  • User Newbie

    @Protone86 said:

    Grazie per la risposta ma ho risolto 😄

    Ciao Protone, ho letto che hai risolto e hai capito il motivo, ma come hai fatto per far sì che il log non fosse più sommerso dai messaggi di errore?


  • User Attivo

    @erecrottod said:

    Ciao Protone, ho letto che hai risolto e hai capito il motivo, ma come hai fatto per far sì che il log non fosse più sommerso dai messaggi di errore?

    Ciao, vedo che hai riaperto un post aperto quasi un anno fa 😄

    In ogni caso, come dicevo in una precedente risposta, l'errore viene generato quando lo script tenta di assegnare una lingua all'utente (leggendo alcuni valori dal suo browser) ma il browser non è presente (ad esempio l'utente potrebbe essere un crawler di Google che tenta di "leggere" le mie pagine).

    Per evitare di generare l'errore devi mettere un controllo nel tuo script del tipo:

    
    //Mi ricavo la lingua impostata nel browser
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lingua=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
    
    if (empty($lingua)) $lingua="en";
    
    

    Parlando in termini comprensibili ho detto allo script che se non riesce a trovare la lingua del browser allora la lingua da impostare di default per le tue pagine deve essere l'inglese (ma puoi ovviamente mettere anche "it" o in qualsiasi altra lingua).

    In questo modo lo script avrà sempre una lingua di default anche quando non sarà in grado di leggerla dall'utente per un qualsiasi motivo.

    Tutto chiaro?
    Chiedi pure se hai bisogno d'aiuto 😉


  • User Newbie

    Ti ringrazio per la celerità della risposta (ammetto: non me l'aspettavo).
    Ho inserito un ternario di controllo

    [PHP]$check_language = (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'it';[/PHP]

    ed ora mi pare che il problema sia risolto!
    :smile5:


  • User Attivo

    Per la celerità ringrazia le email di notifica e il fatto che sto sempre al pc 😄

    Comunque il tuo codice mi pare corretto, buona fortuna 😉


  • User Attivo

    Sarebbe più corretto utilizzare la funzione isset al posto di empty.


  • User Attivo

    Non saprei, certe volte con "isset" si possono generare errori perchè anche una variabile vuota potrebbe essere considerata "settata" (appunto "Is Set").

    Io in questo caso utilizzerei "empty": si va più sul sicuro.

    Empty controlla che la variabile sia vuota o piena... :ciauz:


  • User Attivo

    Con isset controlli che la variabile esiste e che non sia NULL, con empty, se la variabile non esiste, generi un Notice.