$_SERVER['PHP_SELF']
$_SERVER['PHP_SELF'] postato il 11/11/2012 02:32:02 nel forum programmazione, open source e hosting e modificato da ilgrandeinverno il 11/11/2012 02:34:16
Ecco alla prima grana incontrata durante il cambio di servizio hosting... (Aruba -> Netsons).
Se nell'ipotetico script collocato su "www.nomesito.it/sito/directory/pagina.php" uso la variabile $_SERVER['PHP_SELF'], la variabile assume due valori diversi:
Su aruba valorizza: -> pagina.php
Su netsons valorizza: -> /sito/directory/pagina.php
Con ovvie, sgradevoli, conseguenze in termini di redirect errati se uso la variabile all'interno di un link o come destinazione di un form. In effetti il comportamento anomalo sembrerebbe quello di aruba, dato che di default dovrebbe restituire anche il path e non solo il filename.
Inoltre su aruba vengono passati anche gli eventuali parametri GET che seguono il nome dello script, mentre su netsons sembra sia conveniente passarli esplicitamente ad ogni invio tramite form come valori input hidden, perché PHP_SELF non se li porta dietro.
Qualcuno sa dirmi se di conseguenza é possibile modificare la valorizzazione della variabile dal php.ini?
Viceversa ho come uniche soluzioni usare esplicitamente il nome della pagina, oppure fare una sostituzione massiva con una funzioncina che "esploda" il valore e mi restituisca solo il filename senza il path?
ps: insulti e ortaggi per aver "approfittato" dell'anomalia di aruba, in privato, grazie.... -.-
Pagine → 1
11/11/2012 14:08:40
L'implementazione del contenuto della variabile $_SERVER è delegata completamente al webserver, non è modificabile da php.ini.
Sulla pagina della documentazione ufficiale di PHP è scritto di non affidarsi ciecamente ai contenuti di $_SERVER, proprio perchè dipende dal server web che c'è dietro.
Beh...sinceramente la soluzione più giusta e pulita sarebbe iniziare a utilizzare la variabile nel modo utilizzato più comunemente, cioè quello fornito da netsons. Cambiando cioè tutti i punti in cui viene usata. Magari anche usando una funzione che prepara l'url in modo corretto, così devi farlo una sola volta e devi solo sostituire tutti i punti in cui viene usata PHP_SELF con la nuova funzione.
è giusto che i valori GET non siano riportati in PHP_SELF, perchè non si possono fare assunzioni su dove verrà usata la variabile. Per esempio se usi PHP_SELF in un form che ha method="get" i valori get passati in PHP_SELF saranno completamente scartati al momento dell'invio del form. Devi riportarli tu, solo quando ti servono.
Prova a vedere se netsons implementa qualche variabile equivalente in $_SERVER. Ma dipendere dall'implementazione specifica di un host non è una cosa bellissima.
12/11/2012 16:52:26
leoblacksoul ha scritto:
Prova a vedere se netsons implementa qualche variabile equivalente in $_SERVER. Ma dipendere dall'implementazione specifica di un host non è una cosa bellissima.
Penso anch'io. Credi che possa essere una buona soluzione (alternativa al nominare la pagina esplicitamente col nome del file .php) una funzione che fa l'explode di $_SERVER['PHP_SELF'] e restituisce l'ultimo elemento = nome dello script senza path?
13/11/2012 12:05:07
dipende dalla struttura del tuo sito. Io uso sempre URL relativi alla root, quindi il path mi serve o uso PHP_SELF direttamente senza rielaborarla.
Se tu usi URL relativi alla tua pagina specifica dovrai metterti a rielaborare ogni volta PHP_SELF in base alla destinazione prescelta.
Se usi la riscrittura degli url...boh dipende XD
13/11/2012 17:46:48
leoblacksoul ha scritto: dipende dalla struttura del tuo sito. Io uso sempre URL relativi alla root, quindi il path mi serve o uso PHP_SELF direttamente senza rielaborarla.
Se tu usi URL relativi alla tua pagina specifica dovrai metterti a rielaborare ogni volta PHP_SELF in base alla destinazione prescelta.
Se usi la riscrittura degli url...boh dipende XD
Ho già rintracciato, per mia fortuna, le pagine che contengono la famigerata variabile (sia lode al comando grep di linux... se no ci stavo fino a dopo il 21/12/2012). Nella maggior parte dei casi credo di potermela cavare con un semplice Find & Replace
function QUESTOQUA() {
return basename($_SERVER['SCRIPT_NAME']);
} // END function QUESTOQUA()
E dove ho avuto la brillante idea di mettere
<form action="<?=$_SERVER['PHP_SELF'];?>" .. >
sostituisco con:
<form action="<?=QUESTOQUA();?>" .. >
Eventualmente aggiungendo i parametri come input hidden nei punti richiesti.
13/11/2012 18:58:33
Non sono sicuro del perchè ti serva solo il basename nel campo action dei form....ma se dici che ti funziona ok
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Storie di Agarthi ↗
New Orleans ↗
Fallen Gods ↗
Cafuné ↗
The Coven ↗