不能使用include() php函数从祖先文件夹加载文件


Can't load files from ancestor folders using the include() php function

当我包含来自同一文件夹的文件时,例如

include('Car.php');

效果很好,但是如果我把它移回一个文件夹并把include改为

include('../Car.php');

返回以下消息:

警告:include(../Car.php): failed to open stream: line 1/Users/user/Desktop/Test/classes/Bus.php中没有这样的文件或目录

警告:include():打开'../Car.php'包含失败(include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php')在第1行/Users/user/Desktop/Test/classes/Bus.php

这是我的文件夹结构:
    /
  • 测试
    • Car.php
    • 一堂课/
      • Bus.php

我试图从Bus.php中包含Car.php .

假设您使用的是php 5.3,请尝试使用

clearstatcache(true);
include realpath(__DIR__ . '/../Car.php');
//alternative
//include realpath(dirname(__FILE__) . '/../Car.php');

看看这是否能解决你的问题。

功能说明

clearstatcache(true)将删除realpath的PHP缓存,一般可以删除。http://php.net/manual/en/function.clearstatcache.php

realpath检查文件是否存在,展开所有符号链接并解析对'/'的引用。/,/. ./'或失败时返回false。http://php.net/manual/en/function.realpath.php

__DIR__dirname(__FILE__)是当前目录的完整路径,而不是依赖于PHP的包含路径来确定文件的位置。

/../告诉完整路径向上遍历一个目录,realpath将其转换为实际路径并删除相对内涵。

主要问题可能是你的php.ini包含路径,因为include依赖于它,如果它不能找到包含文件的路径。在调用include或require时包含__DIR__dirname(__FILE__)被认为是最佳实践,以便不依赖于配置的php include路径位置,这在大型应用程序中可能比显式定义路径信息要慢得多。

包含路径信息:http://php.net/manual/en/ini.core.php#ini.include-path