2010-08-30 11 views
18

Ho pensato che sarebbe stato semplice ma non riesco a trovare una variabile di array $_SERVER che abbia quello che sto cercando.Cercando di ottenere un URL completo senza nome file in PHP

Diciamo che il mio url è http://example.com/subdirectory/index.php Voglio ottenere tutto tranne il nome file - http://example.com/subdirectory/.

So che potrei farlo facilmente con alcune manipolazioni di stringhe, ma voglio sapere se c'è una variante dell'array _server che mi manca. Ho provato tutti loro a vedere cosa danno e posso ottenere tutto MA quello che sto cercando.

+0

Molto buona domanda. Grazie –

+0

possibile duplicato di [Ottieni l'URL completo in PHP] (http://stackoverflow.com/questions/6768793/get-the-full-url-in-php) –

risposta

36

Non ce ne sarà uno perché non è un attributo utile da tracciare. Se lo script corrente è diverso da index.*, non restituirà l'URL corretto per lo script corrente.

Tuttavia, questo potrebbe ottenere ciò che vuoi:

echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); 

Edit:
Inoltre, a parte l'installazione del php.net in linea strumento di ricerca manuale di Firefox e la sua creazione con una parola chiave di ricerca (che ti consente di aprire la documentazione su globale digitando qualcosa come "php $_server" nella barra degli indirizzi), dovresti anche sapere che var_dump() e print_r() consente di stampare l'intero contenuto di qualsiasi variabile, inclusi array e oggetti. Questo è molto utile per il debug.

+0

Ma attenzione, non si deve assumere che dirname () è uguale al percorso dell'URL. – JackFuchs

+0

Nel mio caso non funziona, ottieni un url come 'http: // magento.p111111.webspaceconfig.de/magento.p111111.webspaceconfig.de /' –

+0

@Stefan: Puoi provare '$ _SERVER ['REQUEST_URI' ] come ha scritto JackFuchs. Forse stai usando una qualche forma di riscrittura degli URL che ha docroot specificato a un livello superiore da dove viene servito il tuo wwwroot. Fammi sapere se per te va bene. –

2

è possibile utilizzare dirname() per ottenere il percorso di un URL.

3

Non riesco a trovare una variabile di $ _SERVER array che abbia quello che sto cercando.

perché è una stringa fittizia, esistente solo nella barra degli indirizzi del browser.
Le parti vengono inviate al server separato.

voglio sapere se c'è un var dell'array _SERVER

che è molto facile sapere. solo print_r($_SERVER); davvero semplice.

So che potrei facilmente farlo con un po 'di manipolazione di stringhe

sì. il codice che devi scrivere è inferiore al testo di questa domanda.

ma con un po 'di magia manuale può essere ridotto a una sola funzione.

8

Non ci sono variabili definite per quello che vuoi.

È possibile utilizzare il codice sottostante per ottenere l'URL di base completa:

// Base folder url 
$myBase = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

ma spero che la maggior parte delle volte non sarà necessario la cosa completa basta usare:

// Base folder server root path 
$myBase = dirname($_SERVER['PHP_SELF']); 

Basta essere attenti se stai usando una sorta di sistema di rotte (mod_rewrite).

14

Nel tuo caso, la manipolazione delle stringhe è la soluzione migliore.

Per esempio:

substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1); 
+0

O substr ($ _ SERVER ['REQUEST_URI'], 0, strrpos ($ _ SERVER ['REQUEST_URI'], '\\') + 1); su un server Windows – Vincent

+1

Non penso Vincent. Dato che stiamo manipolando un URI qui, NON un percorso file Windows! –

Problemi correlati