我有一些通过 AJAX 调用调用的 php 文件。它们都有一个指向我的 config.php 的 URL。现在我遇到的问题是,当我在服务器上部署新版本时,我总是必须手动更改该配置文件的 URL。
本地路径:
define('__ROOT__', $_SERVER["DOCUMENT_ROOT"].'/mywebsite');
服务器路径:
define('__ROOT__', $_SERVER["DOCUMENT_ROOT"].'/../dev.my-website.tld/Modules/');
我想跟踪所有这些 PHP 文件的更改。我正在寻找自动更改此路径的解决方案。
例如 这是我当前的工作流程:
本地环境:
- (路径版本 A)
- 更改代码
- git add、git commit、git merge、git Push 到我的服务器
服务器:
- git重置--硬
- 更改版本 B 的路径
最佳答案
您正在尝试在开发和实际运行之间运行不同的代码库,这是不建议的——它们应该是相同的。我解决这个问题的方法是使用环境变量来指定应该加载几个配置文件中的哪一个。
在我的 Apache 虚拟主机中,我做了这样的事情:
SetEnv ENVIRONMENT_NAME local
然后我使用一个函数来读取环境名称:
function getEnvironmentName()
{
$envKeyName = 'ENVIRONMENT_NAME';
$envName = isset($_SERVER[$envKeyName]) ? $_SERVER[$envKeyName] : null;
if (!$envName)
{
throw new \Exception('No environment name found, cannot proceed');
}
return $envName;
}
然后可以在配置文件中使用该环境名称来包含
,或从环境中键入的单个数组中检索值。
我经常将特定于环境的设置保存在名为 configs/
的文件夹中,但您可以将它们存储在应用程序中有意义的任何位置。例如,您可以拥有以下文件:
// This is /configs/local.php
return array(
'path' => '/mywebsite',
// As many key-values as you want
);
然后您可以执行此操作(假设您的前端 Controller 在项目中深一层,例如在 /web/index.php
中):
$root = dirname(__DIR__);
$config = include($root . '/configs/' . getEnvironmentName() . '.php');
然后,您将可以访问 $config
中适当的每个环境设置。
关于php - 如何在 PHP 环境之间更改不同的配置设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600408/