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
// ...
每個不明顯的覆蓋都應該解釋為什麼安裝需要它。