所包含的文件中包括不与相对路径工作(Include within an included file

2019-11-01 09:44发布

此bug已耗尽我的理性思维力量在过去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

我得到以下的输出:

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

简而言之:

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

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

更新

当我访问genral.class.php手动,不产生错误。 做特殊规则,包括从被包含的文件中,当应用?

更新2

当我设置包括路径“../includes/htmlPurifierAndMarkdown.php”,相对于主调用脚本,这又包括脚本,包括路径是genral.class.php它的工作原理,但由于这种新的包括相对于只是众多调用脚本之一,它打破了别人。 做包括被包含的文件中的文件时,特殊的规定?

Answer 1:

__FILE__常量返回包含该行的文件的完整路径和文件名。 这是可能的这个文件,以定位为比当前工作目录的目录中 。 在您的特定例子,你可以这样做:

include dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'htmlPurifierAndMarkdown.php';

什么可能发生的情况的一个例子如下:

  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和讨厌的错误消息。


Answer 2:

../是相对路径-相对于当前的工作目录。 当前工作目录是外部脚本(通过浏览器所请求的一个)所在的一个。 在上述例子中,PHP将解决相对于路径add.php

使用dirname(__FILE__)来得到当前文件的绝对路径(无论是要求还是含税)。 你可以用它来计算使用相对路径已知的文件绝对路径。



Answer 3:

尝试包括这样的文件:

include(realpath(dirname(__FILE__) . '/../') . 'htmlPurifierAndMarkdown.php');

在其他的方式,你有这些文件::

/index.php  
/includes/classes/genral.class.php  
/includes/htmlPurifierAndMarkdown.php 

index.php文件

include('/includes/classes/genral.class.php'); 

genral.class.php:

include('/includes/htmlPurifierAndMarkdown.php');

如果你开始的index.php这将是做工精细...



文章来源: Include within an included file is not working with relative paths
标签: php path include