出于某种原因,如果我inlcude()
文件结构中的文件比调用include()
的文件更深,则它可以正常工作,或者如果我在同一级别包含文件。
如果我试着去include('../backFile.php')
它告诉我没有档案?
任何帮助:(
答案 0 :(得分:3)
我不完全确定你的具体情况。可能有一个简单的解决方案,包括工作。该修复可能会在另一个答案中提供。
相反,我会给你一个best-practice
(好吧,也许不是'最好',但是一个好习惯):
在您调用的第一个文件或配置文件中,定义一个常量,该常量是包含文件的第一个目录的路径。
因此,如果您正在使用/home/user/domains/test.com/
:
DEFINE('SITE_PATH', '/home/user/domains/test.com/');
然后,无论何时包含某些内容,请将其作为起点
include(SITE_PATH . "lib/test.class.php");
这将确保PHP使用文件的完整路径,而您不必担心相对包含该文件。
当您更改文件位置时,这非常有用,因为您在移动包含所有内容的文件时无需更改包含。
答案 1 :(得分:3)
除了其他人所说的realpath
所有内容......例如:
include(realpath(dirname(__FILE__).'/../myFile.php'));
答案 2 :(得分:1)
试试这个:
include('./../backFile.php');
答案 3 :(得分:1)
您应该尝试将其基于当前目录:
include(getcwd() . '../backFile.php');
答案 4 :(得分:0)
include
取决于php的include_path指令,默认情况下为.
(当前执行脚本所在的目录)。
使用ini_set或set_include_path设置您自己的include_path。
答案 5 :(得分:0)
当您在include
的参数中指定路径(绝对路径或相对路径)时,它不使用系统包含路径,而是解析相对于“主”文件的路径 ,通常是某种index.php
。
例如,您有三个文件/www/index.php
:
<?php
include('libs/init.php');
/www/test.php
:
I was included!
和/www/libs/init.php
:
<?php
include('../test.php');
include('../test.php')
调用将使用index.php
的目录上下文解析,/www
,而不是/www/test.php
您实际上正在尝试包含/test.php
1}}。
说实话,我不知道它为什么会这样。我的libs/init.php
解决了这个问题:
define('DIR_ROOT', str_replace('\\', '/', dirname(dirname(__FILE__))));
然后用它预先添加所有路径。 str_replace
调用是为了更顺畅地处理Windows路径。