【发布时间】:2011-01-06 11:25:01
【问题描述】:
由于某种原因,如果我 inlcude() 文件结构中的文件更深到调用 include() 的文件所在的位置,则它可以工作文件,或者如果我包含同一级别的文件。
如果我尝试转到include('../backFile.php'),它会告诉我没有文件?
任何帮助:(
【问题讨论】:
由于某种原因,如果我 inlcude() 文件结构中的文件更深到调用 include() 的文件所在的位置,则它可以工作文件,或者如果我包含同一级别的文件。
如果我尝试转到include('../backFile.php'),它会告诉我没有文件?
任何帮助:(
【问题讨论】:
我不完全确定您的具体情况。可能有一个简单的修复方法可以使包含工作。该修复程序可能会在另一个答案中提供。
相反,我将为您提供best-practice(嗯,也许不是“最好的”,但一种很好的做法):
在您调用的第一个文件或配置文件中,定义一个常量,该常量是您的文件所在的第一个目录的路径。
所以如果你在/home/user/domains/test.com/工作:
DEFINE('SITE_PATH', '/home/user/domains/test.com/');
然后,每当您包含某些内容时,就以它为起点
include(SITE_PATH . "lib/test.class.php");
这将确保PHP使用文件的完整路径,您不必担心相对包含文件。
这在您更改文件位置时非常有用,因为您在移动包含所有内容的文件时不必更改包含。
【讨论】:
除了其他人所说的我realpath 一切......例如:
include(realpath(dirname(__FILE__).'/../myFile.php'));
【讨论】:
你或许应该尝试基于当前目录:
include(getcwd() . '../backFile.php');
【讨论】:
试试这个:
include('./../backFile.php');
【讨论】:
include 依赖于 php 的 include_path 指令,默认为 .(当前执行脚本所在的目录)。
使用ini_set 或set_include_path 设置您自己的include_path。
【讨论】:
当您在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)解析,因此您实际上是在尝试包含/test.php 而不是/www/test.php。
说实话,我不知道为什么会这样。我的libs/init.php 是这样解决的:
define('DIR_ROOT', str_replace('\\', '/', dirname(dirname(__FILE__))));
然后在所有路径前面加上它。 str_replace 调用是为了更顺畅地处理 Windows 路径。
【讨论】: