You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 8.1下XAMPP中mkdir权限拒绝与SQLite3路径异常问题求助

问题描述

Windows 8.1系统下,安装XAMPP后运行从YouTube下载的订阅网站源码时出现以下报错:

  1. Warning: mkdir(): Permission denied in C:\xampp\htdocs\plan_application\DBConnection.php on line 4
  2. Fatal error: Uncaught Exception: Unable to expand filepath in C:\xampp\htdocs\plan_application\DBConnection.php:13 Stack trace: #0 C:\xampp\htdocs\plan_application\DBConnection.php(13): SQLite3->open('C:\xampp\htdocs...') #1 C:\xampp\htdocs\plan_application\DBConnection.php(85): DBConnection->__construct() #2 C:\xampp\htdocs\plan_application\index.php(2): require_once('C:\xampp\htdocs...') #3 {main} thrown in C:\xampp\htdocs\plan_application\DBConnection.php on line 13

DBConnection.php的1-13行代码如下:

<?php
session_start();
if(!is_dir(__DIR__.'./db'))
    mkdir(__DIR__.'./db');
if(!defined('db_file')) define('db_file',__DIR__.'./db/plan_db.db');
function my_udf_md5($string) {
    return md5($string);
}

Class DBConnection extends SQLite3{
    protected $db;
    function __construct(){
        $this->open(db_file);

已为htdocs文件夹开启读取、写入、修改及完全控制权限,但仍显示错误,请问代码哪里出问题了?


问题分析与解决方法

问题核心是路径拼接格式错误,以下是具体问题和修复方案:

1. 无效路径导致mkdir失败

__DIR__返回当前PHP文件的绝对路径(不带末尾路径分隔符),比如C:\xampp\htdocs\plan_application。直接拼接./db后,得到的路径是C:\xampp\htdocs\plan_application./db,这不符合Windows路径规范,系统无法识别该目录,因此触发权限报错(实际是路径无效导致无法创建)。

2. SQLite数据库路径错误

同理,__DIR__.'./db/plan_db.db'会生成C:\xampp\htdocs\plan_application./db/plan_db.db这个无效路径,导致SQLite无法识别并打开数据库文件,抛出“Unable to expand filepath”错误。

修复后的代码

修改路径拼接逻辑,使用标准的路径分隔符:

<?php
session_start();
// 正确拼接子目录路径,用/适配跨系统,或用DIRECTORY_SEPARATOR适配Windows
$dbDir = __DIR__ . '/db';
if(!is_dir($dbDir))
    mkdir($dbDir, 0755, true); // 添加权限参数+递归创建,确保目录可正常生成
if(!defined('db_file')) define('db_file', __DIR__ . '/db/plan_db.db');
function my_udf_md5($string) {
    return md5($string);
}

Class DBConnection extends SQLite3{
    protected $db;
    function __construct(){
        $this->open(db_file);

额外说明

  • 若想更适配Windows系统,可替换为DIRECTORY_SEPARATOR,例如__DIR__ . DIRECTORY_SEPARATOR . 'db',会自动使用Windows的\作为路径分隔符。
  • mkdir的0755权限和true递归参数,能避免因目录层级问题导致的创建失败,即便你已全开权限,这一步也能增加容错性。

内容的提问来源于stack exchange,提问作者WinBig Namibia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:20:47