context参数仅在mkdir()通过流封装器操作远程存储(如FTP/SFTP)时生效,用于配置连接认证等;本地文件系统下该参数被忽略,与recursive和mode无关。

context 参数用于控制 mkdir() 创建目录时的底层 I/O 行为,但绝大多数 Web 场景下不需要也不建议使用。
它本质是给流(stream)用的,不是给文件系统直连用的
PHP 的 mkdir() 在底层可能通过流封装器(如 file://、ftp://、sftp:// 或自定义协议)操作路径。当路径带协议前缀(比如 ftp://user:pass@host/dir),context 就起作用——它告诉 PHP 怎么连接、认证、超时、加密等。
例如:
- 用 FTP 创建远程目录时,需通过 context 设置用户名、密码、端口;
- 用 SFTP 创建目录时,context 可指定私钥路径、主机密钥验证方式;
- 本地
file://路径(包括普通绝对/相对路径)通常忽略 context,传了也无效。
实际写法示例(仅限特殊协议)
创建 FTP 目录:
$opts = [
'ftp' => [
'username' => 'user',
'password' => 'pass',
'timeout' => 30
]
];
$context = stream_context_create($opts);
mkdir('ftp://example.com/newdir', 0755, true, $context);
注意:stream_context_create() 必须先调用,且 context 数组结构取决于所用协议(FTP、HTTP、S3 等各不相同)。
为什么你大概率用不到
99% 的 PHP 项目在本地文件系统(Linux/Windows)上运行,路径是 /var/www/uploads 或 ./cache 这类,此时:
- context 参数被完全忽略;
- 传
null、省略该参数、或传任意无效 resource 都不影响 mkdir 成功与否; - 强行传错 context 可能触发警告,但不会改变本地目录创建行为。
别和 recursive 混淆
有人误以为 context 能“控制递归创建逻辑”或“设置权限掩码”,这是错的。recursive 控制是否建父目录,mode 控制权限,context 只管“怎么连到那个路径所代表的存储后端”。两者职责完全不同。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











