跳转至

常见问题

本 FAQ 汇总了 MRBS 已开放和已关闭支持 issues 中反复出现的问题。答案已针对 MRBS 1.12.2 核实;旧的解决方法不会仅因曾在某个 issue 中出现就被收录。

如何选择此常见问题解答

该审查涵盖至少带有以下标签之一的问题:Help, Help from scratch, LDAP help need, Problems with room's capacity, support, spanish help, support request, help wanted, 和custom view help。

截至 2026 年 7 月 26 日,仅support request标签就包含 3,076 个 issue:1,590 个未关闭,1,486 个已关闭。许多是导入的历史案例、一次性定制、功能请求或没有确认答案的问题。下面仅包含重复出现的问题以及对 1.12.2 仍然有用的答案。问题链接提供出处,而不是当前配置参考的替代品。

安装与诊断

为什么我看到空白页或 HTTP 500?

首先阅读网络服务器和PHP错误日志。空白页只是可见的症状;有用的错误通常在日志中。然后检查:

  1. 支持的PHP版本和所需的扩展;
  2. config.inc.php 与 php -l config.inc.php;
  3. 数据库连接和匹配的PDO驱动程序;
  4. 文件权限和活动的PHP配置;和
  5. 失败的请求是否到达预期的 MRBS 安装。

不要在生产系统上启用公共 PHP 错误显示,也不要将凭据粘贴到问题中。请参阅故障排除。原始的支持案例#1007没有经过确认的特定于产品的修复,这就是为什么这个答案从本地日志的证据开始。

为什么在 cPanel 或共享主机上数据库登录失败?

使用托管控制面板创建的确切数据库和用户名。 cPanel 通常会在两者前面加上托管帐户名称前缀。还要验证用户是否具有该数据库的权限。 SQLSTATE[28000] 或“用户拒绝访问”是数据库身份验证或授权错误,而不是 MRBS 表错误。

保持 $db_database、$db_login 和 $db_password 与控制面板值一致。仅在连接成功后才创建架构。请参阅问题#3801和安装。

为什么配置更改没有效果?

检查您是否编辑了此部署和站点加载的 config.inc.php。后来分配的值会覆盖之前的值。为现有区域保存的设置存在于数据库中;更改 areadefaults.inc.php 仅更改新区域的默认值。在多站点模式下,确认所选站点及其配置。最后,在适用的情况下清除或重新启动 PHP 操作码缓存。

请参阅深入了解 config.inc.php和故障排除。

登录并LDAP

如何要求用户在看到日历之前先登录?

设定:

$auth['deny_public_access'] = true;

请在浏览器隐私窗口中测试未登录用户看到的页面。此设置会阻止访问公共日历,但不会选择或配置身份验证方法。请参阅问题#3979和用户和权限。

为什么MRBS说缺少PHPLDAP扩展名?

在 Web 服务器使用的 PHP 环境中安装或启用 LDAP 扩展,然后重启该环境。命令行 PHP 和 Web 服务器的 PHP 可能加载不同的 php.ini 文件,因此应检查 Web 环境,而不能只依赖 php -m。具体的软件包名称和重启命令取决于操作系统和 PHP 安装方式。

请参阅问题#1022和LDAP认证。

如何找到正确的 LDAP 基本 DN 和用户 DN?

不要从组织名称推断目录树。使用LDAP客户端(例如ldapsearch)进行查询,使用MRBS将使用的相同服务器、TLS模式、基本DN、搜索身份和用户名属性。 Active Directory常用sAMAccountName; OpenLDAP通常使用uid,但目录模式是权威的。

将搜索身份与最终用户绑定分开测试,并且切勿发布绑定密码。错误的 DN 是 问题 #1083 中的根本原因。

如何将LDAP的访问权限限制为一个组?

使用$ldap_filter决定用户可以访问MRBS哪个目录。对于成员资格存储在用户对象上的 Active Directory 布局,过滤器可以匹配 memberof。对于将成员资格存储在组对象上的 OpenLDAP 样式布局,请配置 $ldap_filter_base_dn、$ldap_filter_user_attr 和适当的 $ldap_filter。

