#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
установке.