如何为PHP包含文件设置根文件夹

时间:2012-08-09 11:57:07

标签: php include config working-directory

我花了几天时间研究互联网,但我找不到我理解并能够实现的答案。

我有一个网站,我想在其中使用include_once文件,并且能够在localhost和实际服务器中正确查看网站。

之前我使用过$_SERVER['DOCUMENT_ROOT']但它在localhost上不起作用,因此我很难更新并对网站进行更改。

我想要做的是创建某种config.php文件,在其中我可以告诉它根文件夹被称为htdocspublic_html并且“开始”查找文件从那里。

或者我还有其他方法可以获得包含工作路径吗?

我看到过回复,例如dirname(__FILE__)__DIR__等,但他们从未解释过它是如何工作的,在代码中写到哪里等等。我有点厌倦了找到部分答案然后跑步围绕圈子尝试“填补”差距。我不是PHP专家,只是想通过使用它来让我的生活更轻松。

5 个答案:

答案 0 :(得分:31)

dirname(__FILE__)__DIR__同样和__DIR__附带PHP 5.3

这些用于表示“他们调用的文件的路径”。

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__;

在linux上给你这个:/var/www/test

因此,如果您需要在所有项目中使用配置参数,只需在config.php中定义它,并在需要包含文件名的位置使用它。

./
  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');

,即在tmp dir

中使用它

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

<强>更新

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

因此,我们使用此index.php包含banner.phpbanner.php等待./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
// ...

因此,您应该首先将config.php包含在您需要的位置。

我认为,根据需要,这是基本的......

<强>更新

所以你的问题不是PHP include系统,而是问题,无论如何......:)

如果你的图像路径正在改变(所以不固定),你可以这样做;

// 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">

答案 1 :(得分:3)

我通常会在include目录中设置你提到的,一个config.php,并在其中包含以下行:define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));(“/ include应该是你的config.php文件所在的目录,如果你可以在根目录中使用它,你可以使用define('BASE_PATH', dirname(__FILE__));)。当我想在此之后包含任何其他文件时,我使用include_once(BASE_PATH . '/directory/file.php');

注意:这个概念对我来说不是原创的。

答案 2 :(得分:1)

有一个名为getcwd()的函数将返回当前工作文件夹。如果你在脚本的最开头调用它,你可以将它存储到define()的常量中。

define('PROJECT_ROOT', getcwd());

答案 3 :(得分:1)

要获取/显示当前工作目录,php具有内置函数

 echo getcwd() . "\n";

这将显示当前正在执行的php文件的当前目录。

答案 4 :(得分:0)

您还可以更改包含路径,例如

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