当我包含来自同一文件夹的文件时,例如
include('Car.php');
它完美无缺,但如果我将其移回一个文件夹并将包含更改为
include('../Car.php');
它返回以下消息:
警告:include(../ Car.php):无法打开流:第1行/Users/user/Desktop/Test/clases/Bus.php中没有此类文件或目录
警告:include():打开失败' ../ Car.php'在第1行的/Users/user/Desktop/Test/clases/Bus.php中包含(include_path ='。:/ Applications / MAMP / bin / php / php5.4.4 / lib / php') / p>
这是我的文件夹结构:
我试图在Bus.php中包含Car.php。
答案 0 :(得分:2)
假设您正在使用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或require时包含__DIR__
或dirname(__FILE__)
被认为是最佳做法,以便不依赖于配置的php include路径位置,这在大型应用程序中可能比明确定义路径信息慢得多
包含路径信息:http://php.net/manual/en/ini.core.php#ini.include-path