我花了几天时间研究互联网,但我找不到我理解并能够实现的答案。
我有一个网站,我想在其中使用include_once
文件,并且能够在localhost和实际服务器中正确查看网站。
之前我使用过$_SERVER['DOCUMENT_ROOT']
但它在localhost上不起作用,因此我很难更新并对网站进行更改。
我想要做的是创建某种config.php文件,在其中我可以告诉它根文件夹被称为htdocs
或public_html
并且“开始”查找文件从那里。
或者我还有其他方法可以获得包含工作路径吗?
我看到过回复,例如dirname(__FILE__)
,__DIR__
等,但他们从未解释过它是如何工作的,在代码中写到哪里等等。我有点厌倦了找到部分答案然后跑步围绕圈子尝试“填补”差距。我不是PHP专家,只是想通过使用它来让我的生活更轻松。
答案 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.php
,banner.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());