QloApps 1.7.0 配置参数详解
QloApps 1.7.0 五层配置逐项详解:settings.inc.php、defines.inc.php、qlo_configuration 表、PHP 与 Web 服务器参数,含实测值与生产模板。
QloApps 1.7.0 配置参数详解
目标:逐项讲清 QloApps 1.7.0 运行涉及的五层配置——
config/settings.inc.php(安装生成)、config/defines.inc.php(运行模式与路径常量)、数据库qlo_configuration表(后台业务配置)、PHP 运行参数、Web 服务器参数。所有文件内容、表数据、修改效果均在 Ubuntu 22.04(Apache 2.4.52 + PHP 8.1 + MySQL 8.0.46)安装实例上实测取证,官方来源以仓库内文件原文为准。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS
- 应用:QloApps 1.7.0(源码安装于
/var/www/qloapps,_QLOAPPS_VERSION_ 1.7.0.0/_PS_VERSION_ 1.6.1.23) - Web 服务器:Apache 2.4.52(含
mod_rewrite) - PHP:8.1.2,定制参数文件
/etc/php/8.1/apache2/conf.d/99-qloapps.ini - 数据库:MySQL 8.0.46,库名
qloapps,表前缀qlo_ - 安装方式与过程见《QloApps 1.7.0 Ubuntu 22.04 安装指南》
二、前置条件
- 已按安装指南完成安装并可访问前台与后台(
config/settings.inc.php已生成); - 具备服务器命令行权限(修改配置文件、执行 SQL);
- 后台超级管理员账号(默认你安装时填写的管理员邮箱);
- 排障时用到的日志位置:Apache 错误日志
/var/log/apache2/qloapps_error.log(虚拟主机配置里定义)。
三、配置体系总览
QloApps 的配置分散在五层,改哪层取决于要调什么:
| 层 | 物理位置 | 生成方式 | 典型用途 |
|---|---|---|---|
| ① 安装级 | /var/www/qloapps/config/settings.inc.php | 安装向导生成 | 数据库连接、加密盐、版本号 |
| ② 常量级 | /var/www/qloapps/config/defines.inc.php | 源码自带 | 调试模式、路径常量、性能开关 |
| ③ 业务级 | 数据库 qlo_configuration 表 | 后台可视化写入 | 店铺名、默认语言、伪静态、邮件方式、API 开关 |
| ④ PHP 运行级 | php.ini / conf.d | 服务器管理员 | memory_limit、上传大小、执行时长 |
| ⑤ Web 服务器级 | Apache vhost / nginx server | 服务器管理员 | DocumentRoot、伪静态、日志 |
💡 改动生效方式:①② 层是 PHP 文件,改完即生效(个别受
cache/编译缓存影响的场景需清缓存);③ 层后台保存即写库即生效;④ 层要systemctl restart apache2;⑤ 层systemctl reload apache2。
四、settings.inc.php:安装级参数详解
安装完成后 config/settings.inc.php 的完整实测内容(Cookie 密钥为实测样本,你的值会不同):
<?php
define('_DB_SERVER_', '127.0.0.1');
define('_DB_TYPE_', 'MySQL');
define('_DB_NAME_', 'qloapps');
define('_DB_USER_', 'qloapps');
define('_DB_PASSWD_', 'q1w2e3r4');
define('_DB_PREFIX_', 'qlo_');
define('_MYSQL_ENGINE_', 'InnoDB');
define('_PS_CACHING_SYSTEM_', 'CacheMemcache');
define('_PS_CACHE_ENABLED_', '0');
define('_COOKIE_KEY_', 'HBGOBv0ApUSrBIoxaafch4sAhE1Xr2xAgJMif33fahjvuzyUnOiLr7mq');
define('_COOKIE_IV_', 'gA6HOps2');
define('_NEW_COOKIE_KEY_', 'yE7YabGZKjbhsLvS468yZ9wcfX3ErltdYQ986hQxt1ouCusLn6vcgXla');
define('_PS_CREATION_DATE_', '2026-10-24');
define('_PS_VERSION_', '1.6.1.23');
define('_QLOAPPS_VERSION_', '1.7.0.0');
逐项说明(全部为安装实例实测内容):
| 常量 | 实测值 | 逐项说明 |
|---|---|---|
_DB_SERVER_ | 127.0.0.1 | 数据库地址。1.7.0 安装时要求填 127.0.0.1(TCP 3306),填 localhost 会走 socket,易因运行用户 socket 路径不一致连不上。远程数据库时填对方 IP |
_DB_TYPE_ | MySQL | 数据库驱动类型,仅支持 MySQL 系(含 MariaDB) |
_DB_NAME_ | qloapps | 库名。迁移换库只改此行 |
_DB_USER_ / _DB_PASSWD_ | qloapps / q1w2e3r4 | 连接账号。该账号对 _DB_NAME_ 库需 ALL 权限(安装后运行期只需增删改查,但后台某些操作会建临时表) |
_DB_PREFIX_ | qlo_ | 表前缀。安装后不要改:改了等于找不到所有表。单机多实例共库时靠前缀区分 |
_MYSQL_ENGINE_ | InnoDB | 存储引擎。业务有事务性(订单/库存扣减),保持 InnoDB |
_PS_CACHING_SYSTEM_ | CacheMemcache | 缓存系统类名。实测源码中存在 5 种实现:CacheMemcache、CacheMemcached、CacheApc、CacheXcache、CacheFs(classes/cache/ 目录实测)。仅在 _PS_CACHE_ENABLED_ 为 1 时生效 |
_PS_CACHE_ENABLED_ | 0 | 缓存总开关。0=关闭(默认,每请求直读数据库);1=启用上行的缓存系统。生产可开 CacheFs(文件缓存)或 Memcache(需装扩展与服务) |
_COOKIE_KEY_ | 56 位随机串 | Cookie 与密码加密盐。客户/员工密码哈希、记住登录都用它。泄露=全库密码可被离线碰撞,绝不外传;改动后所有用户密码失效需重置 |
_COOKIE_IV_ | 8 位随机串 | Cookie 加密初始向量,配合 _COOKIE_KEY_ |
_NEW_COOKIE_KEY_ | 64 位随机串 | 新版 Cookie 密钥(第二次登录迁移用),与上面同级别保密 |
_PS_CREATION_DATE_ | 2026-10-24 | 安装日期,供模块判断安装时长,无需改动 |
_PS_VERSION_ | 1.6.1.23 | 内核基线版本(PrestaShop 1.6.1.23),升级与模块兼容判断看它 |
_QLOAPPS_VERSION_ | 1.7.0.0 | 应用层版本,QloApps 发布号。对客服报版本时报这个 |
⚠️ 操作红线:settings.inc.php 由安装器生成,不手工重建;备份系统时优先备份它;文件权限建议
640且属主www-data——它含数据库口令与加密盐。
五、defines.inc.php:运行模式与路径常量
config/defines.inc.php 是源码自带的框架级常量定义(实测原文节选):
5.1 调试模式(排障最常用)
实测原文(27–38 行):
/* Debug only */
if (!defined('_PS_MODE_DEV_')) {
define('_PS_MODE_DEV_', false);
}
/* Compatibility warning */
define('_PS_DISPLAY_COMPATIBILITY_WARNING_', false);
if (_PS_MODE_DEV_ === true) {
@ini_set('display_errors', 'on');
@error_reporting(E_ALL | E_STRICT);
define('_PS_DEBUG_SQL_', true);
} else {
@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);
}
define('_PS_DEBUG_PROFILING_', false);
define('_PS_MODE_DEMO_', false);
| 常量 | 默认 | 改 true 的效果(实测确认定义行为) |
|---|---|---|
_PS_MODE_DEV_ | false | 开发者模式:display_errors=on、error_reporting=E_ALL,页面直接打印 PHP 错误堆栈;同时把 _PS_DEBUG_SQL_ 拉起,数据库错误显示 SQL 原文。排障必开,生产平时必须关(错误信息会泄露路径与 SQL 结构) |
_PS_DEBUG_SQL_ | 随 DEV | 独立打开时即使不显示错误,SQL 出错也会抛异常而非静默 |
_PS_DEBUG_PROFILING_ | false | 性能剖析:页面底部显示每请求的 SQL 条数/耗时/内存,调优时用 |
_PS_MODE_DEMO_ | false | 演示模式:后台写操作被拦截。官方 demo 站用它,自建环境保持 false |
_PS_DISPLAY_COMPATIBILITY_WARNING_ | false | 前台显示兼容性告警条,保持 false |
实测验证:将 _PS_MODE_DEV_ 改为 true 后前台仍正常响应(curl -L 实测 http=200),错误页从"白屏/500"变为完整堆栈;改回 false 恢复静默。改完无需清缓存立即生效。
5.2 目录与部署形态常量
实测原文节选(含路径依赖关系):
if (!defined('_PS_CACHE_DIR_')) {
define('_PS_CACHE_DIR_', _PS_ROOT_DIR_.'/cache/');
}
define('_PS_CONFIG_DIR_', _PS_CORE_DIR_.'/config/');
define('_PS_CUSTOM_CONFIG_FILE_', _PS_CONFIG_DIR_.'settings_custom.inc.php');
define('_PS_CLASS_DIR_', _PS_CORE_DIR_.'/classes/');
要点:
_PS_ROOT_DIR_= 应用根目录(本文实例/var/www/qloapps),_PS_CORE_DIR_同值;_PS_CACHE_DIR_指向cache/(Smarty 编译产物与类索引),改代码/改模板不生效时第一步就是清它:rm -rf /var/www/qloapps/cache/*;_PS_CUSTOM_CONFIG_FILE_(config/settings_custom.inc.php)默认不存在,可手工创建用于在不污染 settings.inc.php 的前提下覆盖常量(升级时 settings.inc.php 可能被重写,custom 文件更稳);- 另有
_PS_HOST_MODE_支持getenv()注入,是官方给托管环境(如云市场镜像)用的部署形态开关,自建服务器不动它。
六、qlo_configuration 表:业务级参数(后台可视化)
后台「Advanced Parameters」各页面的保存动作,最终都落到数据库 qlo_configuration 表(键值对)。改这层优先用后台界面(带校验、带钩子触发),直连 SQL 仅在批量初始化/后台进不去时使用。以下为安装实例的真实取样(SELECT name,value ... 实测回显):
name value
PS_COUNTRY_DEFAULT 21
PS_LANG_DEFAULT 1
PS_MAIL_METHOD 1
PS_REWRITING_SETTINGS 1
PS_SHOP_EMAIL hotelprime@htl.com
PS_SHOP_NAME QloDemo Hotel
PS_SMARTY_CACHE 1
PS_SMARTY_FORCE_COMPILE 0
PS_TIMEZONE Asia/Shanghai
PS_WEBSERVICE 1
常用键逐项说明(值均为实测):
| 键 | 实测值 | 说明 | 后台位置 |
|---|---|---|---|
PS_SHOP_NAME | QloDemo Hotel | 店铺名,前台标题、邮件签名 | Advanced Parameters → Store Information |
PS_SHOP_EMAIL | hotelprime@htl.com | 发件邮箱,订单确认/通知邮件的 From | 同上 |
PS_LANG_DEFAULT | 1 | 默认语言 id(对应 qlo_lang 表) | Localization |
PS_COUNTRY_DEFAULT | 21 | 默认国家 id(安装时选 United States 所致) | Localization |
PS_TIMEZONE | Asia/Shanghai | 店铺时区 | 同上 |
PS_REWRITING_SETTINGS | 1 | 伪静态开关(房态页/房型页友好 URL)。必须为 1 且 Apache AllowOverride All,否则前台链接失效 | Advanced Parameters → SEO & URLs |
PS_SMARTY_FORCE_COMPILE | 0 | 模板强制重编译:0=按需(生产),1=每次请求重编译(开发用,很慢) | Advanced Parameters → Performance |
PS_SMARTY_CACHE | 1 | Smarty 模板缓存开关(生产建议 1) | 同上 |
PS_MAIL_METHOD | 1 | 邮件发送方式:1=PHP mail() 函数,2=SMTP。生产建议改 2 配 SMTP 中继 | Advanced Parameters → E-mail |
PS_WEBSERVICE | 1 | REST API 总开关(/api 端点启用位),API 篇主角 | Advanced Parameters → Webservice |
💡 直连 SQL 的正确姿势(以开 API 为例):
UPDATE qlo_configuration SET value='1' WHERE name='PS_WEBSERVICE';。注意个别键(如 PS_WEBSERVICE)在未于后台保存过前表中没有行,此时用INSERT INTO qlo_configuration (name,value,date_add,date_upd) VALUES ('PS_WEBSERVICE','1',NOW(),NOW());(API 启用过程实测)。改完立即生效,无需清缓存。
另一张易混表:qlo_shop_url(domain/domain_ssl/physical_uri/virtual_uri 字段)存站点访问域名——换域名迁移必改它,不改会 302 循环(实测见安装指南 FAQ Q2):
SELECT id_shop_url, domain, domain_ssl, physical_uri, virtual_uri FROM qlo_shop_url;
-- 迁移示例:UPDATE qlo_shop_url SET domain='newhotel.example.com', domain_ssl='newhotel.example.com' WHERE id_shop_url=1;
七、PHP 运行级参数(php.ini / conf.d)
安装指南 2.2 节创建的 /etc/php/8.1/apache2/conf.d/99-qloapps.ini(实测内容与生效值):
| 参数 | 本文实测值 | 官方要求 | 说明 |
|---|---|---|---|
memory_limit | 256M | ≥128M | PHP 单请求内存上限。房态日历渲染与后台批量导入是内存大户,256M 稳 |
upload_max_filesize | 16M | 16M | 单文件上传上限(房型图片、语言包导入) |
post_max_size | 32M | 未明确 | POST 总量,需 ≥ upload_max_filesize |
max_execution_time | 500 | 500 | 安装期建表、语言包下载、后台升级的耗时上限 |
修改后生效命令与核验(实测回显):
sudo systemctl restart apache2
php -r 'echo ini_get("memory_limit"), " ", ini_get("upload_max_filesize"), " ", ini_get("max_execution_time"), PHP_EOL;'
256M 16M 500
另外两个与排障相关的隐含项:allow_url_fopen=on(官方要求,语言包下载与市场模块依赖,PHP 8.1 默认 on);时区不设的话 PHP 警告 date.timezone,可在同文件补 date.timezone = Asia/Shanghai。
八、Web 服务器级参数(Apache)
实测 vhost(/etc/apache2/sites-available/qloapps.conf)关键项:
| 指令 | 实测值 | 说明 |
|---|---|---|
DocumentRoot | /var/www/qloapps | 必须指到源码根(含 index.php 的目录),指到子目录会 404 |
AllowOverride All | 必须 | .htaccess 伪静态与安全规则全靠它;漏掉则前台内页 404 |
Options -Indexes | 建议按实测 | 禁目录列表 |
ErrorLog/CustomLog | qloapps_error.log / qloapps_access.log | 排障第一现场:白屏/500 先看这里 |
Nginx 用户对照:无 .htaccess 机制,需把伪静态规则翻译进 location / { try_files $uri $uri/ /index.php?$query_string; },官方文档 docs.qloapps.com 有 Nginx 参考配置。
九、生产配置模板
9.1 中型酒店(10–100 间房,日均 1–3 千 UV)单机 4C/8G
; /etc/php/8.1/apache2/conf.d/99-qloapps.ini
memory_limit = 256M
upload_max_filesize = 16M
post_max_size = 32M
max_execution_time = 500
date.timezone = Asia/Shanghai
; opcache 对 PHP 8.1 提速明显,建议常开
opcache.enable = 1
opcache.memory_consumption = 128
-- 数据库层(配合 MySQL 8 默认即可)
-- 缓存改文件缓存(无需额外服务)
UPDATE qlo_configuration SET value='1' WHERE name='PS_SMARTY_CACHE';
// settings.inc.php 追加启用 CacheFs(文件缓存,无需装扩展)
define('_PS_CACHE_ENABLED_', '1');
define('_PS_CACHING_SYSTEM_', 'CacheFs');
9.2 场景 → 配置对照
| 场景 | 关键配置组合 |
|---|---|
| 排障(页面白屏) | _PS_MODE_DEV_=true + 看 qloapps_error.log + 完成后立即关回 |
| 性能调优 | _PS_CACHE_ENABLED_=1(CacheFs 或 Memcache)+ PS_SMARTY_CACHE=1 + opcache |
| 换域名迁移 | qlo_shop_url 表 domain/domain_ssl + vhost ServerName + 前台重建 SEO URL |
| 开放 API 对接 | PS_WEBSERVICE=1 + Webservice 账号密钥(见《QloApps 1.7.0 API 使用详解》) |
| 多店共库 | 各实例不同 _DB_PREFIX_ |
十、常见问题(FAQ)
Q1:改了 defines.inc.php 不生效? 确认编辑的是运行实例的 config/defines.inc.php(CLI 与 Web 用的同一份,但注意多实例服务器别改错目录);删除 _PS_CACHE_DIR_(cache/)内容后刷新;PHP 不需要重启(该文件每请求都重新 include)。
Q2:后台保存某项后前台没变化? 后台多数页面写的是 qlo_configuration 表,保存即生效;但模板相关项(主题设置、首页编排)受 Smarty 缓存影响,清 cache/ 或后台 Advanced Parameters → Performance 点 Clear cache。
Q3:settings.inc.php 丢了/被误删? 系统报 "Link to database cannot be established"。从备份恢复;没有备份时按本文第四节字段手工重建(_COOKIE_KEY_ 无原值则所有用户密码需重置)。
Q4:_PS_MODE_DEV_ 开着会不会有安全风险? 有。错误页暴露绝对路径、SQL 结构与部分配置。原则:排障时开、排障完立即 false;生产常态必须 false。
Q5:如何确认当前实际生效的 PHP 参数? 不要只看配置文件——用运行时核验:php -r 'echo ini_get(...);' 核 CLI,Web 端受 mod_php 池配置影响时以安装目录下临时 phpinfo() 页面为准(用完即删)。
十一、参考链接
- 官方安装要求(PHP 参数依据):https://github.com/Qloapps/QloApps#requirements
- settings.inc.php 生成逻辑(安装器源码):https://github.com/Qloapps/QloApps/blob/develop/install/classes/controllerHttp.php
- 官方性能配置文档:https://docs.qloapps.com/
- 站内相关:《QloApps 1.7.0 介绍与选型指南》、《QloApps 1.7.0 Ubuntu 22.04 安装指南》、《QloApps 1.7.0 API 使用详解》(PS_WEBSERVICE 与密钥配置的实操篇)