2010-11-18 10 views
5

decir que tengo una URL como esta:argumentos PHP llevan desde ruta URL

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

¿Hay una manera sencilla en PHP (no se puede utilizar HTAccess) para tomar esa URL y extraer board1, sub-forum, topics y 123 para que pueda usarlos en una base de datos por ejemplo? ¿Hay alguna función incorporada o tendré que escribir la mía?

Gracias,

James

Respuesta

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

Si su entorno pasa a incluir la parte cadena de consulta en el valor anterior, he aquí una solución ordenada:

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

Gracias :-) debería haberlo pensado yo mismo - ¡muy simple! – Bojangles

+1

¿Qué pasa con la cadena de consulta? – Gumbo

+0

@Gumbo No era un requisito. Fusionar esta matriz con $ _GET tampoco es difícil. – pestaa

1

Si ya ha configurado su servidor web para enviar esas solicitudes a su archivo PHP particular, puede usar parse_url y explode para obtener y luego dividir el requ Ested ruta URI en sus segmentos:

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

Puedes, pero sin redirigir peticiones de su servidor web simplemente devolverá un error 404 para las rutas no existentes.

Sin embargo, puede usar direcciones URL como http://your.site.com/index.php/foo/bar/baz y luego dividir la url en partes como @pestaa dijo que luego puede analizar los valores de los parámetros.

+0

Bueno, las rutas son virtuales, se toman de una base de datos y se construyen. ¿Estás diciendo que navegar a esa ruta devolverá un 404, pero aún ejecutará el PHP? – Bojangles

+0

No. Quiero decir, a menos que su servidor web sepa que todas las direcciones URL deben redirigirse a una secuencia de comandos PHP, buscará la ruta correspondiente en el sistema de archivos y devolverá un error 404 cuando no exista. –

+0

Ahh ok gracias por eso. Considero que la solución es usar archivos HTAccess? I * may * puede editar las reglas de mod_rewrite, pero no cuente con ello. – Bojangles

2

Esto está tomado de mi MVC http://www.phpclasses.org/package/6363-PHP-Implements-the-MVC-design-pattern.html

El enlace no está actualizado al minuto, Acabo de actualizar de modo que no tiene las cosas MVC, y esto puede ser llamado con getLoadDetails ($ _ URL) ; amd $ _URL será exactamente igual a $ _GET además de obtener los datos de la ruta de la carpeta.

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); 
      } 
    } 

tengo una pregunta, si no puede utilizar HTACCESS ¿cómo se planea en hacer frente a la ruta de la carpeta por favor, no me diga que su sistema va a crear las rutas de carpeta y archivo de índice para cada dirección URL que puede mandar al traste su velocidad de servidor y su Host lo odiarán por ello.

+0

¡No, eso sería una locura! Crear todos los directorios es simplemente una locura. Como mencioné en otros comentarios, usaré HTAccess y posiblemente mod_rewrite. Gracias por tu ayuda. – Bojangles

+0

bien, entonces solo pensé que podría pedir jajaja – Barkermn01