Laravel如何访问局域网内其他电脑/映射网络驱动器的文件?
解决Laravel访问局域网共享文件的问题
问题分析
你当前的配置存在两个核心问题:
- 映射驱动器(
W:/)属于用户级挂载,Laravel运行的服务进程(如IIS应用池、Apache/PHP-FPM进程)通常没有权限访问这类用户专属映射 10.1.101.11/reports不是Windows局域网共享的合法路径格式,必须使用UNC标准路径
正确配置方法
1. 使用UNC路径配置Storage磁盘
局域网共享文件的标准路径为UNC格式:\\服务器IP\共享文件夹名,在PHP配置中需要将反斜杠转义(用双反斜杠\\),或用单引号包裹避免转义。
修改filesystems.php的磁盘配置:
// 替换映射驱动器为对应共享文件夹的UNC路径(推荐方式) 'example1' => [ 'driver' => 'local', 'root' => '\\\\10.1.101.11\\w_drive_shared', // 替换为W盘对应的实际共享UNC路径 // 可选:按需配置文件/目录权限 'permissions' => [ 'file' => [ 'public' => 0644, 'private' => 0600, ], 'dir' => [ 'public' => 0755, 'private' => 0700, ], ], ], // 直接配置目标共享文件夹 'example2' => [ 'driver' => 'local', 'root' => '\\\\10.1.101.11\\reports', // 注意双反斜杠转义格式 ],
2. 确保服务进程拥有访问权限
Laravel运行的用户必须获得局域网共享文件夹的对应权限:
- IIS环境:找到对应应用池的身份(默认是
IIS AppPool\你的应用池名称),在共享文件夹的「共享权限」和「NTFS权限」中添加该用户,分配读取/写入等所需权限 - WAMP/XAMPP环境:Apache默认运行用户为
SYSTEM或当前登录用户,需确保该用户能正常访问共享文件夹(可手动用该用户身份打开共享验证) - 若共享需账号密码验证,在Windows「凭据管理器」中添加共享的账号密码,让服务进程自动获取权限
3. 验证配置有效性
添加测试路由确认访问是否正常:
Route::get('/test-share', function () { try { $files = Storage::disk('example2')->files(); return response()->json(['files' => $files]); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } });
访问该路由,若能返回文件列表则配置成功;若报错,优先检查路径格式和权限设置。
内容的提问来源于stack exchange,提问作者Hixx
相关产品推荐
相关产品推荐