使用目录中的确切 DN 和属性名称,测试允许和拒绝的帐户,并确认嵌套组的行为方式。这些访问过滤器与 $ldap_admin_group_dn 分开,后者标识 MRBS 管理员。请参阅问题#2033和LDAP认证。

LDAP 登录有效;为什么用户不是MRBS管理员?

设置 $ldap_admin_group_dn 时,MRBS 使用该组而不是 $auth['admin']。确认:

  • 完整的组 DN;
  • 默认为$ldap_group_member_attrib — memberof;
  • LDAP搜索身份可以读取用户的会员属性;和
  • 目录是否返回直接成员资格或嵌套成员资格。

仅在受保护的测试环境中暂时启用LDAP诊断,然后将其删除。在问题#3943中,搜索身份最初无法读取所需的群组信息。

尽管密码绑定有效,为什么在MRBS升级后LDAP会失败?

当前 MRBS 可能需要搜索用户的 DN 和属性,例如显示名称或电子邮件。如果匿名搜索不可用,请配置:

$ldap_dn_search_attrib = 'sAMAccountName'; // use the directory's real attribute
$ldap_dn_search_dn = 'search-account@example.org';
$ldap_dn_search_password = 'read-from-a-protected-secret';

仅向搜索标识授予其所需的读取权限。将其密码保留在文档根目录之外,并将其包含在受保护的配置文件中。请参阅问题#3895。

MRBS可以搜索多个LDAP目录吗?

是的。许多LDAP设置,包括$ldap_host、$ldap_port、$ldap_base_dn和搜索属性,都可以是数组。如果一个支持数组的 LDAP 参数是一个数组,则每个支持数组的参数必须具有相同数量的元素,每个目录一个。

测试每个目录的登录、属性查找、访问过滤器和管理员映射。请参阅问题#3981 和systemdefaults.inc.php 中的LDAP 部分。

预订、房间和权限

为什么自定义预订字段适用于一次预订但不适用于一系列预订?

每个自定义预订列必须同时存在于 entry 和 repeat 表中,且具有相同的名称、类型、长度、可为空性和默认值。将两列视为一个架构更改。

请参阅问题#3986和自定义字段。

房间容量是否会妨碍预订过多的参与者?

否,房间capacity值为MRBS显示的房间元数据;它不会自动与预订的与会者人数进行比较。如果站点必须强制执行此规则,请将相同的参与者计数自定义字段添加到 entry 和 repeat,然后实施和维护服务器端验证。仅客户端验证是不够的。

如果启用注册,则其事件容量控制该事件的注册;它不会自动选择大小合适的房间。请参阅 问题 #1055、区域和房间 和 自定义字段。

一个区域可以在早上使用 30 分钟的时段,然后再使用 15 分钟的时段吗?

不通过标准区域配置。一个区域只有一次分辨率。使用全天所需的最小分辨率,或者在资源和运营模型允许的情况下创建单独的区域。与时间相关的解决方案需要维护代码定制。

请参阅问题 #4011。

为什么预订创建者看不到“编辑”或“删除”?

通过房间查看现有区域的预订政策。过去预订的提前/未来编辑限制和规则甚至可以从创建者那里删除这些操作。还要确认登录身份、所有权、管理员状态以及该项目是单次出现还是一系列出现。

更改 areadefaults.inc.php 不会更新现有区域。请参阅问题#3994和预订政策。

多房间预订中选择的房间是否永久链接?

MRBS 创建单独的预订条目。如果其中一个组后来被编辑或删除,则其他组就不是持久链接组。不要将所有选定房间的生成列表复制到每个描述中,除非站点在创建、编辑和删除操作过程中也维护该列表。

请参阅问题#2223。

我可以添加更多访问级别或仅授予自定义角色报告访问权限吗?

