【问题标题】:Can not specify correct path to included PHP file无法指定包含 PHP 文件的正确路径
【发布时间】:2014-09-12 04:46:10
【问题描述】:

我尝试通过这样做将 PHPExcel IOFaktory.php 包含在一个 php 文件中

require_once '/include/phpexcel/Classes/PHPExcel/IOFactory.php';

但是当我这样做时,我得到了这个错误

警告: 需要一次(/include/phpexcel/Classes/PHPExcel/IOFactory.php):失败 打开流:没有这样的文件或目录 /Applications/MAMP/htdocs/test/kvitto/index.php 在第 10 行

当我希望它从根目录开始时,它为什么要在同一个目录中寻找文件? PHPExcel 库位于 ROOT/include

【问题讨论】:

  • 您确定与 index.php 相关的文件夹结构正确吗?
  • 再次检查。 require_once 正在 尝试在根目录中查找文件(查看该路径 - 它以 / 开头)。双重和三重检查以确保文件确实确实存在。
  • 是什么让您认为它没有在您指定的路径中查找?
  • 试试var_dump(getcwd());。确保您的当前目录是您认为的那样。
  • 确实如此。它正在查找您告诉它查找的位置,但文件不存在。仔细检查所有内容,包括您的拼写和大小写。 (错误消息告诉您它试图包含的文件的路径 - 根据您所描述的内容,它看起来正确,以及包含它的有问题的文件的路径,就像任何 PHP错误。)

标签: php include


【解决方案1】:

PHP 的includerequire 函数不仅限于您的webroot;它们可以跨越整个文件系统。因此,包含路径所指的根目录,即“/”目录通常是磁盘/卷/无论您包含 PHP 文件所在的目录的根目录。

这与您网站的“文档根目录”不同,后者有效地将根 URL 映射到特定目录。

因此,要使用根目录的绝对路径包含您的文件,您需要:

require_once '/Applications/MAMP/htdocs/include/phpexcel/Classes/PHPExcel/IOFactory.php'

通常,人们会使用相对路径来避免需要像这样长的路径,并使他们的代码更容易移动。因此,如果您正在执行 require_once 的文件是:

/Applications/MAMP/htdocs/test/kvitto/index.php

...那么您应该会发现这是可行的:

require_once '../../include/phpexcel/Classes/PHPExcel/IOFactory.php'

因为从您的 index.php 所在的kvitto 向上提升两个目录,可以让您到达htdocs,然后您可以从那里下降。

PHP 有很多机制可以使这更容易。您可以在包含路径中使用__DIR__ 魔术常量(“当前目录名称”),或者如果需要,可以使用roll your own autoloader for classes

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2013-07-14
    • 2011-11-24
    相关资源
    最近更新 更多