让我把要求放在第一位
一个PHP网关,以及一组请求处理程序,它们使用当前我在constants.php
define('conts','value');
中定义的许多常量
我可以在属性文件中定义这个常量,比如
const1 =val1
const2 = val2
const3 = val3
在某个外部文件中说gateway.properties
并在运行时将其加载到define()
。这可能是一次性操作,因此php创建的线程可以进一步访问此常量,而不再重新加载它吗?
我不知道这是否真的可行,我想要一个专家建议。
由于
答案 0 :(得分:1)
我会通过在memcached中填充结果对象来处理这个问题。
显然有一些开销。您需要权衡它是否适合您的情况。对于3个变量,它根本没有意义。对于300,000,也许会。测试一下,看看。
答案 1 :(得分:1)
在PHP中,最好使用.ini文件并使用
http://php.net/manual/en/function.parse-ini-file.php 或者php.net/manual/en/function.parse-ini-string.php,如果你已经将文件读入字符串。
您可以使用apc将其缓存到内存中,如果尚未缓存,则使用回退来读取文件,然后缓存它。
<?php
$ini = apc_fetch('configuration');
if (!$ini) {
$ini = file_get_contents('path/to/ini.ini');
if ($ini) {
apc_store('configuration',$ini);
}
}
$config = parse_ini_string($ini);
答案 2 :(得分:0)
你可以读取每一行,解析出=并在for循环中定义。
答案 3 :(得分:0)
最简单的方法是将您的值存储在.ini
文件中,然后使用parse_ini_file()
读取该文件。 ini文件看起来像:
var1 = 'blah blah blah'
var2 = 'more blah'
PHP很快就会读取这些文件。我建议,不要将所有值都转换为常量,而是将从.ini文件中获得的关联数组存储在单个全局变量中。让工作,同样的可见性。
如果您真的设置了缓存,则可以使用APC缓存。它会节省几毫秒,但除非你在谈论一组相当大的值,否则它不会有所作为。如果您要坚持将它们全部转换为常量,那么您仍然需要为每个值调用define()
。保存单个全局关联数组的速度要快得多。
答案 4 :(得分:0)
考虑使用全局易于访问的静态类 您可以创建仅包含公共静态成员的类,CLASS :: init()调用可选配置文件来替换变量 如果缺少值,它将保持默认值 因此,您可以使用CLASS:$ STATIC_VAR
从任何位置访问配置init函数:
$vars = parse_ini_file(dirname(__FILE__) .'/'. $filename,true,INI_SCANNER_TYPED);
if ($vars)
{
foreach ($vars as $key => $val)
{
if (property_exists(get_called_class(),$key)) self::$$key=$val;
}
}