【问题标题】:No such file or directory PHP error - But the file is there没有这样的文件或目录 PHP 错误 - 但文件在那里
【发布时间】:2011-12-09 10:01:59
【问题描述】:

每当我尝试在我的 index.php 中包含一个 php 文件时,我都会收到此 PHP 错误:

没有这样的文件或目录

起初我在 index.php 的开头包含了这个文件:require_once("../resources/engine/settings.php");

我没有收到任何错误,但是当我包含带有require_once($TEMPLATES."/header.php"); 的头文件时

我得到了那个错误。

$TEMPLATES 是在 settings.php 中声明的变量(正确包含在 index.php 中)。

这是settings.php:

<?php

     $BASEURL = "http://localhost/webname";
     $CSSFolder = $BASEURL."/public/css";
     $CSS = $CSSFolder."/style.css";
     $IMGFolder = $BASEURL."/public/img";

     $ROOT = $_SERVER["DOCUMENT_ROOT"]."/webname";
     $TEMPLATES = $ROOT."/resources/templates";
     $ENGINE = $ROOT."/resources/engine";

?>

【问题讨论】:

  • 您缺少变量调用前的双点:require_once(..$TEMPLATES."/header.php");
  • 我这样做会收到语法错误。

标签: php


【解决方案1】:

我总是使用dirname 来定义根路径,而不是使用$_SERVER['DOCUMENT_ROOT'],我建议您也使用它。如果你在所有地方都使用它,你会更快地摆脱所有可能出现的路径穿越混乱。

我发现像这样使用起来更容易

$ROOT = dirname(__FILE__)."/webname";

虽然它们似乎返回相同,但使用 DOCUMENT_ROOT 返回脚本执行位置的绝对路径,而 dirname 调用是文件物理位置的绝对路径。

现在解决您的问题:

像这样调试包括的一种简单方法是实际上只打印出路径,即print $TEMPLATES."/header.php",并检查这是否是您所期望的,如果不是,则更正它。

【讨论】:

  • 我使用了print $TEMPLATES."/header.php" 并且路径是正确的,但是即使我使用dirname 而不是$_SERVER["DOCUMENT_ROOT"],我仍然会收到相同的错误
  • 如果使用 dirname,文件的路径将是绝对且正确的。有些事情你没有说出来,因为你的代码应该可以工作。
  • 你是对的,我没有告诉你我是个白痴。我在 index.php 和 header.php 中都输入了require_once("../engine/settings.php");。对不起,伙计们:(-无论如何,我会将您的回复设置为答案,因为它对我有很大帮助:)
  • 我很高兴你发现了问题,经常暂停代码可以解决问题(这似乎是一件神奇的事情)。我讨厌自己遇到这种问题:-)
【解决方案2】:

是的,使用dirname(__FILE__) 会好很多,因为您的站点根目录不能总是与服务器的 DOCUMENT_ROOT 相同。

在一些配置上也很适合使用 als realpath() 来解析一些符号链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2011-04-02
    • 2019-01-21
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多