[PHP] selezione automatica lingua

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Ciao, ho trovato, proprio su questo sito, questo codice per la selezione automatica della lingua.
Se ho capito bene la selezione della lingua avviene in base alla lingua che l'utente ha impostato sul browser. Per tanto se l'utente ha il browser impostato il lingua inglese verrà visualizzata la parte in inglese del sito e cosi via...

Ora però questo codice mi restituisce 2 errori. Come posso risolvere? A seguire trovate il codice e gli errori che vengono rilevati.

Grazie!

PHP:
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

$lang_config = array(
    "it" => "it/",
    "en" => "en/",  
    "default" => "it/");

if(array_key_exists($lang, $lang_config))
{
    $location = $lang_config[$lang];
}
else
{
    $location = $lang_config['default'];
}

header('Location: ' . $location);
?>


PHP Notice: Undefined index: HTTP_ACCEPT_LANGUAGE in /home/samxxxx/public_html/ilrxxxx/index.php on line 2

PHP Warning: array_key_exists(): The first argument should be either a string or an integer in /home/samxxxx/public_html/ilrxxxx/index.php on line 9
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
27
Ciao.
Copia e incolla il seguente codice e posta qui l'output.
PHP:
<?php

foreach ($_SERVER as $key => $value) {
    echo "<br>".$key.": ".$value;
}
 ?>
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
PATH: /usr/local/bin:/usr/bin:/bin
TEMP: /tmp
TMP: /tmp
TMPDIR: /tmp
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
HTTP_ACCEPT_ENCODING: gzip, deflate, sdch
HTTP_ACCEPT_LANGUAGE: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
HTTP_CONNECTION: keep-alive
CONTENT_LENGTH: 0
HTTP_HOST: samuelesantoni.com
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
HTTP_UPGRADE_INSECURE_REQUESTS: 1
HTTP_DNT: 1
UNIQUE_ID: [email protected]@dLDIAAAAW
SERVER_SIGNATURE:
SERVER_SOFTWARE: Apache
SERVER_NAME: sxxxxxxxx.com
SERVER_ADDR: 80.88.87.239
SERVER_PORT: 80
REMOTE_ADDR: 95.237.29.92
DOCUMENT_ROOT: /home/samxxxx/public_html
REQUEST_SCHEME: http
CONTEXT_PREFIX:
CONTEXT_DOCUMENT_ROOT: /home/samxxxx/public_html
SERVER_ADMIN: [email protected]
SCRIPT_FILENAME: /home/samxxxx/public_html/ilxxxx/test.php
REMOTE_PORT: 52545
SERVER_PROTOCOL: HTTP/1.1
REQUEST_METHOD: GET
QUERY_STRING:
REQUEST_URI: /ilrxxxx/test.php
SCRIPT_NAME: /ilrxxxx/test.php
PHP_SELF: /ilriccio/test.php
REQUEST_TIME_FLOAT: 1476117277.2111
REQUEST_TIME: 1476117277
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
27
Il tuo problema è molto strano.
Prova a eseguire il seguente codice e vedi cosa stampa.
PHP:
echo array_key_exists("HTTP_ACCEPT_LANGUAGE", $_SERVER)?"trovato":"non trovato";
 

marino51

Utente Attivo
28 Feb 2013
3.036
192
63
Lombardia
PHP:
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

sostituisci con

