【问题标题】:dirname(__FILE__) on localhost本地主机上的目录名(__FILE__)
【发布时间】:2012-02-18 01:35:05
【问题描述】:

我正在使用 WAMP,并且在 www 目录中有一个开发站点。我想使用dirname(__FILE__) 来定义服务器根目录的路径。

目前我使用的配置文件包含:

define('PATH', dirname(__FILE__));

我将配置文件包含在我的header.php 文件中,如下所示:

<?php require_once("config.php") ?>

然后,在我的子页面上,我使用常量PATH 通过包含header.php 来定义路径。

<?php require_once("../inc/header.php"); ?> 

但是,我的链接是这样出来的:

<link rel="stylesheet" href="C:\wamp\www/css/style.css" />

我需要做什么来解决这个问题?由于我在header.php 文件中包含我的常量,因此我无法访问初始require_once("../inc/header.php"); 中的常量我可以使用什么其他方法来查找header.php 的根?

【问题讨论】:

  • 要查找本地路径还是URL?
  • @deceze - 我猜都是。一旦我将它投入生产,我就需要它来工作。

标签: php constants wamp


【解决方案1】:

看来你只需要拥有

define('PATH', $_SERVER['SERVER_NAME']);

如果你想成为超级技术,你可以这样做。

define('PATH', str_replace($_SERVER['DOCUMENT_ROOT'], $_SERVER['SERVER_NAME'] . '/', dirname(__FILE__)));

另一方面,更重要的是,您实际上并不需要它们。这将起作用。

<link rel="stylesheet" href="/css/style.css" />

当 href 以目录分隔符开头时,它被认为是相对于文档根目录,而不是当前工作目录。

【讨论】:

  • 抱歉回复晚了,我已经走了几天了。感谢href 提示。我把它放在那里,一切都很好。但是,我仍然需要使用define('PATH', $_SERVER['SERVER_NAME']); 来链接我的config.php 文件。我的config.php 包含根常量。但是,我需要在调用header.php 之前定义根。这就是我卡住的地方。 index.php 工作正常,因为它只是找到 config.php 并加载它。当我导航到任何其他页面时,链接会中断。希望这是有道理的。谢谢!
  • @Paul 我不确定我明白你的意思。您是否有任何地方的实时链接,以便我可以看到目录结构的样子?
  • 感谢您回复我。几分钟前我才发现我的错误。保重。
  • @Paul 没问题。很高兴你知道了。
  • @Nilpo 好吧,你能和我们分享一下吗?
【解决方案2】:

__FILE__ 是文件系统路径,而不是 URL 路径。我想你可能对你需要哪个感到困惑。要包含 php 文件或移动内容,您需要使用文件系统路径。要创建指向资源的 URL,您需要使用 URL。

对于文件系统的东西,你可以使用dirname(__FILE__)。因此,如果您不使用前端控制器模式,那么在您的前端控制器或顶级入口点中,您可能会遇到以下情况:

define('ROOT_PATH', dirname(__FILE__));
define('INC_PATH', ROOT_PATH . DIRECTORY_SEPARATOR . 'includes');

就 asstes 而言(css、图像、js),我喜欢将它们保存在 DOCUMENT_ROOT 的单个位置,因此无论您在文件结构中的哪个位置,路径始终为 /css/path/to/file.css。如果您在本地计算机或测试服务器上的子文件夹中进行开发,这可能会成为一个问题,但通过使用虚拟主机可以轻松避免,这样每个站点都有自己的文件结构,与其他站点完全分开。

【讨论】:

  • 但这并没有给我们带来便携性。
  • 当然可以……您只需确保始终拥有相同的相关安装,然后就可以了。例如,如果 DOCROOT 是 /PATH/TO/PROJECT/public,那么在您的 FC 中,您可以使用 define('ROOT', realpath(dirname(__FILE__) . '/../'))
【解决方案3】:
$server = str_replace('\\','/',$_SERVER['SERVER_NAME']);
$server = (substr($server,-1)=='/'?substr($server,0,strlen($server)-1):$server);
!defined('PATH')?define('PATH', 'http://'.str_replace($_SERVER['DOCUMENT_ROOT'],$server , str_replace('\\','/',dirname(__FILE__)))):'';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多