Gå till innehållet

config.inc.php på djupet

web/config.inc.php är konfigurationsfilen för den lokala MRBS-installationen. Den styr platsspecifikt beteende och innehåller vanligtvis känsliga uppgifter. Behandla den som produktionskonfiguration, inte som en källkodsfil.

Skapa filen

MRBS skickar web/config.inc.php-sample, men skickar medvetet inte en aktiv config.inc.php.

cd /var/www/mrbs
cp config.inc.php-sample config.inc.php

Börja med provet från samma MRBS-version. Bär inte ett gammalt prov oförändrat.

Hur konfigurationen laddas

Den delade bootstrap laddar konfigurationen i denna ordning:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. intern validering och kompatibilitetshantering

Senare uppdrag åsidosätter tidigare. Det är därför en kort config.inc.php kan ersätta applikationsstandarder utan att ändra utgivningsfiler.

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

Områdesvärden som redan är lagrade i databasen redigeras genom Rum. Att ändra areadefaults.inc.php eller en åsidosättning i config.inc.php skriver inte om befintliga områden.

PHP syntax

Konfigurationen är körbar PHP. Varje påstående avslutas med semikolon. Strängar kan använda enkla eller dubbla citattecken:

$timezone = 'Europe/Berlin';
$default_view = "week";
$kiosk_mode_enabled = false;
$search["count"] = 30;

Använd riktiga PHP booleans, inte strängar:

$mail_settings['disabled'] = false;   // Correct
$mail_settings['disabled'] = "false"; // Wrong: this is a non-empty string

Arrayer kan använda endera stödd PHP syntax:

$auth['admin'] = array('alice', 'bob');
$report_open_areas = [1, 3];

Lägg inte till en avslutande ?>-tagg. Det kan introducera oavsiktlig utdata och bryta rubriker eller cookies.

Minimiinställningar

En ny webbplats behöver normalt en tidszon och en databasanslutning:

$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;

Använd tidszonen där rummen ligger. Det kan skilja sig från serverns tidszon.

Databaskonfiguration

Välj databasen

$dbsys = 'mysql'; // MySQL or MariaDB

eller:

$dbsys = 'pgsql'; // PostgreSQL

Anslutningsbeteende

localhost kan välja ett Unix-uttag beroende på drivrutinen. Använd 127.0.0.1 för att tvinga fram TCP för MySQL. En icke-standardport kan specificeras separat:

$db_host = '127.0.0.1';
$db_port = 3306;

PostgreSQL installationer med flera scheman kan ställa in:

$db_schema = 'public';

Tabellprefixet måste matcha det installerade schemat:

$db_tbl_prefix = 'mrbs_';

Beständiga anslutningar är inaktiverade som standard. Aktivera dem först efter att ha mätt ett verkligt behov och förstått deras interaktion med transaktioner och lås.

URL och omvänd proxyinställningar

MRBS härleder vanligtvis sin URL från begäran. När en omvänd proxy, sökvägsprefix eller ovanlig virtuell värdinstallation gör detta opålitligt, kopiera de relevanta URL-inställningarna från systemdefaults.inc.php och ställ in en explicit offentlig bas.

Den externa URL:en måste använda schemat och värden som ses av användarna. Konfigurera proxyn så att den skickar betrodd schema och värdinformation, och avvisa opålitliga värdhuvuden.

Efter att ha ändrat URL-beteende, testa:

  • omdirigeringar efter inloggning;
  • länkar i e-post;
  • iCalendar-webbadresser;
  • kioskutgångslänkar;
  • flera webbplatslänkar; och
  • HTTP-till-HTTPS omdirigeringar.

Autentisering och sessioner

Autentisering verifierar identitet; sessionsmetoden hämtar och behåller den.

$auth["type"] = "db";
$auth["session"] = "php";

Externa system lägger till sina egna inställningar, till exempel:

$auth["type"] = "ldap";
$auth["session"] = "php";

Kopiera inte exempelanvändare eller lösenord till produktionen. Kartlägg administratörsåtkomst explicit och testa en normal användare såväl som en administratör. Se Autentisering.

Tillträdeskontroll

Inställningar under $auth styr offentlig synlighet och privilegierade bokningsbeteende:

$auth['deny_public_access'] = true;
$auth['only_admin_can_book'] = false;
$auth['admin_must_obey_policies'] = true;

Granska relaterade inställningar tillsammans. En offentlig kalender, offentlig rapport, kiosk och privat bokning kan avslöja olika information.

Kalender och gränssnitt

