0

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

由于此代码,可以很容易地在不同的环境开发、测试、生产中移动文件 - 无需更改任何文件内容。这也是目的。

您可以推荐哪些替代品,因为我无法使用此功能。也欢迎使用替代方法来完成类似任务。

谢谢。

4

1 回答 1

1

mod_rewrite

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

.htaccess

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

应用程序.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"

配置文件

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

应用程序.php

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

使用手动包含

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

应用程序.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"

应用程序.php

require_once get_cfg_var('my_custom_settings.inc_file');
于 2013-08-19T20:21:55.780 回答