2012-04-08 92 views
4

我不知道这是多么简单的解决,但我认为我做错了什么。我是PHP新手,请耐心等待。PHP包括不工作

当我开始学习PHP的,我总是把我的所有项目文件到同一个文件夹index.php一起,从而包括所有这样的:在学习的过程中后来

<?php 
include('./translation.php'); 
?> 

为我积累了经验和我的技能提高了,我不得不开始使用文件夹并将我的文件放入子文件夹中。我结束了成功,包括我的以下文件:

<?php 
include('../translation.php'); 
?> 

我无故障编码了一个意想不到的转折,当我决定开始使用子子文件夹。更深把所有的文件到文件的结构后,我很震惊地发现,我无法将它们包含了使用:

<?php 
include('.../translation.php'); 
?> 

现在我迷路了。我做错了什么?我能理解,我不能在项目中包含比2个目录更深的文件吗?我应该开始使用不同的文件系统吗?

+0

在大多数文件系统中,'..'是指当前目录的父目录,所以你可以通过'../../../../'等链接尽可能多的'/'来描述目录。单点'.'指的是当前目录,所以'./././././'仍然指向同一个(当前)目录。 – 2012-04-08 17:26:47

+0

当你创建更大的项目时,定义一个像'define('SITE_ROOT',dirname(__ FILE __));'在顶层,然后包括其他的'include(SITE_ROOT。“/../translation .php“);' – 2012-04-08 17:30:09

+0

我已经在这篇文章中遇到了一些麻烦,也许可以帮助: http://stackoverflow.com/questions/3510909/php-define-doesnt-seem-to-be-working-with-include – 2014-07-30 20:52:40

回答

10

您的概念不正确。

  • .代表当前目录
  • ..代表父目录

这是一个文件系统会保持在跟踪文件和浏览深度的方式。您可以使用...更改目录。当你去更深,你必须使用

例如:

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

包括文件,当前目录外二级。这可能是你想要做的。

+0

嘿蠕动downvoter,给一些评论。 – Starx 2012-04-08 17:27:24

+1

+1,但我会将“之前”更改为“父母”。导致“..”与按下“后退”按钮不一样。 – 2012-04-08 17:30:21

+0

@jb,谢谢,这是一个很好的建议。我已经更新了我的回答 – Starx 2012-04-08 17:31:48

4

的包括应该是:

<?php 
include('../../translation.php'); 
?> 

每个级别 '向上' 需要自己../

例如,如果你有以下目录:

a 
    a1 
     filex.php 
    a2 
b 
    b1 
     filey.php 

如果filex.php,你想包括filey.php,你会做以下几点:

<?php 
include('../../b/b1/filey.php'); 
?> 

最多/出两次,下/ ib两次

基本上,任何时候你想要'下'一个级别/进入一个文件夹,你给文件夹的名称由一个正斜杠。但是要'上'或离开当前文件夹(到当前文件夹的父文件夹),您给..后跟正斜杠

-1

让我们假设这个文件夹树。

-> site 
     -> public_html (Inside the site folder) 
      -> index.php (Inside the public_html folder) 
     -> translation.php (Inside the site folder) 
在你的index.php

,你只需要使用include "../translation.php";

如果translation.php是在同一个文件夹中的站点文件夹,您可以使用include "../../translation.php";

如果您translation.php是在与index.php相同的文件夹中,但您只需包含如下内容:include "translation.php";

1

如果您想深入一点(子文件夹的子文件夹),只需使用../../

include("../../translation.php"); 

但是,如果您的项目是中等大小或大尺寸,我宁愿建议您定义绝对路径。在你的index.php或任何你包含的文件是,定义类似SITE_ROOTINCLUDES_ROOT

define("SITE_ROOT", dirname(__FILE__)); 

然后按需使用它。

include(SITE_ROOT."/../../translation.php"); 

这是非常有用的,你是从不同的文件夹

使包括文件的情况下,假设你有这样的文件夹结构

  • ROOT
    • 包括/
      • boot.php
    • 翻译
      • en.php
    • AJAX/
      • ajax2/
        • ajaxfile.php
    • 的index.php

CASE1:(失败)

的index.php包括

<?php 
include("includes/boot.php"); 

AJAX/ajax2/ajaxfile.php包括

<?php 
include("../../includes/boot.php"); 

包括/引导。PHP包括

<?php 
include("translations/en.php"); // from index.php it works but from ajax/ajax2/ajaxfile.php it searches for wrong file 

CASE2:(通过)

AJAX/ajax2/ajaxfile.php和index.php的具有相同内容作为CASE1

包括/ boot.php包括

<?php 
define("INCLUDES_ROOT", dirname(__FILE__)); 
include(INCLUDES_ROOT."/../translations/en.php"); 

它通过,因为INCLUDES_ROOT确保整个包含指向正确的目录!