【发布时间】:2011-06-30 11:14:14
【问题描述】:
是否可以将变量保存在 php.ini 文件中。就像我们对 .net 中的 web.config 所做的那样。我喜欢在 php.ini 中保留一个标志类型变量并将其用于不同的项目。
【问题讨论】:
-
假设本地访问(考虑到您提到的 php.ini)只需使用本地文件并在您的项目中引用它(/usr/bin/local/myconfig.ini 或 C:\PHP\myconfig .ini)
是否可以将变量保存在 php.ini 文件中。就像我们对 .net 中的 web.config 所做的那样。我喜欢在 php.ini 中保留一个标志类型变量并将其用于不同的项目。
【问题讨论】:
无法在普通的 php.ini 文件(或 .htaccess 等效文件)中设置用户级变量。有一些 PECL 模块确实允许这样做,例如 hidef (http://pecl.php.net/package/hidef) - 尽管在您使用的每个安装中都需要安装这些模块。
包含(或预包含)带有auto_prepend_file 的文件是很有可能的——尽管这将在每个 PHP 请求中。
经常做的是将环境变量设置为网络服务器进程的一部分,可以从 PHP 中读取。在 Apache 中,这很容易,使用 SetEnv 模块。
SetEnv PRODUCTION_SERVER 1
并在 PHP 中访问它:
if ($_ENV['PRODUCTION_SERVER']) {...} // or getenv('PRODUCTION_SERVER')
【讨论】:
ini_get 和 getenv 采用 same 时间(在 10M 循环之后)。字符串稍长的字符串(等等)略有不同(时间更长)。
get_cfg_var() 将从 php,ini 返回一个值
你看过get_cfg_var()吗?
我需要做类似的事情,而这可以为我做。
【讨论】:
【讨论】:
我发现将有限数量的全局变量传递给引导脚本很有用的一种技术是利用 .htaccess 文件中的 SetEnv 指令。优点是您设置的变量将可用于该目录中的任何脚本,以及该目录下的子目录中的任何脚本。
您可以使用带有配置文件位置的 SetEnv 变量,例如:
在 .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应用程序运行的:有些可能不需要它。
【讨论】:
接受的答案也对我有用,但有一个变化。
我没有在早期版本上对此进行测试,但在我的环境(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";
}
【讨论】:
我认为那不是存储变量的好地方。 php.ini 用于存储 PHP 本身的配置,而不是您的应用程序。您应该考虑将共享变量放入 .inc 文件中,然后将其包含在内。
【讨论】:
你考虑过hidef吗?
允许在简单的 ini 文件中定义用户定义的常量, 然后像内部常量一样处理,没有任何 通常的性能惩罚。
【讨论】:
php5-dev 是;之后,您可以使用pecl 命令进行安装。这是本网站的主题。
补充@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 中设置。
【讨论】: