[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
30
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: V-vDHVBYV@8ACo@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
30
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.205
207
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
30
@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.205
207
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.046
150
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
30
@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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1

Discussioni simili