- PHP 5.3.8 in esecuzione su Linux-get_browser() restituisce FALSE
Per iniziare, abbiamo risolto questo problema al punto in cui la funzione restituisce i valori attesi. Tuttavia ci sono ancora molte domande senza risposta che ho, e la "soluzione" è più di un hack-around che altro.
Ho trascorso la maggior parte della giornata su questo argomento, quindi abbi pazienza con me mentre spiego cosa è stato fatto. Per iniziare, il problema è che il valore restituito di get_browser()
è FALSE
, che non è un valore di ritorno documentato. Questo mi porta ad assumere che FALSE
restituito significhi una sorta di stato di errore all'interno della funzione.
Il codice di prova, dopo molte iterazioni, è diventato solo un semplice var_dump(get_browser($agent, true))
. Ho eseguito test sia con il passaggio diretto della stringa user-agent, sia senza il passaggio di argomenti, ad es. var_dump(get_browser())
, che avevano tutti gli stessi valori di ritorno.
Ciò che è stato provato/verificato, con nessun cambiamento nel valore di ritorno:
Browscap.ini:
- avere l'ultima versione, ha anche testato alcune versioni precedenti
Autorizzazioni:
bowscap.ini - autorizzazioni iniziali erano 644, ma ho provato di tutto 644-777
Directory Browscap.ini contenente - autorizzazioni iniziali erano 755, tentarono 777 così
verificato che PHP può accedere al file e directory con altre funzioni come
file()
User Agent
provato passando una stringa agente manuale
provato passando $ _SERVER [ 'HTTP_USER_AGENT']
verificato la mia stringa user agent con un amico in una terra lontana -
get_browser()
restituito valori come previsto .
php.ini
I punti di impostazione BrowsCap alla posizione corretta
verificato di nuovo con
echo count(file(ini_get('browscap')));
log di errore
- Controllato PHP & Apache err o registra per qualsiasi menzione di 'browscap' o qualsiasi cosa anche strettamente correlata - niente di straordinario.
Struttura del file
Questo è dove ho il sospetto che l'errore viene da. browscap.ini vive in /var/php/
, che ha le autorizzazioni appropriate come sopra indicato. Il mio pensiero era che forse PHP non poteva accedere a questa directory o qualcosa del genere. Tuttavia, questa directory è anche il luogo in cui sono archiviate le sessioni, quindi diventa meno probabile.
la "soluzione"
Che ha risolto il problema stava muovendo Browscap.ini per la directory web pubblico. Sono curioso di sapere perché questo è il caso, soprattutto dato il valore di ritorno non documentato. La "soluzione" funziona, ma non è la soluzione che pensavo avrei trovato ...
get_browser()
ha requisiti di autorizzazioni speciali o qualcosa del genere? file()
potrebbe accedere alla directory e file correttamente, ma get_browser()
non potrebbe (presumibilmente). Ho praticamente tirato i miei capelli su questo tema e mi piacerebbe avere qualche soluzione!
Grazie per la lettura!
A cosa stai usando questa funzione? L'intestazione user-agent e il suo riconoscimento non sono esattamente affidabili. Probabilmente avresti miglior fortuna testando le funzionalità del browser con javascript e inviando queste informazioni al server. Questo tuttavia non dovrebbe essere necessario neanche, dal momento che normalmente gestirai le varianze al 100% lato client. – dqhendricks
@dqhendricks Questo è per la manutenzione su una base di codice esistente (abbastanza grande). I valori di questa chiamata vengono utilizzati in tutto il sito sia nel preelaborazione che nel contenuto di pubblicazione. Sono sempre aperto a nuovi/migliori modi di fare le cose, ma probabilmente sarebbe troppo lavoro per cambiare l'intero sistema nel suo stato attuale. – orourkek
vedo. bene buona fortuna allora. – dqhendricks