用不同文件 构建可配置PHP应用程序的正确方式

2016-01-29 13:21 13 1 收藏

用不同文件 构建可配置PHP应用程序的正确方式,用不同文件 构建可配置PHP应用程序的正确方式

【 tulaoshi.com - PHP 】

    如果计划让其他人或公司可以使用您的 PHP 应用程序,需要确保该程序是可配置的。至少,要允许用户以一种安全的方式设置数据库登录及密码,从而使其中的材料不会对外公开。

    本文展示了几种用于存储配置设置及编辑这些设置的技术。另外,文中也为哪些元素需要设为可配置以及如何避免陷入配置过度或者配置不足的困境提供了指导。

    使用 INI 文件进行配置

    PHP 内建了对配置文件的支持。这是通过 php.ini 文件这样的初始化文件(INI)机制实现的,在 php.ini 文件中定义了数据库连接超时或会话如何存储等常量。如果愿意的话,可以在这个 php.ini 文件中为应用程序定制配置。为了说明,我将下列代码行添加到 php.ini 文件中。

myapptempdir=foo
 


然后,我编写了一个小 PHP 脚本来读取这个配置项,如清单 1 所示。


    清单 1. ini1.php

<?php
function get_template_directory()
{
  $v = get_cfg_var( "myapptempdir" );
  return ( $v == null ) ? "tempdir" : $v;
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

echo( get_template_directory()."n" );
?
 

当在命令行中运行这段代码时,得到如下结果:

% php ini1.php
foo
%
 

    太棒了。但为什么不能用标准的 INI 函数来获取 myapptempdir 配置项的值呢?我研究了一下,发现在大多数情况下,定制配置项不能使用这些方法来获取。然而,使用 get_cfg_var 函数却是可以访问的。

    为使这个方法更加简单,将对变量的访问封装在第二个函数中,该函数使用配置键名及一个缺省值作为参数,如下所示。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

    清单 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 文件中调整数据却很困难,在一些情况下甚至

来源:http://www.tulaoshi.com/n/20160129/1489862.html

延伸阅读
标签: PHP
  PHP功能的另外一个优势是其调用已有Java对象方法的能力。通过此项功能可将PHP集成进已有的基于Java的应用程序。如果你正在工作场合推广PHP ,这项功能尤其显得时髦。“Java无处不在。” 为实现此功能,你需要在服务器上安装Java虚拟机(JVM)。如果你将安装(或已安装)来自Sun、Kaffe、IBM或Blackdown的JDK,则可以迅速开始工作。 &...
标签: ASP
  如果不对IIS4进行应用程序的隔离,那么我们运行ASP程序时将可能发生奇怪的现象,两个应用程序,比如说聊天 室,在不同的聊天室里的朋友竟可以相互对话,这就是因为没有进行应用程序隔离的缘故,因为两个聊天室共用了同一个 Session和Application对象。所以混在一起了。 先在说说怎么样配置IIS4来实现应用程序的隔离。...
标签: PHP
  大多数开发者认为面相对象的程序设计(OOP)思想和PHP是一对矛盾,但实际上,PHP封装了开发者在其应用程序中使用OOP技术的所有功能。为了证明这一点,让我们举一个经典的Vehicle(车辆)例子,其PHP类如下: class Vehicle {    // Stuff goes here! } 在我们新建的Vehicle类中,用方法(即PHP函数)来联系我们的应用程序...
标签: PHP
作者 Kevin Kardasz、Vadim Kudryavtsev、Robert Mark、Mikhail Seliverstov 麦吉尔大学的开发与校友关系部如何使用 PHP 和 Oracle 在网上支持多达 16 万名用户 在麦吉尔大学(位于加拿大魁北克省的蒙特利尔)的开发与校友关系部,我们正在使用行业级的 PHP 应用程序和 Oracle9 i ,将范围广泛的多层次服务转移到 Web 上,...
随着 Microsoft 的 .NET 框架的逐渐流行,许多开发人员迫切想了解关于将 .NET 应用程序与 Oracle 集成的最好的方式的信息 不仅在基本的连通性方面,还包括与使用 Visual Studio.NET (VS.NET) 进行有效的应用程序开发的关系。 在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程,包括: 如何...

经验教程

642

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部