Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何有效地包含config.php?_Php - Fatal编程技术网

如何有效地包含config.php?

如何有效地包含config.php?,php,Php,我总是对更有效的方法和学习新事物感兴趣。现在,我正在每个文件中使用代码。根据文件在文件夹结构中的位置,我会选择甚至。我怎样才能使它更有效率?有没有办法让它在root中成为我的config.php,并使root中的所有内容都需要config.php 将包含config.php的路径放在 include 'config.php'; 或者更好: require_once 'config.php'; require优于include,因为当由于某种原因(例如,找不到文件、权限错误等)无法包含文件时,

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

将包含
config.php
的路径放在

include 'config.php';
或者更好:

require_once 'config.php';
require
优于
include
,因为当由于某种原因(例如,找不到文件、权限错误等)无法包含文件时,它会触发错误而不是警告。
\u once
后缀是一个很好的补充,可以确保同一个文件不会被不必要地包含多次


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

您可以将基本目录设置为常量

define('BASE_DIR', realpath(__FILE__));
把它放在index.php中

那你就可以了

include BASE_DIR . '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';
这是相当乏味的(你必须重复大量的代码)和不灵活的(想想在网站上的所有页面上添加一个边栏)。我的建议是将includes设置为“inside-out”,即创建一个“common-stuff”文件,其中包含特定于页面的代码:

 # index.php
 db functions
 session functions
 html header

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

 html footer

因此,您将在网站上有一个单一的入口点-这更灵活,更便于调试。唯一的缺点是URL不太“好”(user.php vs index.php?page=user),但这可以通过mod_rewrite轻松解决,可以组合不同的选项:

  • 在源代码管理中不会跟踪的资源文件中创建路径定义。e、 g.定义('LIB_PATH','/home/tchalvak/project/')

  • 指定一个autoprepend文件并在php.ini中进行设置。e、 g.包括一个全局的、随处可见的脚本列表,您可以动态添加或删除这些脚本

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

    require_once(substr(u文件,0,(strpos(u文件,'lib/))).“resources.php”)
    //需要与另一个已知文件具有特定关系的文件,而不管涉及的实际路径如何,并且不处理任何定义


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

如果可以,我从不在所需文件中使用常量或变量(定义绝对路径)。我发现这有一些好处:

  • 我不必为我部署的网站的每个版本更改常量
  • 诸如PHPLint之类的静态分析工具无法处理这些类型的夹杂物
  • 我的编辑器(Eclipse)允许我通过control+单击所需的文件名导航到所需的文件
  • 在项目之间共享文件更容易(无需编辑所需路径)

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

    要详细说明吗?这在什么方面是一种进步?性能、可维护性等等?只要有某种模板在进行(必须有),我想这对于问题的重新定义是非常有效的。我最喜欢这个答案。有许多方法可以加快这一过程,例如使用框架为您实现自动化。如果你愿意的话,我可以推荐一些。你最好是被指向一个关于清洁起步框架的既定问题,因为它们会让你更全面地了解不同的选项,以及它们之间的对比。我要说的一件事是:使用模板,不管你最终怎么做,php逻辑和html逻辑的分离将使你的工作简化20倍,这一点最终让我感到懊恼。现在,你可以选择一两个有很多答案的问题,这样你就可以很好地了解社区首选的框架。SmileThis对于许多不同的用途也很方便-为应用程序定义一次路径常量总是很好的。我通常有一个BASE\u DIR和DOC\u ROOT。。PHP使用的目录的BASE_DIR,以及作为HTML相对路径前缀的DOC_ROOTetc@Alex-您是否需要将BASE_DIR设置为第1页上的会话变量,以便在更深的页面上使用,还是PHP将其保存在内存中?@JM4您需要在应用程序的引导序列中定义它。用
    define()
    定义的常量是全局的。@alex:我会使用效率更高的
    dirname
    来代替realpath(速度非常慢),除非你不想像Asah上面说的那样,使用symlinksPlus将文件直接放入php包含路径。奇怪的是,我从来没有这样做过。我想知道在分享项目或其他东西时是否有缺点?不确定。随着paas pro的日益流行