Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    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!

  2. #2
    tratto da php.net:
    http://php.net/manual/en/reserved.variables.server.php
    $_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.
    Traduzione con google traduttore:
    $ _SERVER È un array che contiene informazioni come header, percorsi e luoghi di script. Le voci in questo array vengono creati dal server web. Non vi è alcuna garanzia che ogni web server fornirà uno di questi; server può omettere alcuni, o fornire altri non elencati qui.
    NB: se il tuo script è molto datato probabile che utilizzi $HTTP_SERVER_VARS invece di $_SERVER ma è deprecato.

    Come fare a conoscere gli elementi che compongono l'array $_SERVER che ci vengono messi a disposizione?
    Codice PHP:
    <?php
    foreach($_SERVER as $key => $value)
          {
          echo 
    '$_SERVER["' $key '"] = ' $value '
    '
    ;
          }
    ?>

    Inoltre molte di queste info (tra cui quella della lingua accettata) costituiscono delle info che il browser vorrà inviare al server (headers request)... e alcuni browser per motivi di privacy non forniscono queste info.
    Su php.net troverai scritto: contains qualcosa: header from the current request

    Di conseguenza non si può far affidamento su questo genere di variabili...

    In particolare, in relazione alla tua specifica richiesta guarda un pò questa funzione (presa dai commenti su php.net)
    Codice PHP:
    <?php
        
    /**
         * Checking HTTP-Header for language
         * needed for various system classes
         * 
         * @return    boolean    true/false 
         */
        
    private function _checkClientLanguage()
        {
    // OCCORRE VERIFICARE CHE ESISTA... E CHE NON SIA VUOTA!!!    
            
    $langcode = (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
            
    $langcode = (!empty($langcode)) ? explode(";"$langcode) : $langcode;
            
    $langcode = (!empty($langcode['0'])) ? explode(","$langcode['0']) : $langcode;
            
    $langcode = (!empty($langcode['0'])) ? explode("-"$langcode['0']) : $langcode;
            return 
    $langcode['0'];
        }
    ?>

  3. #3
    Originariamente inviato da oly1982
    NB: se il tuo script è molto datato probabile che utilizzi $HTTP_SERVER_VARS invece di $_SERVER ma è deprecato.
    Wow che risposta completa
    Beh, posso dirti che l'errore del server web viene generato da questa riga PHP:
    codice:
    $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    Potresti spiegarmi come fare nel caso mio ad evitare di generare quell'errore?
    Grazie ancora!

  4. #4
    Analisi del problema:
    Il notice dice che
    $_SERVER['HTTP_ACCEPT_LANGUAGE'] è (in alcuni casi) Undefined (significa non esistente)

    Soluzione: se la variabile è inesistente (o vuota) imposti una lingua di default (ad esempio 'it')
    Codice PHP:
    $language = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'it'

  5. #5
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    oly1982 ha scritto tutto ciò che vuoi sapere, basta leggere

  6. #6
    Originariamente inviato da oly1982
    Il notice dice che
    $_SERVER['HTTP_ACCEPT_LANGUAGE'] è (in alcuni casi) Undefined (significa non esistente)
    Perchè dici "in alcuni casi"?
    Comunque è molto strano che quella variabile sia vuota perchè la lingua viene SEMPRE mostrata correttamente a video.
    Inoltre, con quel piccolo script che mi hai fornito ho controllato l'array $_SERVER e contiene anche "HTTP_ACCEPT_LANGUAGE", quindi perchè mai dovrebbe essere vuota???

    Molto, molto strano!

    Hai qualche idea?

  7. #7
    ho mancato una parentesi...
    Codice PHP:
    $language = (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'it'

  8. #8
    L'errore non compare sempre per questa regione...
    Originariamente inviato da oly1982
    Inoltre molte di queste info (tra cui quella della lingua accettata) costituiscono delle info che il browser vorrà inviare al server (headers request)... e alcuni browser per motivi di privacy non forniscono queste info.
    Su php.net troverai scritto: contains qualcosa: header from the current request

    Di conseguenza non si può far affidamento su questo genere di variabili...
    Modifica lo script precedente così:
    Codice PHP:
    <?php 
    echo "l'array è composta da ".count($_SERVER)." elementi:
    "
    ;
    foreach(
    $_SERVER as $key => $value
          { 
          echo 
    '$_SERVER["' $key '"] = ' $value '
    '

          } 
    ?>
    Avvia questo script con browser differenti... (io ho testato con chrome e explorer... ma il test si potrebbe farlo con una infinità di browser)...

    Se ci fai caso il numero di elementi che compone l'array VARIA e VARIA anche il tuo $_SERVER["HTTP_ACCEPT_LANGUAGE"] pur presente in entrabi ha un valore parzialmente diverso!!!

    con IE7 => it
    con chrome => it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4

    SINTESI:
    il valore della variabile $_SERVER["HTTP_ACCEPT_LANGUAGE"] (come di molte altre che fanno parte di $_SERVER) lo decide il browser e non si può far affidamento sul suo contenuto!!

  9. #9
    Perfetto! Grazie mille!

    Credo di essere arrivato alla soluzione.
    In pratica l'indirizzo IP che mi genera l'errore è un bot di Google che quindi non può fornire al mio script il tipo di lingua utilizzato!

    Ecco tutto

    Grazie ancora, ciao

  10. #10
    Originariamente inviato da marcsellier
    Perfetto! Grazie mille!

    Credo di essere arrivato alla soluzione.
    In pratica l'indirizzo IP che mi genera l'errore è un bot di Google che quindi non può fornire al mio script il tipo di lingua utilizzato!

    Ecco tutto

    Grazie ancora, ciao
    ... è solo uno dei casi in cui $_SERVER["HTTP_ACCEPT_LANGUAGE"] non sarà valorizzato...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.