config.inc.php深入¶
web/config.inc.php 是每个 MRBS 安装实例自己的配置文件。它定义站点特有的行为,通常还包含敏感信息。请将其作为生产配置管理,而不是当作应用程序源文件。
创建文件¶
MRBS 运送web/config.inc.php-sample,但故意不运送活动的config.inc.php。
从同一 MRBS 版本中的示例开始。不要将旧样本原样保留。
如何加载配置¶
共享引导程序按以下顺序加载配置:
systemdefaults.inc.phpareadefaults.inc.phpconfig.inc.phpsite_config.inc- 内部验证和兼容性处理
后面的分配会覆盖前面的分配。这就是为什么短的 config.inc.php 可以在不修改发布文件的情况下替换应用程序默认值。
flowchart LR
System[System defaults] --> Area[New-area defaults]
Area --> Local[config.inc.php]
Local --> Site[Site-specific config]
Site --> Check[Validation and compatibility]
Important
已存储在数据库中的面积值可通过房间进行编辑。更改 areadefaults.inc.php 或覆盖 config.inc.php 不会重写现有区域。
PHP语法¶
该配置是可执行的PHP。每个语句都以分号结尾。字符串可以使用单引号或双引号:
$timezone = 'Europe/Berlin';
$default_view = "week";
$kiosk_mode_enabled = false;
$search["count"] = 30;
使用真正的 PHP 布尔值,而不是字符串:
$mail_settings['disabled'] = false; // Correct
$mail_settings['disabled'] = "false"; // Wrong: this is a non-empty string
数组可以使用受支持的 PHP 语法:
不要添加结束 ?> 标签。它可能会引入意外输出并破坏标头或 cookie。
最低设置¶
新站点通常需要房间时区和数据库连接:
$timezone = 'Europe/Berlin';
$dbsys = 'mysql';
$db_host = 'localhost';
$db_database = 'mrbs';
$db_login = 'mrbs';
$db_password = 'replace-this-password';
$db_tbl_prefix = 'mrbs_';
$db_persist = false;
使用房间所在的时区。它可能与服务器时区不同。
数据库配置¶
选择数据库¶
或:
连接行为¶
localhost可以根据驱动程序选择Unix套接字。使用 127.0.0.1 强制 TCP MySQL。可以单独指定非标准端口:
PostgreSQL 具有多个模式的安装可以设置:
表前缀必须与安装的架构匹配:
默认情况下禁用持久连接。仅在衡量实际需求并了解它们与事务和锁的交互后才启用它们。
URL 和反向代理设置¶
MRBS 通常从请求中获取其 URL。当反向代理、路径前缀或不寻常的虚拟主机设置使其变得不可靠时,请从 systemdefaults.inc.php 复制相关 URL 设置并设置显式公共基础。
外部 URL 必须使用用户看到的方案和主机。配置代理以传递受信任的方案和主机信息,并拒绝不受信任的主机标头。
更改 URL 行为后,测试:
- 登录后重定向;
- 电子邮件中的链接;
- iCalendar URL;
- 信息亭出口链接;
- 多站点链接;和
- HTTP-到-HTTPS重定向。
身份验证和会话¶
身份验证验证身份; session 方法获取并保留它。
外部系统添加自己的设置,例如:
请勿将示例用户或密码复制到生产环境中。明确映射管理员访问权限并测试普通用户和管理员。请参阅认证。
访问控制¶
$auth下的设置控制公众可见性和特权预订行为:
$auth['deny_public_access'] = true;
$auth['only_admin_can_book'] = false;
$auth['admin_must_obey_policies'] = true;
一起查看相关设置。公共日历、公共报告、信息亭和私人预订可以公开不同的信息。
日历和界面¶
常见的全局覆盖包括:
$default_view = 'week';
$weekstarts = 1; // Monday
$display_mincals = true;
$show_timeline = true;
$kiosk_mode_enabled = false;
日期和时间格式是区域设置感知的。覆盖格式时复制完整的相关 $datetime_formats 条目,而不是部分重建它。
预订规则¶
许多预订规则都属于一个区域并在数据库中进行管理。全局设置可以跨区域施加限制或限制能力。
将策略覆盖保留在一个明确标记的部分中,并记录业务原因:
// Facilities policy: every user may hold at most 20 future bookings.
$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;
在策略边界测试定期预订、多日预订和管理员预订。
电子邮件¶
选择发送方式,并配置发件人、收件人、事件和连接:
$mail_settings['admin_backend'] = 'smtp';
$mail_settings['from'] = 'mrbs@example.org';
$mail_settings['booker'] = true;
$smtp_settings['host'] = 'mail.example.org';
$smtp_settings['port'] = 587;
$smtp_settings['auth'] = true;
$smtp_settings['secure'] = 'tls';
$smtp_settings['username'] = 'mrbs@example.org';
$smtp_settings['password'] = 'replace-this-password';
保持证书验证启用。请参阅电子邮件通知。
语言和当地用语¶
仅当浏览器协商不合适时才设置固定的默认语言:
覆盖单个标签而不进行编辑web/lang/lang.*:
$vocab_override['en']['mrbs'] = 'Resource Booking';
$vocab_override['de']['mrbs'] = 'Ressourcenbuchung';
$vocab_override['fr']['mrbs'] = 'Réservation de ressources';
$vocab_override['es']['mrbs'] = 'Reserva de recursos';
使用 $vocab_override 可以在升级过程中保留本地措辞。 文本和翻译 涵盖了完整的工作流程。
自定义字段¶
自定义数据库列可以通过配置进行标记和调整:
$vocab_override['en']['room.coffee_machine'] = 'Coffee machine';
$select_options['entry.catering'] = array(
'c' => 'Coffee',
's' => 'Sandwiches',
'h' => 'Hot lunch'
);
$is_mandatory_field['entry.catering'] = true;
$is_private_field['entry.refreshments'] = true;
必须首先完成数据库更改。 entry 自定义列需要 repeat 中的相同列。有关支持的类型、模式示例、验证、隐私、字段顺序和测试,请参阅自定义字段。
包含另一个文件中的机密¶
config.inc.php 可以包含另一个文件,但路径必须是绝对路径:
被包含的文件应只返回或赋予预期值,并确保 PHP 进程可读取。请将其放在 Web 服务器的公共文档根目录之外。
环境变量也可以显式读取:
验证所需值是否存在,而不是默默地接受空秘密。
多站点¶
多站点使用全局配置以及sites/<site>/下的特定于站点的配置。至少,每个站点都需要一个独立的表前缀:
身份验证、邮件、主题和其他设置可能因站点而异。请参阅多站点。
调试¶
仅暂时启用调试行为,切勿将其暴露给不受信任的用户。特定于集成的调试输出可以包含目录数据、标头、邮件服务器详细信息或个人信息。
保持禁用凭证日志记录:
升级安全维护¶
对于每个 MRBS 升级:
- 备份活动配置。
- 从新版本的
config.inc.php-sample开始。 - 将旧的覆盖与新的默认值进行比较。
- 仅传输有意设置。
- 删除兼容性检查报告的过时变量。
- 运行语法验证和功能测试。
避免将完整的旧默认设置复制到新配置中;这隐藏了新的默认值并使以后的升级变得困难。
验证清单¶
然后验证:
- 帮助上的应用程序和数据库版本;
- 数据库连接和表前缀;
- 房间时区和夏令时行为;
- 登录、注销、到期和管理员映射;
- 公共和私人观点;
- 创建、编辑、删除、重复和策略边界;
- 电子邮件发件人、收件人和 TLS;
- 使用报告、导出、信息亭和多站点;和
- 没有密码或私人数据的日志。
推荐的文件布局¶
保持文件简短并分组:
<?php
declare(strict_types=1);
namespace MRBS;
// Timezone
$timezone = 'Europe/Berlin';
// Database
$dbsys = 'mysql';
// ...
// Authentication
$auth['type'] = 'db';
$auth['session'] = 'php';
// Site-specific overrides
// ...
每个不明显的覆盖都应该解释为什么安装需要它。