只定义一次 PHP 常量

jmn*_*mng 2 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");
    }
?>
Run Code Online (Sandbox Code Playgroud)

Lup*_*pin 5

你也可以在 htaccess 中设置一个变量并在 PHP 中获取它

SetEnv YOURVAR value
Run Code Online (Sandbox Code Playgroud)

并在 PHP 中获取它:

print $_SERVER["YOURVAR"];
Run Code Online (Sandbox Code Playgroud)

但是,由于您希望使用来自 php.ini 的值来获取常量 - 不确定您是否能够在来自 php.ini 的 htaccess 中设置它们

  • @derelict,我不是安全方面的大专家,但是,正如我所看到的,最好将它存储在 .php 文件中并提高安全性,您还可以将它写在一个单独的文件中而不是 htaccess(通常在 web 根目录中)并将其包含到 htaccess 中,这样凭据文件将无法访问,为此您可以在 htaccess 中使用 `Include /var/home/sql.cnf`,其中 sql.cnf 文件实际上是有数据库信息(http://httpd.apache.org/docs/2.0/mod/core.html#include)。有什么想法吗?? (2认同)