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

Laravel-Excel每次生成文件后权限重置,无法写入临时目录

Laravel-Excel临时目录权限问题解决方案

问题描述

使用Laravel-Excel生成文件时,无法写入临时目录/storage/framework/export/,报错:

ErrorException: fopen(/storage/framework/export/laravel-excel-CgOSec4XiXr3vry7juut47IAyVDV9eiB.csv): Failed to open stream: Permission denied in /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php:128

手动修改目录权限后仅能正常运行一次,再次操作仍触发权限拒绝,推测是Laravel-Excel生成文件时主动修改了权限。

解决方案

1. 修复临时目录的基础权限

  • 先确保临时目录存在,不存在则创建:
    mkdir -p storage/framework/export
    
  • 设置目录归属为Web服务器用户(如www-data或nginx)与本地用户同组,同时赋予读写权限:
    chown -R $USER:www-data storage/framework/export
    chmod -R 775 storage/framework/export
    
  • 执行Laravel存储链接命令(若未执行过):
    php artisan storage:link
    

2. 配置Laravel-Excel的权限规则

在项目根目录的config/excel.php配置文件中,找到temporary_files节点,明确设置文件和目录的权限值,避免框架自动修改为不合理权限:

'temporary_files' => [
    'disk' => null,
    'path' => null,
    'prefix' => 'laravel-excel-',
    'suffix' => '',
    'file_permissions' => 0664, // 文件权限,确保同组可读写
    'directory_permissions' => 0775, // 目录权限,确保同组可读写执行
],

修改后保存配置,无需重启服务即可生效。

3. 确认PHP进程用户权限

  • 查看当前运行PHP的用户(CLI模式为当前登录用户,FPM/WEB模式通常为www-data):
    ps aux | grep php
    
  • 确保该用户对storage/framework/export目录拥有读写权限;若使用队列执行导出任务,队列进程的用户也需具备相同权限。

4. 临时规避(不推荐修改依赖文件)

若上述方案无效,可临时修改PhpSpreadsheet的权限逻辑,但此修改会被Composer更新覆盖,仅作应急:
打开vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php,找到setFilePermissions方法,注释掉权限设置代码,或替换为需要的权限值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:14