【问题标题】:htaccess environmental variable alternative with PHPhtaccess 环境变量替代 PHP
【发布时间】:2023-03-08 15:35:01
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 定义“崩溃”?错误日志说什么?无论如何,getenv 在 PHP 5.4 中运行良好,而不是 deprecated。您的示例在我的本地测试环境中使用 Apache 2.4.3 和 PHP 5.4.14/18 对我来说效果很好。也许他们需要更新 Apache 和/或 mod_env。
  • 内部服务器错误 500 是错误。我在任何地方都看不到它应该被弃用。
  • 但是 setEnv 可能是一个 Apache 函数——我猜。由于 Apache 更新,它是否已被弃用?我也没有在任何地方看到这个。
  • Apache 错误日志应该为您提供有关该问题的更多详细信息。如果您无法直接访问这些日志文件,请询问您的托管商。 SetEnvmod_env 模块提供。因此,如果那个单曲引起了问题,那么mod_env 中可能有一个错误,或者它已经过时,不再与使用的 Apache 版本兼容,或者它可能被禁用/删除等等......这几乎是不可能的至少在没有看到 Apache 错误日志的情况下告诉我们。
  • 我的虚拟主机告诉我他们无法激活该模块 - 这意味着我必须找到替代解决方案。任何人都可以提出解决方案,例如用PHP或其他解决方案编码(可以通过在php.ini中设置环境变量来解决)?

标签: php apache .htaccess environment-variables


【解决方案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');

使用手册包含

如果您不能/不想使用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 配置变量

关于您在 cmets 中的问题,不,您不能在 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');

【讨论】:

  • 你真是个天才 :-) 我将介绍不同的解决方案并测试哪一个最有效。至少我已经发现 php.ini 解决方案中的 autoprepend 有效。非常感谢!
猜你喜欢
  • 2020-02-16
  • 2013-06-09
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
相关资源
最近更新 更多