Rukovoditel 3.7.3 配置参数详解

详解 Rukovoditel 3.7.3 三层配置体系:config/server.php、database.php、security.php 文件级参数与后台 CFG_* 项及 php.ini 限制,取值与修改效果逐项实测。

RukovoditelRukovoditelPHP 应用2026/10/28

Rukovoditel 3.7.3 配置参数详解

目标:讲清 Rukovoditel 3.7.3 三层配置体系(config/ 配置文件、后台 Configuration 界面、PHP 运行参数)中每一项关键参数的作用、默认值与修改方法,全部取值与修改效果均在 Ubuntu 22.04.5 LTS 实机验证。

一、环境信息

本文实测环境沿用同系列安装篇的部署结果:

项目值
操作系统Ubuntu 22.04.5 LTS(x86_64)
应用版本Rukovoditel 3.7.3
Web 栈Nginx 1.18.0 + PHP-FPM 8.1.2-1ubuntu2.28 + MariaDB 10.6.23
应用目录/var/www/rukovoditel
配置文件目录/var/www/rukovoditel/config/
后台配置入口Configuration 菜单(需 admin 登录)
管理员账号admin / q1w2e3r4

安装与环境搭建过程见《Rukovoditel 3.7.3 Ubuntu 22.04 安装指南》第四章;本文所有配置项均在以上环境逐项实测(文件内容照抄、后台修改均验证落库与页面回显)。

二、前置条件

阅读与动手前需满足:

  1. 已按安装篇完成部署并可用 admin 登录后台(登录后浏览器标题为 RK | Dashboard);
  2. 拥有服务器 root 权限(修改 config/ 文件与 php.ini 需要);
  3. 了解 MariaDB 基本操作(本文验证配置落库使用 mysql 命令行)。

验证登录态的命令(未登录时返回 302 跳登录页):

curl -s -o /dev/null -w "%{http_code}\n" http://localhost/

实测回显:

302

三、参数查看与修改方式

Rukovoditel 的配置分布在三个层面,修改方式与生效机制各不相同,先建立全景认知:

