16

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

我已经有了要在其中使用include_once文件的网站,并且能够在 localhost 和实际服务器中正确查看该网站。

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

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

或者有没有其他方法可以让包含路径工作?

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

4

5 回答 5

38

dirname(__FILE__)两者__DIR__都相同,并__DIR__附带 PHP 5.3

这些用于指示“它们调用的文件的路径”。

网址:http://localhost/test/a.php

目录:--NIX
     /var/www/test/a.php
     - 赢
     D:\灯\www\test\a.php

// a.php 在里面
<?php
回声 __DIR__;

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

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

./
  配置文件
  索引.php
  头文件.php
  页脚.php
  /lib
    foo.php
  /tmp
    酒吧.php

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

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

即,在tmp dir

./tmp/bar.phpinclude_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 包含在您需要的位置。

我认为,就需要而言,这是基本的...

更新

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

如果您的图像路径正在更改(因此不固定),您可以这样做;

// 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">
于 2012-08-09T12:42:59.463 回答
3

我通常设置你提到的,一个包含目录中的 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');.

注意:这个概念无论如何都不是我的原创。

于 2012-08-09T12:01:50.140 回答
1

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

define('PROJECT_ROOT', getcwd());
于 2012-08-09T12:01:24.760 回答
1

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

 echo getcwd() . "\n";

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

于 2015-06-30T20:07:54.017 回答
0

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

$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
于 2015-09-03T16:59:04.790 回答