1

我最近开始将我的网站文件转换为适用于任何路径的文件。我正在使用虚拟主机来维护与.htaccess主生产服务器上相同的文件。包含我所有模型的初始化文件是动态编写的,以找出确切的系统文件路径并相应地更新网站,以便我可以将整个网站上传到任何地方。

问题在于配置文件。根据我是在开发还是在生产,我连接到不同的数据库。因此,我先做一个小检查,看看我是否正在运行本地服务器。为此,我将开发人员的命名约定存储在一个数组中,并循环遍历该数组以查看 HTTP_HOST 是否与某个值匹配。

例子:

$dev_names = array('localhost','.dev');

然而,当我前几天在 Chat 中提到这一点时,一位受人尊敬的用户告诉我他从不这样做。相反,他有 2 个配置文件并在正确的时间包含正确的文件?我不明白我的方法有什么问题?

你能指出我计划中的缺陷以帮助我了解专家吗?

(PS。作为奖励,你可以让我快速了解引导程序是如何工作的,听到这个词被抛出,不确定它是用 PHP 还是什么写的。)

4

3 回答 3

2

我认为您的方法没有任何问题,我想不出不这样做的充分理由。

我个人在我的 php 文件中执行此操作;

 if ($_SERVER['SERVER_NAME'] == 'localhost')
 {
    define('ENVIRONMENT', 'development');
 }
 else
 {
    define('ENVIRONMENT', 'production');
 }

然后我所有的配置都挂了。工作得非常好 - 意味着我在开发和生产之间移动时配置更改为零

于 2012-09-09T11:35:40.830 回答
1

我怀疑他的意思是您试图使您的网站可移植实际上并不是那么便携。如果将其移动到新服务器,则必须编辑配置文件。

具体来说,当您将配置文件检查到某种版本控制系统中时,这会成为一个问题,并且会影响其他人。理想情况下,你会使用这样的东西:

<?php // global config file which is checked into VCS
    $SETTING = "FOO";
    @include "config/local_settings.php"; // overrides go here
 ?>

您将所有本地设置覆盖都放在本地文件中,并且不要将其提交给 VCS。提交类似的东西是很常见的local_settings_example.php,让其他用户提前了解他们需要定制什么。如果你觉得很慷慨,你可以用评论的例子来填充它。

于 2012-09-09T11:40:00.563 回答
1

我只能在我喜欢的设置上投入 2 美分。主要是为了避免不希望的版本控制覆盖或冲突。在我看来,应该由服务器决定它是生产服务器还是开发服务器,而不是脚本中应该更改的变量。类似下面示例的方法甚至可以在完全不同的开发设置中为个人设置环境。

从设置变量开始

$_SERVER['SERVER_ADMIN'];

检查生产或开发环境。本地到您自己的名字,使用一个虚拟域,如 @dev.elop.loc(例如 dbf@dev.elop.loc),它永远不会真正存在。像这样的功能

// environment development check
function __env_dev($check) {
  return substr($_SERVER['SERVER_ADMIN'], -(strlen($check))) === $check; 
}
// false = production
// true = development
__env_dev("@dev.elop.loc");

可以判断环境。根据我的经验,生产服务器总是有一个 SERVER_ADMIN 变量集(如果没有,他们真的应该,即使它必须是默认的 you@example.com)到一个真实的地址,避免默认的 you@example.com。如果对实时服务器的支持在您自己的服务/维护中,将其更改为真实地址以将其与开发服务器区分开来并不是什么大不了的事;)

于 2012-09-09T12:42:52.303 回答