如何有效地包含config.php?

时间:2009-11-11 04:16:58

标签: php

我总是对更有效的方式和学习新事物感兴趣。现在,我在每个文件中使用代码<?php include('config.php'); ?>。根据文件在文件夹结构中的位置,我会<?php include('../config.php'); ?>甚至<?php include('../../config.php'); ?>。我怎样才能提高效率?有没有办法让它在root中使用我的config.php并使root中的所有内容都需要config.php?

5 个答案:

答案 0 :(得分:18)

有一种方法可以自动包含文件(auto_prepend_file ini设置),但是您可以做的最大改进是放弃使用多个php文件并使用index.php作为单个入口点。整个网站。

假设您编写了一个SO克隆;),其中包含“问题”,“标签”,“用户”等页面。在每个页面上,您需要一些通用的PHP内容(db,session)+常见的html元素(页眉,页脚) )。一种流行的方法是拥有一堆php文件(questions.php,tags.php,users.php),每个文件都包含常见的东西。例如,users.php将如下所示

include 'db.php';
include 'session.php';
include 'html.header.php';
.....users-specific stuff 
include 'html.footer.php';

这非常繁琐(你必须重复大量代码)并且不灵活(想想在网站的所有页面上添加侧边栏)。我的建议是制作包含“内向外”的内容,即包含特定于页面的代码的“常见内容”文件:

 # index.php
 db functions
 session functions
 html header

 $page = isset($_GET['page']) 
   ? preg_replace("/\W+/", "", $_GET['page'])
   : "home";
 include "$page.php";

 html footer

因此,您将在网站上有一个入口点 - 这更灵活,更适合调试。唯一的缺点是网址不那么“漂亮”(user.php vs index.php?page = user),但这可以通过mod_rewrite轻松解决

答案 1 :(得分:17)

将包含config.php的路径放在php include path中,然后您就可以执行此操作:

include 'config.php';

或更好:

require_once 'config.php';

require优先于include,因为当由于某种原因无法包含文件(例如找不到文件,权限错误等)时,它会触发错误而不是警告。 _once后缀是一个很好的补充,以确保多次不必要地包含相同的文件。

此外,请注意,您'config.php'电话中的include周围不需要括号。 include不是php中的函数。这是一种语言结构。括号只是一个不必要的分组,与此示例不同:$myVar = (2 + 2);

答案 2 :(得分:8)

你可以使基础目录不变

define('BASE_DIR', realpath(__FILE__));

将它放在index.php中

然后你可以做

include BASE_DIR . 'config.php';

答案 3 :(得分:2)

可以组合的不同选项:

  • 在源控件中不会跟踪的资源文件中创建路径定义。例如define('LIB_PATH','/ home / tchalvak / project /');

  • 指定autoprepend文件并在php.ini中进行设置。例如包括一个全局的,随处可用的脚本列表,您可以随时添加或减去这些脚本。

  • 最后,我发现或想出了一些路径字符串操作技巧,我忘记了:

    require_once(substr(__FILE__, 0, (strpos(__FILE__, 'lib/')))."resources.php"); //要求与另一个已知文件建立特定关系的文件,不管涉及的实际路径如何,并且不处理任何定义。

答案 4 :(得分:2)

以下是我管理所需(包含)文件的方法:

当我可以的时候,我从不在我所需的文件中使用常量或变量(来定义绝对路径)。我发现这有一些优点:

  1. 我不必为我部署的每个版本的网站更改常量。
  2. 像PHPLint这样的静态分析工具不适用于这些类型的包含。
  3. 我的编辑器(Eclipse)允许我通过控制+单击所需的文件名导航到所需的文件。
  4. 在项目之间共享文件更容易(无需编辑所需的路径)
  5. ...
  6. 但是......要做到这一点,所有要求和包括需要相对。默认情况下,PHP使用被调用脚本的当前目录来建立它的包含路径。当被调用脚本不在同一文件夹中时,这可能会导致问题。因此,让所有请求通过单个脚本的建议会自动消除任何此类问题。