2012-08-09 127 views
14

我花了几天时间研究互联网,找不到能够理解并能够实现的答案。如何为PHP包含文件设置根文件夹

我有我想要使用include_once文件的网站,并且能够在本地主机和实际服务器中正确查看网站。

我以前使用过$_SERVER['DOCUMENT_ROOT'],但它不能在本地主机上工作,所以我很难更新和更改网站。

我想要做的是创建一些config.php文件,我可以告诉它,根文件夹要么被称为htdocspublic_html,要“开始”从那里寻找文件。

或者还有其他方法可以让我包括工作路径吗?

我见过回复dirname(__FILE__),__DIR__等等,但他们从来没有解释过它是如何工作的,在代码中写入的地方等等。我有点厌倦和发现部分答案,然后在圈子里跑来跑去尝试“填充在“的差距。我不是一个PHP专家,只是想通过使用它来让我的生活变得更轻松。

+0

您在使用任何框架或项目的原始PHP? – 2012-08-09 12:06:05

回答

28

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

UPDATE

// 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到你需要它的地方。

我想,这是基本的需要尽可能...

UPDATE

所以你的问题是不是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"> 
+0

我想尝试和使用这种方法,但我似乎无法做到正确。你认为你可以给我一个关于config.php的样子吗?我一直在尝试显示错误并且不起作用。另外,如果我有例如有图像的banner.php有什么对他们来说是正确的路径? /images/img01.jpg或images/img01.jpg:P – Vetaxili 2012-08-09 14:01:18

+0

那么,请参阅更新请求。 – 2012-08-09 14:14:07

+0

包括完美的工作谢谢:) 我只有在不同的目录级别上使图像工作的问题。 – Vetaxili 2012-08-09 14:32:03

0

有一个叫做getcwd()的函数将返回当前工作文件夹。如果您在脚本的一开始就调用它,则可以将其存储在define()的常量中。

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

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

注意:这个概念是不是原来我以任何方式

0

要获得/显示当前的工作目录,PHP拥有该

echo getcwd() . "\n"; 

这是一个内置功能会显示这是目前正在执行你的PHP文件的当前目录。

0

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

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