PHP — Преобразование Excel в PDF (Phpspreadsheet) — Операция не разрешена

#php #excel #phpspreadsheet

#php #excel #phpspreadsheet

Вопрос:

Я пытаюсь преобразовать файл Excel в PDF (Base64).

Это код, который преобразует Excel в PDF:

 $spreadsheet = $this->objPHPExcel = PhpOfficePhpSpreadsheetIOFactory::load("MyExcelFile.xlsx");

$class = PhpOfficePhpSpreadsheetWriterPdfMpdf::class;
PhpOfficePhpSpreadsheetIOFactory::registerWriter('Pdf', $class);
$this->objPHPExcel = PhpOfficePhpSpreadsheetIOFactory::createWriter($spreadsheet, 'Pdf');
$this->objPHPExcel->writeAllSheets();

//Save the file. (THIS IS WHERE THE ERROR OCCUR)   
$this->objPHPExcel->save(storage_path() . '/app/temp_files/' . $newFileName);
  

Все работает локально, но всякий раз, когда я пытаюсь запустить тот же код на моем сервере Laravel Forge, я получаю сообщение об ошибке ниже:

 unlink(/tmp/imagick-3.4.0.tgz): Operation not permitted
  

Если я отслеживаю ошибку, она находится в этой конкретной строке:

 $this->objPHPExcel->save(storage_path() . '/app/temp_files/' . $newFileName);
  

Как уже было сказано, этот код отлично выполняется локально. Временный файл $newFileName создается внутри моей /temp_files папки.

Что я делаю не так?

Ответ №1:

Хорошо, решение этой проблемы было довольно сложным. Я обнаружил, что это не имеет ничего общего с Phpspreadsheet , а скорее Mpdf .

Проблема заключалась в том, что разрешение файла «imagick-3.4.0.tgz» было установлено только для чтения. Исправление, которое unlink не может работать с этим конкретным файлом. Это восходит ко времени, когда я впервые установил imagick библиотеку.

Решением было зайти в /tmp папку и удалить imagick-3.4.0.tgz файл вручную. На самом деле эту папку следует удалить при imagick установке.