2009-04-04 11 views
12

Questo è strano, ma per qualche motivo il $_SERVER["SCRIPT_URI"] non restituirà il nome del dominio quando sono in child/sub-pages ma funzionerà solo sulla pagina principale. Non sono sicuro se è dovuto allo script (WordPress) o all'host, ma per favore puoi suggerire una soluzione affidabile per recuperare il nome di dominio con PHP?

+0

Probabilmente state pensando a '$ _SERVER ['REQUEST_URI']' – Kzqai

+0

@Kzqai 'SCRIPT_URI' è documentato nei documenti di Apache come [una variabile di ambiente gestita da mod_rewrite] (http://httpd.apache.org/ docs/2.2/it/mod/mod_rewrite.html # EnvVar) - così da esso _should_ essere presente nel superglobale '$ _SERVER'. Tuttavia, come l'OP ha trovato, non è sempre impostato (per qualsiasi motivo). – MrWhite

risposta

22

Se avete bisogno del nome di dominio, utilizzare:

$_SERVER['HTTP_HOST'] 
+0

Oh, questo ha funzionato bene !! anche con la riscrittura dell'url. Grazie –

2

Ciò potrebbe essere dovuto alla riscrittura dell'URL, puoi provare $ _SERVER ['REQUEST_URI'] invece se desideri il percorso che è stato chiamato nell'URL.

+0

Se si sceglie questo metodo, tenere presente che può essere influenzato dalle intestazioni della richiesta. –

+0

Infatti. L'url riscrive. Ma non voglio il percorso, voglio solo controllare il nome del dominio. In ogni modo? –

6

A seconda di ciò che si vuole, mi piacerebbe utilizzare una delle seguenti opzioni:

  1. $ _SERVER [ 'PHP_SELF'] per lo script posizione del file
  2. $ _SERVER [ 'SERVER_NAME'] per il nome host

From the php docs

MODIFICA: Forse PHP_SELF non è il migliore. Vedi i commenti.

+0

Come noto, l'utilizzo di $ _SERVER ['PHP_SELF'] è un rischio assoluto. http://is.gd/qPcb – sepehr

+1

Probabilmente dovresti usare '$ _SERVER ['SCRIPT_NAME']' invece di PHP_SELF. –

18

In caso di dubbio

var_dump($_SERVER); 
+0

+1 Consigli migliori! –

0

var_dump($_SERVER) e vedere che cosa suite vostre esigenze.

P.S. Facendo uso di unsanitized $_SERVER["PHP_SELF"] potrebbe essere un security risk.

-3

Se il browser formatta JSON documenti bene e nessuna uscita ha avuto luogo, inserendo la seguente si tradurrà in qualcosa di più leggibile rispetto var_dump:

header('Content-Type: application/json');die(json_encode($_SERVER)); 

phpinfo() fornirà anche un elenco di tutte le $_SERVER valori e così molto di piu!

0

Inoltre, SCRIPT_URI non esiste, la sintassi corretta è REQUEST_URI:

echo $_SERVER["REQUEST_URI"]; Esso restituisce l'intero percorso senza l'host e di dominio.

+0

'SCRIPT_URI' non è necessariamente sbagliato. È documentato nei documenti di Apache come [una variabile di ambiente gestita da mod_rewrite] (http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#EnvVar). Tuttavia, come l'OP ha trovato, non è sempre impostato (per qualsiasi motivo). Ma ... quando è impostato, non è lo stesso di "REQUEST_URI". "SCRIPT_URI" contiene un URL_sol'_, mentre "REQUEST_URI" è un URL relativo alla radice ("senza l'host e il dominio"). – MrWhite

0

stavo usando $ _SERVER [SCRIPT_URI] sul mio sito http://www.a2zidx.com e una serie di sottodirectory come http://howto.a2zidx.com

ho avuto nessun problema con questo per anni e ha ottenuto oggi un errore su una serie di siti dove $ _SERVER [SCRIPT_URI] non è stato assegnato. Dopo aver contattato il mio isp, sostengono di non aver apportato alcuna modifica, ma $ _SERVER [SCRIPT_URI] non funziona più. getenv ('SCRIPT_URI') non fallisce ma restituisce una stringa nulla. Perché questo dovrebbe accadere improvvisamente dopo così tanti anni che non lo so. Ho finito per chiamare una funzione per passare attraverso varie opzioni per estrarre il nome del file che è quello che volevo. Spero che questo copra tutto. Ho avuto problemi tra cui la funzione, ma controllato "SCRIPT_NAME" "PHP_SELF" "SCRIPT_FILENAME "SCRIPT_URI"

Speranza la sua aiuta.

Se qualcuno sa perché SCRIPT_URI improvvisamente smetterebbe di funzionare mi piacerebbe sapere. Il server sta attualmente eseguendo Apache 2.4.

+0

I link assomigliano molto allo spam, per favore considera di sostituirli con quelli generici come example.com – Norrius

Problemi correlati