php - que - Incluir archivos de padres o de otro directorio
que es un required en php (9)
Aquí hay algo que escribí con ese problema en mente:
<?
function absolute_include($file)
{
/*
$file is the file url relative to the root of your site.
Yourdomain.com/folder/file.inc would be passed as
"folder/file.inc"
*/
$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
if($folder_depth == false)
$folder_depth = 1;
include(str_repeat("../", $folder_depth - 1) . $file);
}
?>
Espero eso ayude.
Necesito incluir un archivo del directorio padre y otros subdirectorios en un subdirectorio. Lo he hecho antes simplemente usando include (''/ rootdirectory / file.php''); pero ahora no parece funcionar.
Me pregunto cómo puedo hacer esto, gracias.
Aquí está mi línea exacta:
include(''/forums/groups.php'');
Me está dando este error (la página aún se ejecuta):
Advertencia: include (/forums/groups.php) [function.include]: no se pudo abrir la secuencia: ningún archivo o directorio en C: / xampp / htdocs / forums / blog / posts.php en línea
Advertencia: include () [function.include]: Error al abrir ''/forums/groups.php'' para su inclusión (include_path = ''. C: / xampp / php / PEAR'') en C: / xampp / htdocs / forums / blog / posts.php en la línea 3
Cualquier ruta que comience con una barra inclinada será una ruta absoluta. Desde la carpeta raíz del servidor y no la carpeta raíz de la raíz de su documento. Puede usar ../
para ir al directorio principal.
Depende de dónde se encuentra el archivo que está tratando de incluir.
Ejemplo:
/rootdir/pages/file.php
/someotherDir/index.php
Si escribió lo siguiente en index.php: include(''/rootdir/pages/file.php'');
sería un error porque trataría de obtener:
/someotherDir/rootdir/pages/file.php
Lo que por supuesto no existe ...
Por lo tanto, debería usar include(''../rootdir/pages/file.php'');
En términos simples, y practicidad, veo esto como un viejo truco / cosa de DOS. Whoa! ¿Qué fue eso? DOS? ¡Nunca lo oí!
".." lo respalda una vez en el subdirectorio actual a una carpeta / directorio superior, y .. ingrese dos veces las veces que lo respalda. También respalda 2 carpetas principales superiores. Continúe agregando el " .. enter " una detrás de la otra y pronto se encontrará en el nivel superior del directorio.
En cuanto a los principiantes para entender esto mejor, considere esto (en términos de la PC de la casa o "C: / unidad" si usted sabe lo que eso significa, en lugar de los servidores web / host "directorio raíz"). Mientras estás en eso, considera que tu sitio web existe en algún lugar del disco duro de tu computadora personal, enterrado en alguna carpeta debajo de la unidad C: /. Por último, puede pensar que como "..." está de vuelta un directorio y "/" reenvía un directorio / carpeta.
¡Ahora! Si está utilizando el símbolo del sistema y se encuentra dentro de la carpeta " myDocuments " de su PC, debe retroceder en esa carpeta para acercarse al directorio superior "C: /" escribiendo " ../ ". Si desea acceder a un archivo que se encuentra en el directorio de viudas mientras aún se encuentra en la carpeta myDocuments, teóricamente escriba .../ windows ; en realidad, en el símbolo del sistema de DOS, simplemente debe escribir ... , pero lo estoy configurando para la web. El / redirige a otro directorio de forma natural.
El uso de " myDocuments " permite pretender que ha creado 2 carpetas dentro de él llamadas "PHP1" y "PHP2", en tal que ahora tenemos las carpetas:
- C: / myDocuments / PHP1
- C: / myDocuments / PHP2
En PHP1 colocas un archivo llamado index.php. y en la carpeta PHP2 colocaste un archivo llamado Found.php. ahora se convierte en:
- C: / myDocuments / PHP1 / index.php
- C: / myDocuments / PHP2 / found.php
Dentro del archivo C: / myDocuments / PHP1 / index.php , necesitarás editar y escribir algo como:
<?php include (''../php2/found.php'')?>
El ../ es posicional, por lo tanto, considera su ubicación de archivo actual "C: / myDocuments / PHP1 / index.php" y es una directiva que le indica que abandone el directorio PHP1 e ingrese o avance al directorio PHP2 para buscar el archivo .php . ¿Pero lo lee? Ver mis pensamientos sobre problemas de tiro a continuación.
¡Ahora! supongamos que tiene 1 carpeta PHP1 y una subcarpeta PHP2:
- C: / myDocuments / PHP1 / PHP2
usted simplemente haría referencia / código
<?php include(''/PHP2/found.php'') ?>
como PHP2 existe como un subdirectorio, debajo o dentro del directorio PHP1.
Si lo anterior no funciona, puede tener algo que ver con el acceso / htaccess o permiso del directorio o un error tipográfico. Para mejorar esto ... entrar en problemas al disparar ... Si el archivo "found.php" tiene errores / errores tipográficos dentro de él, se bloqueará al renderizar en el error, tal podría ser el motivo (require / require_once) que usted es experimentando la ilusión de que no está cambiando directorios ni accediendo al archivo. Al pensar por última vez en el asunto, es posible que necesite crear instancias de sus funciones o referencias para poder usar el incluido / requiera "lo que sea" creando una nueva variable u objeto como
$newObject = new nameobject("origianlThingy");
Recuerde, solo porque esté incluyendo / requiriendo algo, a veces significa eso , está incluido / es necesario ejecutarlo, pero podría necesitar recrearse para hacerlo activo o acceder a él. Nuevo seguramente volverá a crear una instancia de "si es legible" y lo pondrá a disposición dentro del documento actual conservando el original. Sin embargo, debe hacer referencia a la variable recién creada $ newObject en todas las instancias ... si es global.
Para poner esto en perspectiva de alguna cuenta de host web; el host web es un disco duro increíblemente grande (como el de tu PC) y tu dominio no es más que una carpeta que te han asignado. Su carpeta se llama raíz. Dentro de esa carpeta puedes hacer todo lo que se te permite hacer. su " una de las muchas maneras " de moverse entre directorios / carpetas es usar el ../
sin embargo, muchas veces para alejarse de su actual en referencia a la posición de la carpeta que desea encontrar.
En mi estado de embriaguez, me doy cuenta de que sé demasiado para estar cuerda y no lo suficiente como para volverme loco ".
Me inspiré en Frank y agregué algo así en mi archivo "settings.php" que luego se incluye en todas las páginas cuando hay un enlace:
"settings.php"
$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
$slash="";
for ($i=1;$i<=($folder_depth-2);++$i){
$slash= $slash."../";
}
en mi header.php para ser incluido en todas las páginas:
a href = .... php echo $ slash.''index.php ''....
parece que funciona tanto en el entorno local y alojado ....
(NOTA: soy un principiante absoluto)
Si su servidor no está resolviendo el archivo, use el directorio padre
include ''../somefilein_parent.php''
prueba esto:
include __DIR__ . "/../somefilein_parent.php";
Tenía el mismo problema resuelto anteriormente así:
include (''/../ includes / config.php''); // nota ''/'' que aparece antes de ''../includes/config.php''
el directorio raíz (en PHP) es el directorio del archivo al que se hace ping. Por ejemplo, voy a http://localhost/directory/to/file/index.php , el directorio raíz será "/ dictory / to / file", ya que es el que ha realizado una solicitud web.
include()
y sus parientes toman las rutas del sistema de archivos, no las rutas web relativas a la raíz del documento. Para obtener el directorio principal, use ../
include(''../somefilein_parent.php'');
include(''../../somefile_2levels_up.php'');
Si comienza con un /
, se usará una ruta de archivo del sistema absoluta:
// Full absolute path...
include(''/home/username/sites/project/include/config.php'');