2012-08-09 35 views
14

He pasado días investigando en Internet y no encuentro la respuesta que entienda y pueda implementar.Cómo configurar la carpeta raíz para PHP incluye archivos

Tengo el sitio web en el que quiero usar los archivos include_once y puedo ver el sitio web correctamente tanto en el servidor local como en el servidor real.

He usado $_SERVER['DOCUMENT_ROOT'] anteriormente pero no funciona en el servidor local, por lo que me resulta difícil actualizar y hacer los cambios en el sitio web.

Lo que quiero hacer es crear algún tipo de archivo config.php en la que puedo decirle que la carpeta raíz se llama ya sea htdocs o public_html y "comenzar" en busca de archivos de allí.

¿O hay alguna otra manera en que pueda incluir las rutas de acceso al trabajo?

He visto respuestas con p. Ej. dirname(__FILE__), __DIR__, etc. pero nunca explicaron cómo funcionaría, dónde escribirlo en el código, etc. Estoy un poco cansado y enfermo de encontrar parte de la respuesta y luego correr en círculos solo intento "llenar" en las brechas. No soy un experto en PHP, solo trato de hacer mi vida un poco más fácil al usarla.

+0

¿Está utilizando cualquier marco o es su proyecto php prima? –

Respuesta

28
.

dirname(__FILE__) y __DIR__ ambos mismos y __DIR__ vienen con PHP 5.3

Se utilizan para indicar que la "ruta del archivo al que llamaron".

 
URL: http://localhost/test/a.php 

DIR: --NIX 
    /var/www/test/a.php 
    --WIN 
    D:\lamp\www\test\a.php 

// a.php's inside 
<?php 
echo __DIR__; 

que esto da en Linux: /var/www/test

lo tanto, si se necesita un parámetro de configuración en toda su proyecto, simplemente lo definen en su config.php y usarlo en la que desea tanto el nombre de archivo que Será incluido.

 
./ 
    config.php 
    index.php 
    header.php 
    footer.php 
    /lib 
    foo.php 
    /tmp 
    bar.php 

./config.php define('ROOT', __DIR__ .'/');

./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

es decir, utilizarlo en tmp dir

./tmp/bar.php include_once(ROOT .'lib/foo.php');

ACTUALIZACIÓN

// config.php 
<?php 
define("ROOT", __DIR__ ."/"); 

Por lo tanto, usamos esto para index.php incluir banner.php y banner.php está esperando en ./banners/banner.php;

// index.php and the very first line! 
<?php 
include_once("config.php"); 
?> 
// some html stuff 
// ... 
<?php include_once(ROOT ."banners/banner.php"); ?> 
// some more html stuff 
// ... 

Por lo tanto, debe incluir config.php primero donde lo necesite.

pienso, esto es básico en la medida que sea necesario ...

ACTUALIZACIÓN

Así que el problema no es PHP include sistema, pero se trata, de todos modos ... :)

Si su ruta de imagen está cambiando (por lo que no está fija), puede hacer esto;

// config.php 
define("ROOT", __DIR__ ."/"); 
define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost") 
    ? "http://localhost/your_work_folder/" 
    : "http://your_site_name.com/" 
); 

// banner.php 
<img src="<?php print HTTP; ?>images/banner.gif"> 
+0

Quiero probar y usar este método, pero parece que no puedo hacerlo bien. ¿Crees que podrías darme el ejemplo de cómo se vería config.php? Lo que he estado intentando muestra errores y no funciona. Además, si tengo, por ejemplo, banner.php con imágenes allí ¿cuál sería el camino correcto para ellos? /images/img01.jpg o images/img01.jpg: P – Vetaxili

+0

Bien, mira la actualización pls. –

+0

Incluye trabajo perfectamente gracias :) Solo tengo el problema de hacer que las imágenes funcionen en diferentes niveles de directorio. – Vetaxili

0

Hay una función llamada getcwd() que devolverá la carpeta de trabajo actual. Si llama esto al principio de su secuencia de comandos, puede almacenar esto, generalmente en una constante con define().

define('PROJECT_ROOT', getcwd()); 
3

normalmente establecer lo que usted ha mencionado, un config.php en un directorio incluir, y tienen la siguiente línea en él: define('BASE_PATH', str_replace('/include', '', dirname(__FILE__))); ("/ include debe ser el directorio que su archivo config.php es en si lo tienes en el directorio raíz, sólo puede utilizar define('BASE_PATH', dirname(__FILE__));) Cuando quiero incluir cualquier otro archivo después de eso, yo uso include_once(BASE_PATH . '/directory/file.php');

nota:.. este concepto no es original a mí por cualquier medio

0

Para obtener/visualizar el directorio de trabajo actual, PHP tiene una función incorporada para que

echo getcwd() . "\n"; 

Esto mostrará el directorio actual de su archivo php que ahora está siendo ejecutado.

0

También puede cambiar la ruta de inclusión, por ejemplo,

$dir = dirname(__FILE__); 
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
Cuestiones relacionadas