用php.ini声明全局变量

时间:2011-02-19 18:06:34

标签: variables global php

是否可以在php.ini文件中保留变量。就像我们使用.net中的web.config一样。我喜欢在php.ini中保留一个标志类型变量,并将其用于不同的项目。

8 个答案:

答案 0 :(得分:20)

无法在普通的php.ini文件(或.htaccess等效项)中设置用户级变量。有一些PECL模块允许这样做,例如hidefhttp://pecl.php.net/package/hidef) - 尽管这些模块需要在您使用的每个安装上安装。

使用auto_prepend_file包含(或预先包含)文件是非常有可能的 - 尽管每次PHP请求都会这样。

经常做的是将环境变量设置为Web服务器进程的一部分,可以从PHP中读取。在Apache中,使用SetEnv模块非常简单。

SetEnv PRODUCTION_SERVER 1

在PHP中访问它:

if ($_ENV['PRODUCTION_SERVER']) {...}  // or getenv('PRODUCTION_SERVER')

答案 1 :(得分:5)

你看过get_cfg_var()吗?

我需要做类似的事情,这能够为我做到这一点。

答案 2 :(得分:4)

不。

您可以使用auto_prepend_file指令自动包含一个文件,尽管它使用了include_path,但您需要指定完整路径。

但是,明确包含/要求相关文件可能更透明。

答案 3 :(得分:1)

我发现一种将有限数量的全局变量传递给引导脚本有用的技术是利用.htaccess文件中的SetEnv指令。优点是您设置的变量将可用于该目录中的任何脚本,以及其下的子目录中的任何脚本。

您可以将SetEnv varibale与配置文件的位置一起使用,例如:

在.htaccess中:

SetEnv init_path /home/hendepher/TestApp/init/init.php

在你的.php文章中:

<?php
    if(!getenv('init_path')) throw new Exception('Must set init_path in .htaccess');
    require_once getenv('init_path');
    .
    .
    .

?>

如果您的测试目录需要不同的全局变量初始化,只需在测试目录中添加另一个.htaccess文件:

SetEnv init_path /home/hendepher/TestApp/init/testing_init.php

与使用'auto_prepend_file'指令相反,这样做是因为您的全局配置脚本不是由服务器上的所有php应用程序运行的:有些可能不需要它。

答案 4 :(得分:1)

接受的回复也对我有用,只有一个改变。

我没有在早期版本上对此进行测试,但在我的环境(php 5.4.22)中,这不会出现在$ _ENV中,而是出现在$ _SERVER中。

在我的.htacess文件中:

SetEnv PRODUCTION_SERVER 0.  

我的PHP代码:

$production="PRODUCTION";
if (!isset($_SERVER['PRODUCTION_SERVER']) || $_SERVER['PRODUCTION_SERVER'] != 1){
    $production="DEVELOPMENT";
}

答案 5 :(得分:0)

我认为这不是存储变量的好地方。 php.ini用于存储PHP本身的配置而不是您的应用程序。您应该考虑将共享变量放入.inc文件中,并将其包括在内。

答案 6 :(得分:0)

您考虑过hidef了吗?

  

允许在简单的ini文件中定义用户定义的常量,   然后像内部常量一样处理,没有任何   通常的性能处罚。

答案 7 :(得分:0)

补充@Ascherer答案,请使用get_cfg_var()将自定义变量保存在自定义php.ini中(由您创建的变量,而不是正式的PHP ini指令)。例如:

在php.ini中:custom_variable = "abcde"
在任何php脚本中:get_cfg_var('custom_variable')返回abcde

我在本地开发人员的一个小项目中使用它。当我通过php -S localhost:8000 -c php.ini运行本地服务器(而不是本地运行Apache服务器)时,调用一些配置常量是一个不错的选择。在生产中,这些常量在.htaccess中设置。

相关问题