Vanliga globala åsidosättningar inkluderar:

$default_view = 'week';
$weekstarts = 1;                 // Monday
$display_mincals = true;
$show_timeline = true;
$kiosk_mode_enabled = false;

Datum- och tidsformateringen är lokalmedveten. Kopiera den fullständiga relevanta $datetime_formats-posten när du åsidosätter ett format istället för att delvis rekonstruera det.

Bokningsregler

Många bokningsregler tillhör ett område och administreras i databasen. Globala inställningar kan införa gränser över områden eller begränsa kapacitet.

Håll policyåsidosättningar i ett tydligt märkt avsnitt och dokumentera affärsorsaken:

// Facilities policy: every user may hold at most 20 future bookings.
$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;

Testa återkommande bokningar, flerdagars- och administratörsbokningar vid policygränsen.

E-post

Välj leveransmetod och konfigurera avsändare, mottagare, händelser och anslutning:

$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';

Håll certifikatverifiering aktiverad. Se E-postmeddelanden.

Språk och lokala formuleringar

Ange ett fast standardspråk endast när webbläsarförhandling är olämplig:

$default_language_tokens = 'de';

Åsidosätt enskilda etiketter utan att redigera 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';

Genom att använda $vocab_override bevaras den lokala formuleringen under uppgraderingar. Hela arbetsflödet beskrivs i Text och översättningar.

Anpassade fält

Anpassade databaskolumner kan märkas och formas genom konfiguration:

$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;

Databasändringar måste slutföras först. En entry anpassad kolumn kräver en identisk kolumn i repeat. Se Anpassade fält för typer som stöds, schemaexempel, validering, sekretess, fältordning och testning.

Inkludera hemligheter från en annan fil

config.inc.php kan inkludera en annan fil, men sökvägen måste vara absolut:

require '/etc/mrbs/database-secrets.php';

Den inkluderade filen ska bara returnera eller tilldela förväntade värden och vara läsbar för PHP-processen. Förvara den utanför webbserverns offentliga dokumentrot.

Miljövariabler kan också läsas explicit:

$db_password = getenv('MRBS_DB_PASSWORD');

Bekräfta att ett obligatoriskt värde finns istället för att tyst acceptera en tom hemlighet.

Multisite

Multisite använder global konfiguration plus en platsspecifik konfiguration under sites/<site>/. Varje webbplats behöver åtminstone ett isolerat tabellprefix:

$multisite = true;
$db_tbl_prefix = 'berlin_';

Autentisering, e-post, tema och andra inställningar kan skilja sig åt beroende på webbplats. Se Multisite.

Felsökning

Aktivera felsökningsbeteende endast tillfälligt och utsätt det aldrig för opålitliga användare. Integrationsspecifika felsökningsutdata kan innehålla katalogdata, rubriker, e-postserverdetaljer eller personlig information.

Håll autentiseringsloggning inaktiverad:

$auth['log_credentials'] = false;

Uppgraderingssäkert underhåll

För varje MRBS uppgradering:

  1. Säkerhetskopiera den aktiva konfigurationen.
  2. Börja från den nya utgåvans config.inc.php-sample.
  3. Jämför gamla åsidosättningar med nya standardinställningar.
  4. Överför endast avsiktliga inställningar.
  5. Ta bort föråldrade variabler som rapporterats av kompatibilitetskontroller.
  6. Kör syntaxvalidering och funktionstester.

Undvik att kopiera alla gamla standardinställningar till den nya konfigurationen; som döljer nya standardinställningar och gör senare uppgraderingar svåra.

Checklista för validering

php -l /var/www/mrbs/config.inc.php

Verifiera sedan:

  • applikations- och databasversioner på Help;
  • databasanslutning och tabellprefix;
  • rummets tidszon och sommarbesparande beteende;
  • inloggning, utloggning, utgång och administratörsmappning;
  • offentliga och privata åsikter;
  • skapa, redigera, ta bort, återkommande och policygränser;
  • e-postavsändare, mottagare och TLS;
  • rapporter, export, kiosk och multisite där de används; och
  • loggar utan lösenord eller privata data.

Rekommenderad fillayout

Håll filen kort och grupperad:

<?php
declare(strict_types=1);
namespace MRBS;

// Timezone
$timezone = 'Europe/Berlin';

// Database
$dbsys = 'mysql';
// ...

// Authentication
$auth['type'] = 'db';
$auth['session'] = 'php';

// Site-specific overrides
// ...

Varje icke-uppenbar åsidosättning bör förklara varför installationen behöver det.