Saber directorio de un include?

LR

Como bien dice el titulo... como puedo saber el directorio donde se encuentra un include?

Me explico:

Index.php

include("carpeta/contenido.php");

Contenido.php

switch ($a)
{
case 1:
include("contenido/archivo1.php"):
break;
case 2:
include("contenido/archivo2.php");
break;

. . . . .
}

La cuestion es... Archivo1.php, archivo2.php, etc, son formularios que pasan los datos a archivos metidos dentro de unas carpetas que se encuentran en /contenido.

Como puedo "redirigir" el include a esos archivos desde los formularios sin tener que poner la ruta completa?

RESUMEN: En index se me cargan los formularios a traves de contenido.php y quiero que en ese mismo lugar se me carguen los archivos donde mando los datos del formulario.

willsmith
if($_GET[action]){
include "include/".$_GET[action].".php";
}

Files:
step1.php
step2.php

Funcionamiento:

index.php?action=step1
index.php?action=step2
"
"

LR

La idea era no tener que pasar valores por get aunque veo que es la mejor opcion. Si a alguien se le ocurre o sabe alguna forma de no tener que hacerlo por get le estaria muy agradecido xD

willsmith

El script es una idea contructiva para que realices tu script final, apartir de este puedes crear otros por ejemplo usando $_POST tambien se puede realizar con <input type="hidden" name="step1" value="step1">

bLaKnI

Si no quieres morir literalmente, NO HAGAS CASO PARA NADA de lo que se te ha dicho en #2:

Pega un vistazo a esto, y porfavor, tened un poco de conciencia hombres de Dios...

Apartado "Include file injection", del articulo de la Wikipedia:

http://en.wikipedia.org/wiki/Code_injection

La solución es unica y exclusivamente con un parametro y punto.

blablabla.php?localizacion=xxx

Y en tu codigo, sencillamente:

switch(){
case 'xxx1':
...
break;

case 'xxx2':
...
break;

...
}

Dentro los case, simplemente incluye el fichero de turno.

Todo esto en el index mismo.

"Como puedo "redirigir" el include a esos archivos desde los formularios sin tener que poner la ruta completa?"

respuesta: ../, no?

Creo que tienes un buen lio mental.
Debes organizar bien las cosas.

Haz un indice, con un DIV en el que incluiras lo que quieras.
Trabaja con un parametro en ese indice (via GET o POST, pero NO via REQUEST!) que te permita saber de donde vienes o a donde vas y ya está, ve incluyendo en el indice dentro del div lo que toque.
Incluyes una cosa u otra.
Y en caso de que tengas un tercer fichero de procesado "procesa.php", ahí debes hacer un
header("Location: ../index.php?localizacion=xxx"); donde el parametro localizacion tiene el valor que TU ya sabes que indica que se ha procesado algo, y lo usarás para mostrar en el DIV del index.php, lo que sea.

Pillas?

LR

Ahora mismo lo que tengo es el switch para cargar los formularios y en cada formulario paso 1 parametro por get. Con ese parametro y otro switch cargo las paginas a las que apuntan los formularios y estos recogen los datos por post.

La unica duda que tenia era como cargar esas ultimas paginas sin tener que pasar ningun valor por get para poder cargarlas en el mismo lugar que el formulario anterior.

willsmith

se hace un file_exists() para comprobar de que exista, en caso contrario da error

kwic

Échale un vistazo a este:

<?php

$seccion = $GET['seccion'];
$path = $
SERVER['DOCUMENT_ROOT'];

$include = $path . "/" . $seccion . ".php";

if (!$seccion) {
include "news.php";
} else {
if (file_exists ($include)) {
include "$include";
} else {
include "404.php";
}
}

?>

bLaKnI

#8 a pesar de que tu version peca de lo mismo (code injection), es cierto que con el "path" anidado supuestamente evitas el problema de code injection.

Pero has pensado en que sucede si en el GET se coloca "../" y similares? Aunque no sean paths relativos ya que son remotos, juegate algo a que funciona.

Quereis un consejo?

NO USEIS NI GET NI POST PARA PASAR NOMBRES DE FICHEROS.
NO LO HAGAIS.

Poned variables que luego vosotros controleis independientemente en el codigo, pero NUNCA que la variable sea el nombre del fichero para hacer un include "valordevariable_que_vieneporGET".php.
Da igual como lo modifiquéis o protejáis, da igual que anideis paths o lo que sea, os la acabaran colando.

Por GET pon una variable con un valor que tu luego sepas que es, y dentro del switch gestionalo. Y punto.

Ya no lo diré mas yo. Ya me he ganado el cielo. A partir de aquí, jugarosla tanto como queráis.

Saludos. xD

#6, cargar implica llamar a algo.
Algo puede ser llamado via AJAX por ejemplo, o si es un proceso natural, pues por GET via sentencia URL o POST via formularios. Si es via lenguaje servidor, pues en PHP, via include.
No hay mas.
Si no quieres usar GET, debes hacer que el formulario, vaya a la misma pagina via POST y que la url sea algo con parametros en get:

en index.php:

...
...
<form name="lol" action="index.php?variable=valor&variable2=valor&..." method="POST">
...

Pillas? Así haces un POST al indice, con parametros en el GET que te permitiran procesarlos en el switch.

O usas un HIDDEN en el mismo formulario con el valor a procesar en el Switch...

Etc tio. Hay unas cuantas maneras. XD

Usuarios habituales

  • bLaKnI
  • kwic
  • willsmith
  • LR