PHP:仅为所有用户请求加载一组属性(来自配置文件)

时间:2011-03-13 18:46:27

标签: php include config configuration-files

我有一个文件,其中包含我已放置在my_app.ini属性文件中的应用程序特定属性(例如超时等),我使用parse_ini_file()读取该文件。

我应该如何/在哪里为所有用户请求运行此代码一次(我不希望我的应用程序在每次请求时都读取.ini文件)?

我将配置文件读取代码放在一个单独的PHP中,并在所有需要访问配置变量的页面中包含include_once / require_once。但是:

  1. 这是否意味着该文件将是 为每个不同的页面读取一次 (因为我有这么多次 多页 require_once('config_setup.php')) ?
  2. require_once / include_once     在所有用户中只执行一次     请求?
  3. 我感兴趣的是可能会听到其他(更好)的方法。

3 个答案:

答案 0 :(得分:8)

PHP不会在多个请求之间保持状态。这意味着独立的PHP无法在请求之间的内存中存储变量。会话保存到磁盘(默认情况下),配置文件需要重新分析等等。

但是,您可以使用APCMemcache / Memcached等扩展名将变量存储在内存中。需要在服务器上编译/安装这些扩展,以便它们的功能可用。

解析您的INI不会成为您的应用程序的瓶颈。为简单起见,每次解析它都更容易。你要保存的0.00001毫秒不值得。


include_once()require_once()与持久性无关。它只是告诉PHP只包含脚本,如果它在此请求期间尚未包含

答案 1 :(得分:0)

include / require_once表示文件只会在处理单个请求时加载一次;但是,每当收到新请求时,将在解析脚本时再次读取它。

此外,对于您要在此处执行的操作,您必须阅读配置并将其值放在会话中;然后,如果定义了在会话数组中使用的特定键,则无需重新解析该文件:

if ( !array_key_exists( 'config' , $_SESSION ) ) {
    $_SESSION['config'] = parse_ini_file ( 'whatever.ini' );
}

但是,这种方法有一个主要的缺点 - 如果配置文件发生更改,网站上已有的用户将继续使用该文件的先前版本。

答案 2 :(得分:0)

首先,在正常情况下阅读*.ini几乎不会成为任何服务的瓶颈,所以真的想想你所寻求的优势(哪些是......?)是否超过了劣势。我没有问题扫描INI文件,虽然我通常使用本机PHP进行一些设置,只要没有非PHP程序员需要访问它们。当然,人们现在要提倡像APC& amp; Memcached因为持久性问题,但如果你的文件对于ini文件(相对)很大,那只会是一个优势,否则如果你不使用它就只是开销。

我知道如何在Apache中没有扩展的请求中获得(标量)设置的唯一方法是在主机配置中执行一些SetEnv业务(因此只能从环境中读取标量值),但是那些是最好的kludgy,并要求服务器重新加载或重新启动以获取更改。

保留ini文件,或者可能使用带有设置的直接PHP文件,在这种情况下,APC可以通过缓存文件直到更改为您提供一个小优势。