2010-11-18 9 views
5

dire che ho un URL come questo:PHP take argomenti dal sentiero URL

http://www.mysite.com/forum/board1/sub-forum/topics/123

C'è un modo semplice in PHP (non è possibile utilizzare HTAccess) di prendere tale URL ed estrarre board1, sub-forum, topics e 123 quindi posso usarli in un database per esempio? Ci sono funzioni incorporate o dovrò scrivere le mie?

Grazie,

James

risposta

10
explode('/', getenv('REQUEST_URI')); 

Se l'ambiente capita di includere la parte di stringa di query nel valore sopra, ecco una soluzione pulita:

explode('/', strtok(getenv('REQUEST_URI'), '?')); 
+1

Grazie :-) avrei dovuto pensarci anch'io - molto semplice! – Bojangles

+1

E la stringa di query? – Gumbo

+0

@ Gumbo Non era un requisito. Anche l'unione di questo array con $ _GET non è difficile. – pestaa

1

Se è già stato configurato il tuo server web per inviare tali richieste al tuo particolare file PHP, puoi usare parse_url e explode per ottenere e quindi dividere il requ INTERESSATE URI percorso nei suoi segmenti:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$pathSegments = explode('/', $_SERVER['REQUEST_URI_PATH']); 
3

È possibile, ma senza reindirizzando le richieste il server web sarà solo restituirà un errore 404 per i percorsi inesistenti.

Tuttavia, è possibile utilizzare URL come http://your.site.com/index.php/foo/bar/baz e quindi suddividere l'URL in parti come @pestaa ha detto che è possibile quindi analizzare i valori dei parametri.

+0

Bene, i percorsi sono virtuali: sono presi da un database e costruiti. Stai dicendo che navigare su quel percorso restituirà un 404, ma eseguirai ancora il PHP? – Bojangles

+0

No. Voglio dire, a meno che il tuo server web non sappia che tutti gli URL dovrebbero essere reindirizzati a uno script PHP, guarderà il percorso corrispondente sul filesystem e restituirà un errore 404 quando non esiste. –

+0

Ahh ok grazie per quello. Suppongo che la soluzione sia usare i file HTAccess? Potrei * essere in grado di modificare le regole mod_rewrite, ma non contarci. – Bojangles

2

questo è preso dal mio MVC http://www.phpclasses.org/package/6363-PHP-Implements-the-MVC-design-pattern.html

Il collegamento è superata al minuto, ho appena aggiornato in modo non ha la roba MVC in, e questo può essere chiamato con getLoadDetails ($ _ URL) ; amd $ _URL sarà esattamente uguale a $ _GET diverso da quello che ottiene i dati dal percorso della cartella.

function getLoadDetails(&$_URL){ 
      $filePath = $_SERVER['REQUEST_URI']; 
      $filePath = explode("/", $filePath); 

      for($i = 0; $i < count($filePath); $i++){ 
        $key = $filePath[$i]; 
        $i++; 
        $val = $filePath[$i]; 
        $keyName = urldecode($key); 
        $_URL[$keyName] = urldecode($val); 
      } 
    } 

io ho una domanda, se non puoi utilizzare HTACCESS come si pensa di affrontare il percorso della cartella prego non dirmi il sistema sta andando a creare i percorsi delle cartelle e dei file di indice per ogni URL che rovinerà il tuo server Speed ​​e il tuo Host ti odieranno per questo.

+0

No no - sarebbe il più folle! Creare tutte le directory è semplicemente folle. Come ho menzionato in altri commenti, userò HTAccess e possibilmente mod_rewrite. Grazie per l'aiuto. – Bojangles

+0

ok allora ho solo chiesto a lol – Barkermn01