包含在包含的文件中不适用于相对路径

Pee*_*aha 1 php path include

在过去的 64 分钟里,这个错误耗尽了我的理性思考能力,我真的不知道我该怎么办。

当我在包含的文件中使用以下 3 行时:

var_dump(file_exists('G:/xampp/htdocs/myproject/public_html/includes/htmlPurifierAndMarkdown.php')); //retuurns true
var_dump(__FILE__);
include '../htmlPurifierAndMarkdown.php'; //gives error
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

boolean true

string 'G:\xampp\htdocs\myproject\public_html\includes\classes\genral.class.php' (length=71)


( ! ) Warning: include(../htmlPurifierAndMarkdown.php) [function.include]: failed to open stream: No such file or directory in G:\xampp\htdocs\myproject\public_html\includes\classes\genral.class.php on line 4
Call Stack
#   Time    Memory  Function    Location
1   0.0005  345328  {main}( )   ..\add.php:0
2   0.0036  382408  include( 'G:\xampp\htdocs\myproject\public_html\includes\classes\events.class.php' )    ..\add.php:28
3   0.0041  398024  include( 'G:\xampp\htdocs\myproject\public_html\includes\classes\standardpost.class.php' )  ..\events.class.php:2
4   0.0047  413928  include( 'G:\xampp\htdocs\myproject\public_html\includes\classes\genral.class.php' )    ..\standardpost.class.php:2
Run Code Online (Sandbox Code Playgroud)

简而言之:

  1. 第一行说明该文件不是我想象的一部分,它确实存在。
  2. 第二行告诉我的调用脚本的位置,仔细检查路径,你会注意到我试图包含的文件驻留在父目录中
  3. 包含函数表示文件不存在

所以我只是在想象东西还是这是一些严重的 php 错误?

更新

当我genral.class.php手动访问时,不会产生错误。从包含的文件中包含时是否适用特殊规则?

更新 2

当我将包含路径设置为 '../includes/htmlPurifierAndMarkdown.php' 时,它是相对于主调用脚本的路径,而主调用脚本又包含一个包含genral.class.php它工作的脚本,但由于这个新的包含只与一个相关在许多调用脚本中,它会为其他脚本分解。从包含文件中包含文件时是否适用特殊规则?

glo*_*mad 5

__FILE__常量返回包含该行的文件的完整路径和文件名。此文件可能位于当前工作目录以外的目录中。在您的特定示例中,您可以使用它:

include dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'htmlPurifierAndMarkdown.php';
Run Code Online (Sandbox Code Playgroud)

可能发生的情况的示例如下:

  1. 正在执行的文件是 /example.com/public_html/index.php
  2. 当前工作目录是 /example.com/public_html/
  3. 索引文件包括 /example.com/public_html/includes/classes/genral.class.php
  4. 上述文件试图包括 ../htmlPurifierAndMarkdown.php
  5. ..相对于当前的工作目录,而不是相对于包含的文件翻译。因此,您最终会收到/example.com/htmlPurifierAndMarkdown.php令人讨厌的错误消息。