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
安装时实际上应该删除此文件夹。
我正在尝试将 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
安装时实际上应该删除此文件夹。