1

让我把满足的要求放在第一位

一个 PHP 网关和一组使用许多常量的请求处理程序,这些常量目前我在constants.phpwith中定义define('conts','value');

我可以在属性文件中定义这个常量,比如

const1 =val1
const2 = val2
const3 = val3

在一些外部文件中说gateway.propertiesdefine()在运行时将其加载到。这可以是一次性的操作,以便 php 创建的尽可能多的线程可以进一步访问这个常量,而无需再次重新加载它?

我不知道这是否真的可能,我想要一个专家建议。

谢谢

4

5 回答 5

1

我会通过将结果对象填充到memcached中来处理这个问题。

这显然有一些开销。您将需要权衡它是否对您的情况有意义。对于 3 个变量,它根本没有意义。对于 300,000,也许它会。测试一下看看。

于 2012-11-02T05:18:40.957 回答
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);
于 2012-11-02T05:25:43.407 回答
0

您可以阅读每一行,解析出 = 并在 for 循环中定义。

于 2012-11-02T05:18:13.613 回答
0

最简单的方法是将您的值存储在一个.ini文件中,然后使用parse_ini_file(). ini 文件如下所示:

var1 = 'blah blah blah'
var2 = 'more blah'

PHP 非常快地读取这些文件。我建议,不要将所有值都转换为常量,而是将从 .ini 文件中获得的关联数组存储在单个全局变量中。让工作,同样的知名度。

如果你真的设置缓存,你可以使用 APC 缓存。它会节省几毫秒,但除非您谈论的是一组相当大的值,否则它不会有什么不同。define()如果您坚持将它们全部转换为常量,您仍然必须调用每个值。保存单个全局关联数组仍然要快得多。

于 2012-11-02T05:29:24.837 回答
0

考虑使用全局易于访问的静态类。
您可以创建一个只有公共静态成员的类,并且 CLASS::init() 调用可选配置文件来替换变量。
如果缺少该值,它将保持默认值。
因此,您可以使用 CLASS:$STATIC_VAR 从任何地方访问配置

初始化函数:

            $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;
                }
            }
于 2016-10-14T20:42:00.800 回答