$lang = empty( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? "default" : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
27
@marino51 Sarebbe meglio capire prima quale sia il problema prima di adottare questa soluzione. In ogni caso, darebbe comunque errore poiché non viene trovata quella chiave all'interno dell'array, per cui sarebbe più corretta una funzione del tipo array_key_exists() o isset().

@eleumas Il problema è che non viene trovato l'elemento con chiave HTTP_ACCEPT_LANGUAGE all'interno dell'array $_SERVER. Tuttavia, quando stampi a video tutto il contenuto di $_SERVER, ecco che l'elemento con chiave HTTP_ACCEPT_LANGUAGE appare (alla settima riga: HTTP_ACCEPT_LANGUAGE: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4). E ciò è molto strano (questo è il motivo per cui ti sto facendo stampare a video determinati output).
 

marino51

Utente Attivo
28 Feb 2013
3.036
192
63
Lombardia
Sarebbe meglio capire prima quale sia il problema prima di adottare questa soluzione. In ogni caso, darebbe comunque errore poiché non viene trovata quella chiave all'interno dell'array, per cui sarebbe più corretta una funzione del tipo array_key_exists() o isset().
quell'elemento non è sempre presente (non so perché)
empty fa anche le veci di isset ed in questo caso è comodo usarlo, probabilmente risolvendo il problema
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
questo è quello che esce (se non ho sbagliato qualcosa):
echo array_key_exists("HTTP_ACCEPT_LANGUAGE", $_SERVER)?"trovato":"non trovato";

Grazie a tutti per l'aiuto che mi state dando.
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Si esatto...avessi inserito i tag php magari il tuo codice sarebbe stato eseguito correttamente :p
Comunque il risultato del tuo codice è: trovato.

E' buon segno?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
una curiosità, stavo guardando la discussione
ho caricato in remoto lo script di adeknite
PHP:
<?php
foreach ($_SERVER as $key => $value) {
    echo "<br>".$key.": ".$value;
}
 ?>
output
......
HTTP_CACHE_CONTROL: max-age=0
HTTP_CONNECTION: keep-alive
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_COOKIE: __utma=128218271.61801269.1443201390.1476261246.1476263978.868; __utmz=128218271.1447253911.121.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); block=set; PHPSESSID=2h6p28qruqje4u7m6bjo5uv180; __utmc=128218271
HTTP_HOST: www.borgo-italia.it
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 5.1; rv:48.0) Gecko/20100101 Firefox/48.0
HTTP_UPGRADE_INSECURE_REQUESTS: 1
......
tra gli HTTP non c'è HTTP_ACCEPT_LANGUAGE
caricando
PHP:
<?php
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
?>
uotput
???
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
qualcosa non va...onestamente mi sono un po' perso...ma mi sembra chiaro che ci sia un problema.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
27
@borgo italia Evidentemente il server in cui hai lanciato quel codice non fornisce l'informazione sulla lingua (HTTP_ACCEPT_LANGUAGE appunto), ma c'è congruenza tra le operazioni da te effettuate poiché non te la trova qualunque sia il codice che scrivi. Ciò però non accade con @eleumas, poiché nonostante la variabile risulti presente facendo un var_dump di $_SERVER, se va a richiamarla attraverso $_SERVER['HTTP_ACCEPT_LANGUAGE'], gli viene detto di aver fornito un indice indefinito, il che significa che non è presente.

A sto punto, @eleumas, ti chiedo: il codice che hai scritto fino a ora è stato eseguito sempre sullo stesso server in cui hai ricevuto l'errore?
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Si. Il codice è stato sempre eseguito sullo stesso server. L'ho provato su siti diversi e ovunque mi da lo stesso errore. Potrebbe dipendere dalla versione o modulo di PHP in uso?
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Selezione da menu a discesa con 2 variabili PHP 0
M [PHP] Selezione record da elenco PHP 24
Tommy03 [PHP] Errore query selezione avg PHP 0
W [PHP] Come far funzionare un form di selezione PHP 12
U [PHP] Selezione con menu a tendina e recupero selezione PHP 5
S [PHP] Selezione dati con riferimento ad altra colonna tabella PHP 22
L Problema con lettura dati da selezione multipla in php PHP 8
M selezione con checkbox php mysql PHP 14
SolidSnake4 cancella modifca con php con selezione PHP 14
C [php] caselle di selezione PHP 1
G Invio form con PHP PHP 2
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2

Discussioni simili