XAMPP无需为SQLite配置端口,因其是文件型数据库;需确保php.ini中启用extension=sqlite3和extension=pdo_sqlite,重启Apache,并验证扩展加载及文件路径权限。

XAMPP 本身不“配置端口”来支持 SQLite —— SQLite 是文件型数据库,不走网络端口,根本不需要监听 80、443 或任何 TCP 端口。你真正要做的,是让 PHP(运行在 Apache 的某个端口上,比如 80 或 8080)能调用 SQLite3 或 PDO::sqlite 扩展。所谓“多端口支持 SQLite”,其实是误解:端口属于 Apache/PHP 服务,SQLite 只认文件路径。
确认 php.ini 中启用了 sqlite3 和 pdo_sqlite 扩展
这是最常卡住的一步。XAMPP 默认可能已启用,但容易被手动改错或版本升级后失效。
- 运行
phpinfo()页面,搜索Loaded Configuration File,找到真实生效的php.ini路径(不是php.ini-development或php.ini-production) - 用文本编辑器打开该
php.ini,查找并确保以下两行**前面没有分号**:extension=sqlite3extension=pdo_sqlite - 检查
extension_dir指向的目录(如C:\xampp\php\ext)下是否存在php_sqlite3.dll和php_pdo_sqlite.dll—— 缺一个都会报Class 'SQLite3' not found或PDOException: could not find driver - 改完必须重启 Apache(XAMPP 控制面板点 Stop 再 Start),仅刷新浏览器无效
验证 SQLite 是否真能用,而不是“端口通了但扩展没加载”
别急着写项目代码,先用最小脚本排除环境问题。把下面内容存为 test-sqlite.php 放进 htdocs 目录,用浏览器访问(比如 http://localhost:8080/test-sqlite.php):
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
<?php
if (!extension_loaded('sqlite3')) {
die('sqlite3 extension not loaded');
}
if (!extension_loaded('pdo') || !in_array('sqlite', PDO::getAvailableDrivers())) {
die('PDO sqlite driver not available');
}
$db = new SQLite3(':memory:');
var_dump($db->querySingle('SELECT 1'));
?>
输出 int(1) 表示完全正常;若报错,说明上面的 php.ini 配置或 DLL 文件有问题,和端口无关。
Apache 多端口(如 8080/8081)下 SQLite 行为一致,但要注意路径权限
如果你通过修改 httpd.conf 启用了多个 Listen 端口(比如 Listen 8080 和 Listen 8081),每个端口背后仍是同一套 PHP 配置。SQLite 的行为不会因端口不同而变化,但有两点易踩坑:
-
SQLite3打开数据库文件时,路径是相对于 PHP 进程工作目录(通常是 Apache 的htdocs或脚本所在目录),不是相对于 URL。用相对路径如'data/app.db'前,务必确认 Web 服务器用户(Windows 下一般是 SYSTEM 或当前登录用户)对目标目录有读写权限 - 若用
PDO连接,DSN 中的路径也需注意:sqlite:C:/xampp/htdocs/myapp/db.sqlite比sqlite:./db.sqlite更可靠,避免因chdir()导致路径解析错乱 - 多个端口共用同一个 SQLite 数据库文件时,要小心并发写入冲突(SQLite 默认只允许单写),这不是配置问题,是 SQLite 本身的限制
真正的复杂点在于:你以为在调“端口”,其实是在调 PHP 扩展加载状态和文件系统权限。只要 sqlite3 和 pdo_sqlite 在 phpinfo() 里显示已启用,无论 Apache 监听 80、8080 还是 8081,SQLite 都一样工作——它根本不经过网络栈。

















