htaccess环境变量替换PHP


htaccess environmental variable alternative with PHP

我一直在.htaccess文件中使用setEnv,但网络主机最近将服务器更新为PHP 5.4,从那以后,我的网站因使用setEnw而崩溃。他们告诉我,这个函数在PHP 5.4中已经被弃用,但我在任何地方都没有看到这方面的文档。

有人能告诉我另一种定义环境变量的方法吗?这种方法可以用来检索所有页面上的include文件,而无需更改路径。

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

// in .htaccess file
SetEnv INC_FILE path'include.php
// in every relevant .php file
require_once(getenv('INC_FILE'));

由于有了这些代码,在不更改任何文件内容的情况下,可以很容易地在不同的环境中移动文件——开发、测试和生产。这也是目的。

既然我不能使用这个功能,你可以推荐哪些替代方案。也欢迎采用其他方式来完成类似的任务。

谢谢。

mod_rewrite

根据您的服务器设置,可能会使用mod_rewrite来设置环境变量,但即使它有效,您也可能遇到重定向等问题。

.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');

使用手册包括

如果你不能/不想使用auto_prepend_file,那么你必须在需要值的任何文件中包括配置文件:

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');