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

PhpSpreadsheet写入文件失败:权限问题排查求助

PhpSpreadsheet导出Excel权限拒绝问题

错误信息

尝试通过URL导出数据库数据为Excel并下载时,出现以下错误:

错误1

Warning: fopen(ode_export_data202402163327.xlsx): Failed to open stream: Permission denied in /var/www/ode.od-sites.fr/wp-content/plugins/ode-code-download/includes/exportDataToExcel/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php on line 117

错误2

Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Writer\Exception: Could not open file "ode_export_data202402163327.xlsx" for writing. in /var/www/ode.od-sites.fr/wp-content/plugins/ode-code-download/includes/exportDataToExcel/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php on line 119
( ! ) PhpOffice\PhpSpreadsheet\Writer\Exception: Could not open file "ode_export_data202402163327.xlsx" for writing. in /var/www/ode.od-sites.fr/wp-content/plugins/ode-code-download/includes/exportDataToExcel/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php on line 119

已检查的权限情况

插件根目录权限:

drwxrwxr-x 3 vivian vivian 4096 Feb 6 09:48 ode-code-download/

导出功能相关目录权限:

drwxr-xr-x 3 www-data www-data 4096 Feb 16 12:51 exportDataToExcel/

导出功能目录内文件权限:

-rw-rw-r-- 1 www-data www-data 2039 Feb 16 15:33 export-data-to-excel-functions.php
-rw-rw-r-- 1 www-data www-data 150 Feb 16 15:00 export-data-to-excel.php
drwxrwxr-x 9 www-data www-data 4096 Feb 16 12:32 vendor/

vendor目录中指定文件权限:

-rw-rw-r-- 1 www-data www-data 3599 Jan 24 11:41 BaseWriter.php

权限看起来配置正确,但仍无法解决问题,不清楚为何权限不被识别。

导出数据函数代码

<?php

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

add_action('wp_loaded', 'handle_export_action');

function handle_export_action()
{
  if (isset($_GET['page']) && $_GET['page'] === 'ode_code_download_page' && isset($_GET['action']) && $_GET['action'] === 'export-data') {
    ode_cd_export_to_excel();
    wp_redirect(admin_url('admin.php?page=ode_code_download_page&download-status=success'));
  }
}

function ode_cd_export_to_excel()
{
  global $wpdb;
  $table_name = $wpdb->prefix . 'ode_download_code';

  $results = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

  if ($results) {
    $spreadsheet = new Spreadsheet();

    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'ID');
    $sheet->setCellValue('B1', 'unique_code');
    $sheet->setCellValue('C1', 'downloadable_product_id');
    $sheet->setCellValue('D1', 'remaining_uses');
    $sheet->setCellValue('E1', 'created_at');

    $row = 2;
    foreach ($results as $result) {
      $sheet->setCellValue('A' . $row, $result['ID']);
      $sheet->setCellValue('B' . $row, $result['unique_code']);
      $sheet->setCellValue('C' . $row, $result['downloadable_product_id']);
      $sheet->setCellValue('D' . $row, $result['remaining_uses']);
      $sheet->setCellValue('E' . $row, $result['created_at']);
    }

    $writer = new Xlsx($spreadsheet);

    $filename = 'ode_export_data' . date('Ymdis') . '.xlsx';

    $writer->save($filename);
    readfile($filename);
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="' . $filename . '"');
    header('Cache-Control: max-age=0');
    unlink($filename);
    exit;
  } else {
    wp_redirect(admin_url('admin.php?page=ode_code_download_page&download-status=error'));
    exit;
  }
}

希望有人能提供解决线索。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:36