我一直在.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');