Laravel保存文件到public文件夹出现Failed to open stream: Permission denied
Song •
4 次浏览 •
0个评论 •
2025年12月17日
我ubuntu+nginx+php,laravel 需要保存微信二维码文件,我已经创建了文件并且给了777 权限,但是有时候偶尔会报错Failed to open stream: Permission denied。这种是什么原因导致的呢?
一、什么权限导致的?
在 Ubuntu 中:
- Nginx 默认以
www-data用户运行 - PHP-FPM(如果你用的是)也默认以
www-data用户运行
但你执行 chmod 777 时,可能是用 root 或你的普通用户(如 ubuntu)操作的。
虽然 777 看似“所有人都能写”,但如果父目录权限不完整、或文件系统挂载限制、或存在 ACL/安全模块,仍可能失败。
. 确认 Web 服务实际运行用户
bash编辑# 查看 Nginx 和 PHP-FPM 的用户
ps aux | grep -E 'nginx|php-fpm'输出类似:
text编辑www-data 1234 ... nginx: worker process
www-data 5678 ... php-fpm: pool www→ 所有写操作都是 www-data 用户发起的。
二、解决办法
避免使用 777,改用正确所有权
777 是安全隐患,且在某些场景下无效。正确做法是让目录属于 www-data:
bash编辑# 设置目录所有者为 www-data
sudo chown -R www-data:www-data /var/www/baidu/public/miniapps
# 设置合理权限(目录 755,文件 644,但写入目录需 775)
sudo chmod -R 775 /var/www/baidu/public/miniapps或者Laravel 提供了 storage/app/public 目录用于存储公开文件,并通过软链接映射到 public/storage。
更多相关好文
-
laravel中distinct()的使用方法与去重 2017-09-11 -
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09 -
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01 -
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18 -
Laravel保存文件到public文件夹出现Failed to open stream: Permission denied 2025-12-17
热门文章
-
Laravel保存文件到public文件夹出现Failed to open stream: Permission denied 2025-12-17 -
nginx如何查看当前访问的是哪个网址 2025-11-17 -
微信公众号回复菜单点击回复文本 2025-10-24 -
laravel+easywechat6出现No component_verify_ticket found以及修改缓存为redis 2025-09-09 -
nginx 服务器如何查看当前访问的域名 2025-06-10

nginx如何查看当前访问的是哪个网址