多数大学生出来选择的工作和专业无关
首页 > 专业知识

构建可配置PHP应用程序的正确方式

时间:2017-08-15 17:43:07 [来源]:郑州PHP培训学校

   构建可配置PHP应用程序的正确方式

  PHP 内建了对配置文件的支持。这是通过 php.ini 文件这样的初始化文件(INI)机制实现的,在 php.ini 文件中定义了数据库连接超时或会话如何存储等常量。如果愿意的话,可以在这个 php.ini 文件中为应用程序定制配置。为了说明,我将下列代码行添加到 php.ini 文件中。
 
  清单1. ini1.php
  <?php
  function get_template_directory()
  {
  $v = get_cfg_var( "myapptempdir" );
  return ( $v == null ) ? "tempdir" : $v;
  }
  echo( get_template_directory()."n" );
  ?>
  当在命令行中运行这段代码时,得到如下结果:
  % php ini1.php
  foo
  %
  太棒了。但为什么不能用标准的 INI 函数来获取 myapptempdir 配置项的值呢?我研究了一下,发现在大多数情况下,定制配置项不能使用这些方法来获取。然而,使用 get_cfg_var 函数却是可以访问的。
  为使这个方法更加简单,将对变量的访问封装在第二个函数中,该函数使用配置键名及一个缺省值作为参数,如下所示。
  清单 2. ini2.php
  function get_ini_value( $n, $dv )
  {
  $c = get_cfg_var( $n );
  return ( $c == null ) ? $dv : $c;
  }
  function get_template_directory()
  {
  return get_ini_value( "myapptempdir", "tempdir" );
  }
  这是对如何访问 INI 文件的一个很好的概括,所以,如果要使用一个不同的机制或将这个 INI 文件存储到其他位置,就不需要为更改大量的函数而大费周折。
  我不推荐使用 INI 文件作为应用程序的配置,这有两个理由。首先,虽然这样做较容易读取 INI 文件,但却几乎不可能安全地写 INI 文件。所以这样做只适合于只读配置项。第二,php.ini 文件在服务器的所有应用程序上共享,所以我认为特定于应用程序的配置项不应该写在该文件中。
  需要对 INI 文件了解什么呢?最重要的是如何重置 include 路径来添加配置项,如下所示。
  清单 3. ini3.php
  <?php
  echo( ini_get("include_path")."\n" );
  ini_set("include_path",
  ini_get("include_path").":./mylib" );
  echo( ini_get("include_path")."\n" );
  ?>
  在本例中,我将我的本地 mylib 目录添加到了 include 路径中,所以能够从该目录中 require PHP 文件,而不需要将该路径添加到 require 语句中。
  PHP 中的配置
  通常对于在 INI 文件中存储配置条目的一个替代办法是使用一个简单的 PHP 脚本来保持数据。如下是一个样例。
  清单 4. config.php
  <?php
  # Specify the location of the temporary directory
  #
  $TEMPLATE_DIRECTORY = "tempdir";
  ?>
  使用该常量的代码如下所示。
  清单 5. php.php
  <?php
  require_once 'config.php';
  function get_template_directory()
  {
  global $TEMPLATE_DIRECTORY;
  return $TEMPLATE_DIRECTORY;
  }
  echo( get_template_directory()."\n" );
  ?>
  该代码首先包含配置文件(config.php),接着就可以直接使用这些常量了。
  使用这项技术有很多优势。首先,如果某些人仅仅浏览 config.php 文件,该页面是空白的。所以可以将 config.php 放到相同的文件中,并作为 Web 应用程序的根。第二,在任何编辑器中都可编辑,并且在一些编辑器中甚至具备语法着色及语法检查功能。
  这项技术的缺点是,这是一个像 INI 文件一样的只读技术。将数据从此文件中提取出来是轻而易举的,但在该 PHP 文件中调整数据却很困难,在一些情况下甚至是不可能的。
  下面的替代方法显示了如何编写在本质上既可读又可写的配置系统。
  文本文件
  前面的两个例子对于只读配置条目都是合适的,但对于既读又写的配置参数来说又如何呢?首先,看看清单 6 中的文本配置文件。
  清单 6. config.txt
  # My application's configuration file
  Title=My App
  TemplateDirectory=tempdir
  这是同 INI 文件相同的文件格式,但我自己编写了辅助工具。为此,我创建了自己的 Configuration 类,如下所示。

上一篇:PHP处理密码的方式有哪些

下一篇:PHP大潮将至PHP近年发展分析