web-dev-qa-db-fra.com

PhpSpreadsheet: Autorisations | ZipArchive :: close (): Echec de la création du fichier temporaire

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?

4
Phantom

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);
0
Szél Lajos