仅定义PHP常量一次

时间:2014-03-11 18:16:50

标签: php

我使用php.ini(在nginx上)存储PHP的数据库访问凭据,旨在从.php文件中获取此数据。

我想一次(仅)设置这些值的全局常量,并使所有脚本都可以访问它们。

我目前正在执行如下所示的操作,此脚本是数据库接口脚本的require_once()。它可以工作,但是在下一个请求或页面调用dbinterface脚本时,必须再次定义常量,可能是因为范围问题(我可以收集)。

除了使用APC之外,还有一些方法可以定义这些吗?

<?php
    if( !configLoaded() )
        loadConfig();


    function loadConfig()
    {
        $vars = array("A","B","C");

        foreach( $vars as $v )  
           define( $v, get_cfg_var( "ubaza.cfg.$v" ) );
    }


    function configLoaded() //returns false as soon as the caller script exits
    {
        return defined("A") && defined("B") && defined("C");
    }
?>

3 个答案:

答案 0 :(得分:4)

您还可以在htaccess中设置变量并在PHP中获取

SetEnv YOURVAR value

用PHP获取它:

print $_SERVER["YOURVAR"];

然而,因为你想拥有来自php.ini的值的常量 - 不确定你是否能够在php.ini的htaccess中设置它们

答案 1 :(得分:1)

每次运行脚本时都必须对常量进行定义,因为当脚本完成后,垃圾回收会清除它。

如果你需要确保每个脚本只定义一次常量,那么你正确地做到了 - 当前的方法是完全可以接受的。

但是,如果您想要定义一次常量而不再担心它们,永远 - 请查看hidef。

它允许您将常量放在.ini文件中,因此在执行任何脚本之前已经定义了它们。 巧合的是,它也是使用常量的最快方法,尽管它需要更多的RAM。

答案 2 :(得分:1)

在运行其他任何东西之前使用auto_prepend_file来运行脚本怎么样?

http://ie1.php.net/manual/en/ini.core.php#ini.auto-prepend-file

这样你可以编写一次脚本,然后在设置时,它将定义所有脚本 运行开始时的常量。