使用PHP的htaccess环境变量替代方案

时间:2013-08-17 13:09:40

标签: php apache .htaccess environment-variables

我一直在.htaccess文件中使用setEnv,但是webhost最近将服务器更新为PHP 5.4,从那以后我的网站由于使用了setEnv而崩溃了。他们告诉我该函数已在PHP 5.4中弃用,但我没有在任何地方看到这个。

任何人都可以指导我另一种定义环境变量的方法,可以用来检索所有页面上的包含文件而不改变路径。

我一直在使用这样的东西:

// in .htaccess file
SetEnv INC_FILE path\include.php

// in every relevant .php file
require_once(getenv('INC_FILE'));

由于此代码,可以轻松地将文件移动到不同的环境开发,测试,生产 - 而无需更改任何文件内容。这也是目的。

由于我无法使用此功能,您可以推荐哪些替代方案。 其他方式也可以做类似的任务。

感谢。

1 个答案:

答案 0 :(得分:1)

的mod_rewrite

根据您的服务器设置,可以使用mod_rewrite来设置环境变量,但即使它有效,您也可能遇到problems with redirects和其他内容。

<强>的.htaccess

RewriteRule ^ - [L,E=INC_FILE:stats\\stats.php] 

<强> app.php

require_once getenv('INC_FILE');

PHP配置文件

另一种选择当然是使用.php配置文件。但是,使该配置文件中定义的值自动可用于所有脚本(就像环境变量一样),需要进行一些php.ini调整。使用auto_preped_file选项,您可以定义在任何其他php文件之前解析的文件。

使用自动预先

<强>的php.ini

auto_prepend_file = "path\to\your\config\file.php"

或者,也可以通过 .htaccess 设置值:

php_value auto_prepend_file "path\to\your\config\file.php"

<强>的config.php

// you could for example use a constant
define('INC_FILE', 'path\include.php');

// or use putenv() if you want to continue using getenv()
putenv('INC_FILE=path\include.php');

<强> app.php

require_once INC_FILE;
// or
require_once getenv('INC_FILE');

使用手册include

如果您不能/不想使用auto_prepend_file,那么您必须将配置文件包含在需要值的ever文件中:

<强> app.php

require_once 'path\to\your\config\file.php';

require_once INC_FILE;
// or
require_once getenv('INC_FILE');

PHP.ini配置变量

关于你在评论中提出的问题,不,你不能在php.ini配置文件中定义环境变量,但你可以轻松添加自定义配置变量,可以使用get_cfg_var()来读取,虽然它不好这样做的做法。例如:

<强>的php.ini

[MyCustomSettings]
my_custom_settings.inc_file = "path\include.php"

<强> app.php

require_once get_cfg_var('my_custom_settings.inc_file');