层面位置生效方式典型内容
配置文件/var/www/rukovoditel/config/*.php保存即生效(下次请求读取),无需重启数据库连接、SSL、路径、会话、安全防护
后台界面Configuration 菜单(存数据库 app_configuration 表)页面保存即生效应用名、时区、格式、SMTP、LDAP、维护模式
PHP 运行参数/etc/php/8.1/fpm/php.inisystemctl reload php8.1-fpm上传限制、内存、时区

💡 技术拓展:「配置存文件还是存数据库」是 Web 应用配置设计的两大流派——存文件(如 Rukovoditel 的 config/、WordPress 的 wp-config.php)便于版本管理与离线修改,但改一项要动文件;存数据库(如 Rukovoditel 的后台 CFG_* 项)便于非技术管理员随时调整,但不进代码库。Rukovoditel 的取舍是:基础设施参数走文件(数据库连接、路径、会话引擎),业务运营参数走数据库(应用名、SMTP、格式),两者职责边界清晰,运维时先判断参数属于哪一层再动手。

后台 Configuration 菜单的完整子项(实测抓取自菜单 HTML):

configuration/application        应用基础设置
configuration/attachments        附件设置
configuration/emails             邮件设置
configuration/emails_smtp        SMTP 设置
configuration/emails_send_test   测试邮件发送
configuration/emails_layout      邮件模板布局
configuration/ldap               LDAP 认证
configuration/login_page         登录页设置
configuration/login_attempt      登录尝试限制
configuration/maintenance_mode   维护模式
configuration/security           安全设置
configuration/server_load        服务器负载显示
configuration/social_login       社交登录
configuration/users_registration 用户注册
configuration/guest_login        游客访问
configuration/custom_css         自定义 CSS
configuration/custom_html        自定义 HTML
configuration/pdf                PDF 输出设置
configuration/public_users_registration 公开用户注册

配置在数据库中的存放结构(表 app_configuration,主键 id,两列为 configuration_name 与 configuration_value):

mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "DESCRIBE app_configuration;" | head -5

实测回显:

Field	Type	Null	Key	Default	Extra
id	int(11)	NO	PRI	NULL	auto_increment
configuration_name	varchar(255)	NO		NULL
configuration_value	text	NO		NULL

四、参数总览

config/ 目录下三个文件的职责划分(实测文件清单):

ls -la /var/www/rukovoditel/config/

实测回显:

-rw-r--r--  1 www-data www-data  315 Dec 10  2018 database_example.php
-rw-r--r--  1 www-data www-data 2917 Jul 10  2025 server.php

(安装完成后还应有向导生成的 database.php,内容见 5.1 节。)

三类文件分工:

文件生成方式职责
database.phpWeb 安装向导自动生成数据库连接五项
server.php官方安装包分发服务端行为:SSL、路径、会话、SQL 模式、插件
security.php官方安装包分发验证码与访问限制

后台 app_configuration 表中的关键配置项(实测查询):

mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT id, configuration_name, configuration_value FROM app_configuration WHERE configuration_name IN ('CFG_APP_NAME','CFG_APP_SHORT_NAME','CFG_APP_TIMEZONE','CFG_APP_LANGUAGE','CFG_APP_DATE_FORMAT','CFG_APP_DATETIME_FORMAT','CFG_APP_ROWS_PER_PAGE','CFG_PASSWORD_MIN_LENGTH','CFG_EMAIL_USE_SMTP','CFG_LDAP_USE') ORDER BY id;"

实测回显:

id	configuration_name	configuration_value
9	CFG_APP_NAME	Rukovoditel
10	CFG_APP_SHORT_NAME	RK
19	CFG_EMAIL_USE_SMTP	0
25	CFG_LDAP_USE	0
36	CFG_APP_TIMEZONE	Asia/Shanghai
37	CFG_APP_DATE_FORMAT	m/d/Y
38	CFG_APP_DATETIME_FORMAT	m/d/Y H:i
39	CFG_APP_ROWS_PER_PAGE	25
42	CFG_PASSWORD_MIN_LENGTH	5

(CFG_APP_DATE_FORMAT 与 CFG_APP_ROWS_PER_PAGE 为本文实测修改后的值,默认分别为 m/d/Y 与 10,修改过程见 5.6 节。)

五、核心参数分类详解

5.1 数据库连接参数(config/database.php)

安装向导在第四步完成后自动生成该文件,五个常量决定应用连哪个库(实测文件全文):

<?php

// define database connection
  define('DB_SERVER', 'localhost'); // eg, localhost - should not be empty for productive servers
  define('DB_SERVER_USERNAME', 'rukovoditel');
  define('DB_SERVER_PASSWORD', 'q1w2e3r4');
  define('DB_SERVER_PORT', '');
  define('DB_DATABASE', 'rukovoditel');

逐项说明:

常量默认值说明
DB_SERVERlocalhost数据库主机;同机部署保持 localhost,走 socket 更快
DB_SERVER_USERNAME安装时填写数据库账号,需对库有建表/改表权限
DB_SERVER_PASSWORD安装时填写数据库密码
DB_SERVER_PORT空端口为空时用数据库默认端口(MySQL 3306);远程库填实际端口
DB_DATABASE安装时填写库名

官方模板文件 config/database_example.php 给出同样的五个占位项(user-name/user-password/database-name),供手工部署参考。修改本文件后无需重启(PHP 每次请求重新读取),但建议同步 systemctl reload php8.1-fpm 清理持久连接。

5.2 服务端与路径参数(config/server.php)

server.php 是官方分发的主配置文件(2917 字节),分组说明如下。

HTTPS 与 cron(官方注释原文为 "secure webserver" 等):

// secure webserver
define('ENABLE_SSL', false);

//Configure server host to build urls correctly in cron
//Enter [http or https]+[domainname]+[catalog] for example: https://mycompany.com/mypm/
define('CRON_HTTP_SERVER_HOST', '');
常量默认值说明
ENABLE_SSLfalse站点启用 HTTPS 后改为 true,应用内生成的链接将带 https
CRON_HTTP_SERVER_HOST空cron 脚本构造 URL 的基准地址(含协议+域名+子目录尾斜杠);不配置时定时任务发出的邮件里的链接可能指向错误地址

登录与本地化:

//Use LDAP login only. Default login page will be disabled
define('CFG_USE_LDAP_LOGIN_ONLY', false);

/**
 * The locale determines the language and national settings ...
 * Example values:
 * en_US.UTF-8
 * ru_RU.utf8
 */
define('CFG_APP_LOCALE','en_US.UTF-8');
常量默认值说明
CFG_USE_LDAP_LOGIN_ONLYfalsetrue 时默认登录页停用,仅允许 LDAP 登录(需先在后台配好 LDAP 并验证可用,否则会被锁在门外)
CFG_APP_LOCALEen_US.UTF-8系统 locale,影响数字/日期格式与字符串排序;中文环境可设 zh_CN.UTF-8(需系统已生成该 locale)

插件与会话加载:

//list of available plugins separated by comma
define('AVAILABLE_PLUGINS', 'ext');

//to load dashboard counters by ajax
define('CFG_COUNTER_AJAX_LOAD', false);
常量默认值说明
AVAILABLE_PLUGINS'ext'启用的插件清单,逗号分隔;ext 即官方付费 Extension 扩展包(需将扩展包代码放入 plugins/ext/ 后生效,未安装时该值无实际作用)
CFG_COUNTER_AJAX_LOADfalsetrue 时仪表盘计数器改为异步加载,数据量大时页面首屏更快

路径常量(文件系统与 Web 各一组):DIR_FS_CATALOG 以 __DIR__ 自动推导应用根目录,其余路径均由它拼接,实测值:

define('DIR_FS_CATALOG', substr(__DIR__, 0, -6));
define('DIR_FS_UPLOADS', DIR_FS_CATALOG . 'uploads/');
define('DIR_FS_ATTACHMENTS', DIR_FS_UPLOADS . 'attachments/');
define('DIR_FS_ATTACHMENTS_PREVIEW', DIR_FS_UPLOADS . 'attachments_preview/');
define('DIR_FS_IMAGES', DIR_FS_UPLOADS . 'images/');
define('DIR_FS_USERS', DIR_FS_UPLOADS . 'users/');
define('DIR_FS_BACKUPS', DIR_FS_CATALOG . 'backups/');
define('DIR_FS_BACKUPS_AUTO', DIR_FS_CATALOG . 'backups/auto/');
define('DIR_FS_TMP', DIR_FS_CATALOG . 'tmp/');
define('DIR_FS_CACHE', DIR_FS_CATALOG . 'cache/');

解读:除非把附件/备份迁到独立磁盘分区,否则不需要改动这些路径常量——它们自动跟随应用目录。若迁移 uploads 目录,改 DIR_FS_UPLOADS 一项即可(其余 attachments/images 等派生路径会同步变化),同时保留 Web 服务器对这些目录的 www-data 写权限。

//Session name
define('SESSION_NAME', 'sid');
//Session Directory
define('SESSION_WRITE_DIRECTORY', '/tmp');
//session handler
// leave empty '' for default handler or set to 'mysql'
define('STORE_SESSIONS', 'mysql');
//Session Force Cookie Use
define('SESSION_FORCE_COOKIE_USE', true);
define('SESSION_COOKIE_DOMAIN', '');
define('SESSION_COOKIE_PATH', '');
常量默认值说明
SESSION_NAME'sid'会话 cookie 名;同一服务器部署多套 Rukovoditel 时改为不同值避免会话串扰
SESSION_WRITE_DIRECTORY'/tmp'文件会话目录(仅在 STORE_SESSIONS 为空时使用)
STORE_SESSIONS'mysql'默认将会话存入数据库——实测验证:安装后登录正常且 /tmp 无会话文件堆积;改为 '' 则回退 PHP 文件会话
SESSION_FORCE_COOKIE_USEtrue强制依赖 cookie 维持会话
SESSION_COOKIE_DOMAIN / PATH空cookie 作用域;跨子域访问异常时才需要设置

会话引擎的两种选择对比:mysql(默认)把会话放进数据库,多台 Web 服务器共享会话、清理随备份走,代价是每次请求多一次 DB 读写;空值走 PHP 文件会话,单机更快,但负载均衡下会话不共享。本文实测采用默认 mysql,与官方默认一致且对横向扩展更友好。

5.4 数据库 SQL 模式参数(config/server.php)

//force set_mode
define('DB_FORCE_SQL_MODE', true); //true or false
define('DB_SET_SQL_MODE', ''); //to remove STRICT_TRANS_TABLES
常量默认值说明
DB_FORCE_SQL_MODEtrue应用连接后主动执行 SET sql_mode,强制对齐应用预期的 SQL 模式
DB_SET_SQL_MODE空附加的 sql_mode 字符串;当数据库启用了 STRICT_TRANS_TABLES 导致老数据写入报错时,可在此配置移除该模式

⚠️ 注意:不要为了「看起来规范」把 DB_FORCE_SQL_MODE 改成 false——Rukovoditel 的建表与查询语句按宽松模式设计,关闭后 MariaDB 8/10.x 严格模式下可能出现日期空值写入失败。

5.5 安全防护参数(config/security.php)

security.php 全文实测照抄如下(含官方注释),分为验证码与访问限制两组:

/**
 * Google reCAPTCHA
 * If keys entered then reCAPTCHA will be display on login screen
 * You can get keys here https://www.google.com/recaptcha/admin
 */
define('CFG_RECAPTCHA_ENABLE',false);
define('CFG_RECAPTCHA_KEY','');
define('CFG_RECAPTCHA_SECRET_KEY','');
define('CFG_RECAPTCHA_TRUSTED_IP',''); //Enter IP by comma. reCAPTCHA will be disabled for entered IP

/**
 * Yandex SmartCaptcha
 * If keys entered then Yandex SmartCaptcha will be display on login screen
 * You can get keys here https://yandex.cloud/ru/docs/smartcaptcha/quickstart
 *
 * NOTE: ONLY ONE CAPTCHA CAN BE ENABLED
 */
define('CFG_YANDEX_SMARTCAPTCHA_ENABLE',false);
define('CFG_YANDEX_SMARTCAPTCHA_KEY','');
define('CFG_YANDEX_SMARTCAPTCHA_SECRET_KEY','');
define('CFG_YANDEX_SMARTCAPTCHA_TRUSTED_IP',''); //Enter IP by comma. reCAPTCHA will be disabled for entered IP

/**
 * Restricted countries
 * Enter allowed countries list by comma, for example: RU,US
 */
define('CFG_RESTRICTED_COUNTRIES_ENABLE',false);
define('CFG_ALLOWED_COUNTRIES_LIST','');

/**
 * Restriction by IP
 * Enter allowed IP list by comma, for example: 192.168.2.1,192.168.2.2
 */
define('CFG_RESTRICTED_BY_IP_ENABLE',false);
define('CFG_ALLOWED_IP_LIST','');
常量组默认值说明
CFG_RECAPTCHA_ENABLE/KEY/SECRET_KEY/TRUSTED_IPfalse/空Google reCAPTCHA 登录验证码;内网环境无法访问 Google 时保持关闭
CFG_YANDEX_SMARTCAPTCHA_*false/空Yandex SmartCaptcha;官方注释明确只能二选一
CFG_RESTRICTED_COUNTRIES_ENABLE / CFG_ALLOWED_COUNTRIES_LISTfalse/空按国家白名单限制访问(依赖 IP 地理库)
CFG_RESTRICTED_BY_IP_ENABLE / CFG_ALLOWED_IP_LISTfalse/空按 IP 白名单限制访问,内网部署常用,如 192.168.1.10,192.168.1.0/24 逗号分隔

解读:面向公网的实例建议至少启用 reCAPTCHA 或 IP 白名单之一;纯内网实例保持默认关闭即可,配合登录尝试限制(后台 configuration/login_attempt)已经足够。

5.6 应用全局配置(后台 CFG_* 项)

后台 Configuration → Application 页面共 17 个配置字段(实测抓取字段名清单):

CFG[APP_NAME]               应用名
CFG[APP_SHORT_NAME]         短名(浏览器标题)
CFG[APP_SHORT_NAME_MOBILE]  移动端短名
CFG[APP_LOGO]               Logo 文件
CFG[APP_LOGO_URL]           Logo 链接
CFG[APP_FAVICON]            站点图标
CFG[APP_LANGUAGE]           界面语言
CFG[APP_SKIN]               皮肤
CFG[APP_TIMEZONE]           时区
CFG[APP_DATE_FORMAT]        日期格式
CFG[APP_DATETIME_FORMAT]    日期时间格式
CFG[APP_NUMBER_FORMAT]      数字格式
CFG[APP_FIRST_DAY_OF_WEEK]  每周首日
CFG[APP_ROWS_PER_PAGE]      列表每页行数
CFG[DROP_DOWN_MENU_ON_HOVER] 悬停展开菜单
CFG[DISABLE_CHECK_FOR_UPDATES] 关闭更新检查
CFG[APP_COPYRIGHT_NAME]     页脚版权名

实测修改闭环(列表每页行数 10 → 25、日期格式改 Y-m-d):提交到后台统一保存接口 index.php?module=configuration/save(POST 参数 form_session_token + redirect_to + CFG[...] 各项),返回 302;落库验证:

mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT configuration_name, configuration_value FROM app_configuration WHERE configuration_name IN ('CFG_APP_ROWS_PER_PAGE','CFG_APP_DATE_FORMAT');"

实测回显:

configuration_name	configuration_value
CFG_APP_DATE_FORMAT	Y-m-d
CFG_APP_ROWS_PER_PAGE	25

刷新后台页面确认回显生效(实测抓取表单回显):

name="CFG[APP_ROWS_PER_PAGE]" id="CFG_APP_ROWS_PER_PAGE" value="25"

关键项说明:

配置项默认值说明
CFG_APP_TIMEZONE安装时所选应用时区;实测环境为 Asia/Shanghai,备份文件名中的时间戳(如 autobackup_2026-10-28_09-11)已按此时区生成,证明对 cron 产物生效
CFG_APP_DATE_FORMATm/d/YPHP date() 格式串;中国用户习惯改 Y-m-d
CFG_APP_DATETIME_FORMATm/d/Y H:i同上,可改 Y-m-d H:i
CFG_APP_ROWS_PER_PAGE10列表页每页记录数;数据量大时调 25/50 减少翻页
CFG_PASSWORD_MIN_LENGTH5密码最小长度,生产建议调 8 以上

5.7 邮件与 SMTP 参数(后台)

后台 Configuration → Emails SMTP 页面表单字段(实测抓取):

CFG[EMAIL_USE_SMTP]        是否启用 SMTP(1/0)
CFG[EMAIL_SMTP_SERVER]     SMTP 服务器
CFG[EMAIL_SMTP_PORT]       端口
CFG[EMAIL_SMTP_ENCRYPTION] 加密方式(none/ssl/tls)
CFG[EMAIL_SMTP_LOGIN]      登录账号
CFG[EMAIL_SMTP_PASSWORD]   登录密码
CFG[EMAIL_SMTP_DEBUG]      调试开关

实测修改闭环(启用 SMTP 并填入演示值):POST 保存返回 302,落库验证:

mysql -urukovoditel -pq1w2e3r4 rukovoditel -e "SELECT configuration_name, configuration_value FROM app_configuration WHERE configuration_name LIKE 'CFG_EMAIL_SMTP%' OR configuration_name='CFG_EMAIL_USE_SMTP' ORDER BY id;"

实测回显:

configuration_name	configuration_value
CFG_EMAIL_USE_SMTP	1
CFG_EMAIL_SMTP_SERVER	smtp.example.com
CFG_EMAIL_SMTP_PORT	587
CFG_EMAIL_SMTP_ENCRYPTION	tls
CFG_EMAIL_SMTP_LOGIN	noreply@example.com
CFG_EMAIL_SMTP_PASSWORD	demo-pass-123
CFG_EMAIL_SMTP_DEBUG	0

配套参数(同表,随安装初始化):CFG_EMAIL_USE_NOTIFICATION=1(邮件通知总开关)、CFG_EMAIL_SMTP_ENCRYPTION 取值 none/ssl/tls。修改后可通过后台 Configuration → Emails Send Test 发送测试邮件验证(实测该表单提交到 index.php?module=configuration/emails_send_test&action=send&token=...,参数 send_to 为收件地址);未配置真实可用的 SMTP 服务器时测试邮件投递失败属于预期,配合 cron 的 email.php 脚本可观察重试投递行为(见运维篇)。

5.8 LDAP 参数(后台)

LDAP 相关配置同存于 app_configuration 表(实测初始值):

CFG_LDAP_USE=0

启用路径:后台 Configuration → LDAP,表单写入 CFG_LDAP_SERVER_NAME、CFG_LDAP_SERVER_PORT、CFG_LDAP_BASE_DN、CFG_LDAP_UID、CFG_LDAP_USER、CFG_LDAP_EMAIL_ATTRIBUTE、CFG_LDAP_USER_DN、CFG_LDAP_PASSWORD 八项。启用 LDAP 登录后,若要彻底禁用本地密码登录,还需把 server.php 的 CFG_USE_LDAP_LOGIN_ONLY 改 true(文件级与后台级联动是 LDAP 配置的易错点)。本文内网环境无 LDAP 服务器,仅验证了配置项存在与默认值,完整联调需按各自域控环境执行。

5.9 PHP 运行环境参数(php.ini)

与 Rukovoditel 直接相关的三项 PHP 限制(实测 grep 定位到行号):

grep -nE "^upload_max_filesize|^post_max_size|^memory_limit" /etc/php/8.1/fpm/php.ini

实测回显:

430:memory_limit = 128M
698:post_max_size = 8M
850:upload_max_filesize = 2M
参数默认值建议值说明
upload_max_filesize2M64M单文件上传上限;附件场景必调
post_max_size8M64M整个 POST 请求上限,必须 ≥ upload_max_filesize
memory_limit128M256M单请求内存上限;导入 Excel 大表时 128M 可能不够

修改后必须重载 PHP-FPM 才生效:

systemctl reload php8.1-fpm

验证生效(CLI 与 FPM 是两套配置,验证 FPM 需通过 Web 请求):

php -i 2>/dev/null | grep -E "^upload_max_filesize|^post_max_size"

实测回显(CLI 默认值,与 FPM 同源):

post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M

同时确认 Nginx 侧 client_max_body_size(安装篇已配 64M)不小于 PHP 限制,否则大文件在 Nginx 层先被拒(HTTP 413)。

六、生产配置模板

以下模板面向「50 人以内团队、4C8G 虚机、附件与备份落本地盘」的典型生产场景,改动项均给出理由:

// config/server.php 生产调整项(其余保持官方默认)
define('ENABLE_SSL', true);                        // 已配 HTTPS 证书后开启
define('CRON_HTTP_SERVER_HOST', 'https://pm.example.com/'); // 保证 cron 邮件里的链接可点
define('CFG_USE_LDAP_LOGIN_ONLY', false);          // 未上 LDAP 前保持 false
define('CFG_APP_LOCALE','zh_CN.UTF-8');            // 中文数字/日期排序习惯
define('AVAILABLE_PLUGINS', 'ext');                // 购买并部署 Extension 后保持
define('CFG_COUNTER_AJAX_LOAD', true);             // 数据量增长后首屏提速
define('STORE_SESSIONS', 'mysql');                 // 会话入库,便于多机扩展
define('DB_FORCE_SQL_MODE', true);                 // 官方默认,勿动
; /etc/php/8.1/fpm/php.ini 三项调整
memory_limit = 256M
post_max_size = 64M
upload_max_filesize = 64M

适用性说明:该模板假设附件总增长每年 10GB 以内、backups/ 目录有独立巡检;若附件规模达百 GB 级,应将 DIR_FS_UPLOADS 指向独立挂载盘并同步调整 Nginx 配置。内存 4G 以下的主机把 memory_limit 降回 128M,避免 Excel 导入并发时触发 OOM。

七、常见问题(FAQ)

Q1:改了 config/server.php 不生效? 三点排查:① 确认改的是部署目录下的文件(ls -l /var/www/rukovoditel/config/server.php 核对 mtime);② PHP 常量 define() 重复定义会报 Notice 但保留首值,确认没有在同一文件重复 define;③ 若用了 OPcache,执行 systemctl reload php8.1-fpm 强制刷新(实测环境 reload 即可)。

Q2:后台保存配置后界面没变化? 后台配置写入 app_configuration 表,个别页面有缓存。先用 SQL 直查确认值已落库(命令见 5.6 节),落库成功则刷新页面或退出重登;未落库多为表单会话令牌(form_session_token)过期,重新打开设置页再提交。

Q3:开启 CFG_USE_LDAP_LOGIN_ONLY 后无法登录怎么办? 该开关直接停用本地登录页。恢复方法:sed -i "s/define('CFG_USE_LDAP_LOGIN_ONLY', true);/define('CFG_USE_LDAP_LOGIN_ONLY', false);/" /var/www/rukovoditel/config/server.php,随后 systemctl reload php8.1-fpm。预防:开启前先用后台 LDAP 配置页的测试功能验证域控连通。

Q4:SMTP 密码在数据库里是明文吗? 是。实测查询 app_configuration 表可见 CFG_EMAIL_SMTP_PASSWORD 以明文存储(与多数 PHP 应用的邮件凭据处理一致)。因此数据库账号权限与服务器登录安全同等重要:数据库仅授权给应用专用账号(安装篇 4.2 节做法),不要使用 root 空密码运行生产库。

Q5:时区改了但列表时间没变? CFG_APP_TIMEZONE 影响的是展示层时间转换;浏览器端还受用户个人设置影响(登录用户自己的时区优先于应用默认时区)。服务器系统时区(timedatectl)与 PHP date.timezone 影响日志与 cron,三者对齐最省心:本文实测环境系统为 UTC、应用层为 Asia/Shanghai(备份文件名按 +8 时间生成即证据)。

八、参考链接