繁体   English   中英

如何有效地包含config.php?

[英]How to include config.php efficiently?

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

有一种方法可以自动包含文件( 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轻松解决

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

include 'config.php';

或者更好的是:

require_once 'config.php';

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

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

你可以使基础目录不变

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

把它放在你的index.php中

那你可以做

include BASE_DIR . 'config.php';

可以组合的不同选项:

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

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

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

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

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

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

  1. 我不必为我部署的每个版本的网站更改常量。
  2. 像PHPLint这样的静态分析工具不适用于这些类型的夹杂物。
  3. 我的编辑器(Eclipse)允许我通过控制+单击所需的文件名导航到所需的文件。
  4. 在项目之间共享文件更容易(无需编辑所需的路径)
  5. ...

但是......要做到这一点,所有要求和包括需要相对。 默认情况下,PHP使用被调用脚本的当前目录来建立它的包含路径。 当被调用脚本不在同一文件夹中时,这可能会导致问题。 因此,让所有请求通过单个脚本的建议会自动消除任何此类问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM