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
相关产品推荐
相关产品推荐