标准 MRBS 使用访问级别 0、1 和 2。其他数字角色和页面特定权限需要在每次升级后进行本地授权自定义、测试和审核。旧问题的补丁不是受支持的配置选项。

在满足要求的情况下,更喜欢标准区域/房间授权和具有狭窄许可名单的公开报告。请参阅问题#3999和用户和权限。

电子邮件、语言和时间

为什么电子邮件调试报告“无收件人”?

启用至少一种预期接收者角色:

$mail_settings['admin_on_bookings'] = true;
$mail_settings['area_admin_on_bookings'] = true;
$mail_settings['room_admin_on_bookings'] = true;
$mail_settings['booker'] = true;

对于第一个选项,设置$mail_settings['recipients']。对于区域和房间管理员,请在MRBS中维护他们的电子邮件地址。 LDAP 当预订者收到通知时,用户需要可读且正确映射的电子邮件属性。然后分别测试创建、编辑和删除事件。

请参阅问题#3795和电子邮件通知。

我应该为 $override_locale 使用哪个值?

使用 BCP 47 语言标记,例如 en、en-GB、de、fr 或 es,而不是操作系统区域设置字符串。服务器仍必须具有合适的区域设置数据。在类 Unix 系统上,locale -a 显示已安装的区域设置。

将 $override_locale 留空以使用 MRBS 自动选择。请参阅问题#3984和文本和翻译。

为什么显示的时间正好错误一小时?

按顺序检查:

  1. 房间和区域时区;
  2. 全球$timezone;
  3. PHP的时区和时区数据包;
  4. 受影响日期的夏令时过渡;和
  5. 存储的时间戳或仅显示的时间戳是否错误。

使用 IANA 时区,例如 Europe/Berlin,而不是固定的 UTC 偏移量。老问题提到了特定于版本的格式化解决方法; $force_strftime 不是 MRBS 1.12.2 中的设置,不得从 问题#3967 复制。请参阅故障排除。

如何自定义或翻译帮助页面和界面文本?

应用程序内帮助页面从web/site_faq/加载。例如,西班牙语使用site_faq_es.html;当必须明确选择语言时设置$faqfilelang = 'es'。为每种支持的语言保留完整的翻译文件。

对于简短的界面更改,请在config.inc.php中使用$vocab_override[LANG][TOKEN],而不是编辑web/lang/lang.*。自定义数据库字段使用诸如entry.catering之类的标记。

请参阅问题#2432和文本和翻译。

报告、多站点和定制

计划作业如何导出报告或 iCalendar 数据?

默认情况下禁用未经身份验证的 GET 报告。如果信息可能以这种方式暴露,请故意启用它们并通过以下方式限制它们:

$report_unauthenticated_get_enabled = true;
$report_keys_enabled = true;
$report_keys = ['a-long-random-secret'];
$report_open_areas = [1];
$report_open_rooms = [];

使用不可猜测的密钥、狭窄的区域/房间允许列表、HTTPS 和受保护的调度程序。注销时测试确切的输出。报告 URL 实际上是一种凭证,可能会通过日志或历史记录泄露。

请参阅问题#3742和搜索和报告。

多个MRBS站点可以共享一组表吗?

不,如果他们的预订和设置必须分开,则不行。每个站点都需要自己的 MRBS 表,可以在单独的数据库中,也可以在共享数据库中具有唯一的 $db_tbl_prefix。代码可以共享,但表集不能重叠。

使用 MRBS 架构脚本创建每个站点的表并一致地应用其前缀。请参阅问题#3917和多站点。

每个请求的视图或主题是否都可以通过配置获得?

不需要。诸如将附加房间文本插入特定日历布局、链接其他独立预订、添加访问级别或替换主题架构等请求可能需要更改代码。在应用支持问题的补丁之前:

  • 检查1.12.2是否已有设置或扩展点;
  • 将更改保留在生成文件和供应商文件之外;
  • 添加对创建、编辑、删除、隐私和权限的测试;和
  • 记录下定制以便下次升级。

示例包括 自定义视图问题 #2223 和 主题请求#22。