PHP - 将 Excel 转换为 PDF (Phpspreadsheet) - 不允许操作

PHP - Converting Excel to PDF (Phpspreadsheet) - Operation not permitted

我正在尝试将 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);

如前所述,这段代码 运行 在当地没问题。临时文件 $newFileName 在我的 /temp_files 文件夹中创建。

我做错了什么?

好的,这个问题的解决方案相当棘手。我发现它与 Phpspreadsheet 无关,而是 Mpdf.

问题是文件 "imagick-3.4.0.tgz" 文件权限设置为只读。说明 unlink 无法处理此特定文件。这一直追溯到我第一次安装 imagick 库时。

解决方案是转到 /tmp 文件夹并手动删除 imagick-3.4.0.tgz 文件。在执行 imagick 安装时实际上应该删除此文件夹。