我有一个文件,其中包含我已放置在my_app.ini
属性文件中的应用程序特定属性(例如超时等),我使用parse_ini_file()
读取该文件。
我应该如何/在哪里为所有用户请求运行此代码一次(我不希望我的应用程序在每次请求时都读取.ini
文件)?
我将配置文件读取代码放在一个单独的PHP中,并在所有需要访问配置变量的页面中包含include_once
/ require_once
。但是:
require_once('config_setup.php')
)
?require_once
/ include_once
在所有用户中只执行一次
请求?我感兴趣的是可能会听到其他(更好)的方法。
答案 0 :(得分:8)
PHP不会在多个请求之间保持状态。这意味着独立的PHP无法在请求之间的内存中存储变量。会话保存到磁盘(默认情况下),配置文件需要重新分析等等。
但是,您可以使用APC或Memcache / 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可以通过缓存文件直到更改为您提供一个小优势。