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

Vet*_*ili 14 php config working-directory include

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

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

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

我想要做的是创建一些config.php文件,在其中我可以告诉它根文件夹被调用htdocspublic_html"开始"从那里寻找文件.

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

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

K-G*_*Gun 32

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参数,只需在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__ ."/");
Run Code Online (Sandbox Code Playgroud)

所以,我们用它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
// ...
Run Code Online (Sandbox Code Playgroud)

因此,您应该首先将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">
Run Code Online (Sandbox Code Playgroud)