2011-08-02 124 views
1

这里是我的问题,我已经得到了一个旧的网站,其中包含这样一些模块,PHP包括链

root_dir 
    |-->module1 
    |-->module2 
    |-->module3 

对于我的需要我一个子级添加到这个结构,这样,

root_dir 
    |-->module1 
    |-->module2 
     |-->submodule2.1 
    |-->module3 

我的问题是,每个模块都包含一个“include.php”文件,然后包含其他文件,所以如果我将include.php的第一个路径修复为../include.php,它将在第二个include文件中崩溃。 ..

是这里有一个很好的解决方法,除了复制所有文件并修复include的路径外?

THX

+1

只是为了得到这个问题:module2包含一个include.php,它又包含submodule2.1,然后在子模块2.1的文件夹中包含一个includes.php;那么,你想在那里包括什么,如果这是链条的结束,并且其他所有内容都可能被包含在内? – feeela

+0

实际上它更像是submodule2.1和module2根本没有链接,它们都是独立的,但它们包含相同的include.php(它加载站点的配置环境),在module2中它完美地工作,因为它已经为此,所以有这样的<?php include(“../ include/include.php”);对于子模块2.1,我需要修改路径,<?php include(“../../ include/include.php”); ?>但后来我得到包含在include.php中的文件的错误...(很难解释哎哟,希望你明白我) – krifur

回答

2

您是否尝试过使用include_once为常见的include.php文件:

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

或者包括一个共同的祖先文件中的代码一次。

还是我过度简化?这些选择给你吗?

+0

我认为它不会工作,因为所有的模块都是独立的,没有祖先(旧网站)基本上我想包括链接的开始,但从不同的文件夹层次结构,它适用于第一个因为我修改路径,但然后它会创建错误...有一些与dirname_FILE_ probalby东西,但我只问以前我错过了一些... – krifur

+0

@krifur:使用'dirname(__ FILE __);'通过你的整个代码(或者'__DIR__'在更新的版本中)听起来是正确的。永远不要假设工作目录。虽然你当然可以自己调用chdir。 – Wrikken

0

“有两个独立的,但他们有相同的include.php(其中加载网站的配置environnment)”

你最好应该已经加载或者用一些方法(工厂拿到的配置工作,配置-data,全局设置类......),允许加载设置,而无需了解有关实际文件结构(从模块角度)的任何信息。这同样适用于你在模块中使用的其他东西(比如数据库对象)。