Je souhaite proposer un fichier Excel à télécharger avec PhpSpreadsheet
Voici mon code:
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment; filename="hello_world.xlsx"');
$writer->save("php://output");
Je reçois le message d'erreur suivant:
PHP Warning: ZipArchive::close(): Failure to create temporary file: No such file or directory in /Users/sg/GitWorkingCopies/xxx1/xxx2/library/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php on line 374
PHP Fatal error: Uncaught exception 'PhpOffice\PhpSpreadsheet\Writer\Exception' with message 'Could not close Zip file php://output.' in /Users/sg/GitWorkingCopies/xxx1/xxx2/library/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php:375
La documentation de PHPSpreadsheet dit:
\ PhpOffice\PhpSpreadsheet\Writer\Xlsx utilise un stockage temporaire lors de l’écriture dans la sortie php: //. Par défaut, les fichiers temporaires sont stockés dans le répertoire de travail du script. Lorsqu'il n'y a pas d'accès, il retourne à l'emplacement des fichiers temporaires du système d'exploitation.
Upload_tmp_dir est: /Applications/XAMPP/xamppfiles/temp/
Quel dossier dois-je vérifier? Ou qu'est-ce qui cause le problème?
Je ne sais pas si votre code provient d'un fichier inclus, mais j'ai eu un problème similaire. J'ai essayé d'utiliser __DIR__
constant et cela a fonctionné, mon code ressemble à ceci:
$filepath = __DIR__ . "/reports/${filename}_".date("Ymd_Gis").".xlsx";
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($filepath);