Windows下PHP mkdir()路径超长失败的根本原因是系统API的260字符限制;解决方式包括启用系统级长路径支持、缩短代码中路径长度、使用符号链接或清理环境变量干扰。

PHP 的 mkdir() 在 Windows 下遇到路径超长(超过 260 字符)失败,根本原因不是 PHP 本身限制,而是 Windows 传统 API(如 CreateDirectoryA)的默认路径长度上限。即使你传入的是合法 UTF-8 字符串,只要最终解析后的完整绝对路径字节数 > 260(含终止符),就可能直接返回 false,且不报具体错误。
启用长路径支持(系统级修复)
这是最彻底的解决方式,适用于 Windows 10 1607+ 和 Windows 11:
- 以管理员身份运行组策略编辑器(
gpedit.msc),导航至:
计算机配置 → 管理模板 → 系统 → 文件系统 → 启用 Win32 长路径,设为“已启用” - 或修改注册表:
路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
将LongPathsEnabled的 DWORD 值设为 1 - 修改后需重启 PHP 进程(如 Apache 或 php-fpm)甚至整个系统才能完全生效
缩短实际路径长度(代码层规避)
不依赖系统设置,适合受限环境(如共享主机、CI/CD 流水线):
- 避免深层嵌套:把目标目录建在根级或短路径下,例如
C:\tmp\myapp而非C:\Users\张三\Documents\Projects\php-app\storage\cache\2026\11\03\user_data\uploads - 使用
getcwd()或dirname(__FILE__)拼接时,优先用相对路径并控制层级;必要时用realpath()归一化后再截断冗余部分 - 对用户输入的路径名做精简:用
basename()提取最后一级文件夹名,再拼接到已知短前缀上
改用符号链接绕过长度限制
在物理短路径下创建真实目录,再用符号链接指向它:
- 手动在命令行执行:
mklink /D C:\shortlink C:\very\long\path\that\exceeds\260\chars - PHP 中调用
mkdir('C:\shortlink\subdir', 0755, true)—— 实际创建发生在短路径目标位置,不受 260 限制影响 - 注意:需管理员权限创建符号链接;Web 服务器进程也需有访问目标目录的权限
检查并清理环境变量干扰
某些长路径问题其实是间接引发的:
- 确认
%TEMP%和%TMP%不指向深层中文路径(如C:\Users\张三\AppData\Local\Temp),建议统一改为C:\Temp -
%USERPROFILE%含中文也会导致子路径拼接后轻易突破 260 限制,可考虑注册表修正为英文路径(如C:\Users\DefaultUser) - 这些变量一旦超长,会影响 PHP 内部临时操作(如 session、upload 临时文件),连带导致 mkdir 所在上下文异常
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











