我一直在.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'));
由于此代码,可以轻松地将文件移动到不同的环境开发,测试,生产 - 而无需更改任何文件内容。这也是目的。
由于我无法使用此功能,您可以推荐哪些替代方案。 其他方式也可以做类似的任务。
感谢。
答案 0 :(得分:1)
根据您的服务器设置,可以使用mod_rewrite
来设置环境变量,但即使它有效,您也可能遇到problems with redirects和其他内容。
<强>的.htaccess 强>
RewriteRule ^ - [L,E=INC_FILE:stats\\stats.php]
<强> app.php 强>
require_once getenv('INC_FILE');
另一种选择当然是使用.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
,那么您必须将配置文件包含在需要值的ever文件中:
<强> app.php 强>
require_once 'path\to\your\config\file.php';
require_once INC_FILE;
// or
require_once getenv('INC_FILE');
关于你在评论中提出的问题,不,你不能在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');