【问题标题】:How to set root folder for PHP include files如何为 PHP 包含文件设置根文件夹
【发布时间】:2012-08-06 15:34:34
【问题描述】:

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

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

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

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

或者还有其他方法可以让包含路径起作用吗?

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

【问题讨论】:

  • 您使用的是任何框架还是您的项目是原始 php?

标签: php include config working-directory


【解决方案1】:

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 在里面 &lt?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 包含在您需要的位置。

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

更新

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

【讨论】:

  • 我想尝试使用这种方法,但我似乎无法正确使用。你认为你可以给我一个 config.php 应该是什么样子的例子吗?我一直在尝试的内容显示错误并且不起作用。另外,如果我有例如带有图像的banner.php 那里的正确路径是什么? /images/img01.jpg 或 images/img01.jpg :P
  • 包括完美的工作谢谢 :) 我只有让图像在不同的目录级别上工作的问题。
  • 非常感谢您,先生 :-) 非常感谢您的帮助
  • 关于这个主题的所有其他stackoverflow答案都应该被删除并替换为这个,谢谢bud。
  • 对不起,我弄乱了你完美的 6000 声誉,但我不得不投票:P
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    define('PROJECT_ROOT', getcwd());
    

    【讨论】:

      【解决方案4】:

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

       echo getcwd() . "\n";
      

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

      【讨论】:

      • 如果从控制台运行,getcwd() 将返回控制台的当前工作目录,而不是 php 文件的目录,所以如果你运行你的脚本:php dir/index.php 返回的路径将是向下一层。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 2015-11-28
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        相关资源
        最近更新 更多