PHP - Преобразование Excel в PDF (Phpspreadsheet) - Операция не разрешена - PullRequest
1 голос
/ 11 марта 2019

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

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

$spreadsheet = $this->objPHPExcel = \PhpOffice\PhpSpreadsheet\IOFactory::load("MyExcelFile.xlsx");

$class = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class;
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', $class);
$this->objPHPExcel = \PhpOffice\PhpSpreadsheet\IOFactory::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);

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

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

1 Ответ

0 голосов
/ 11 марта 2019

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

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

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

...