Craft Commerce makes use of `dompdf` to generate invoices for your customers. In some circumstances this can result in dompdf attempting to write temporary files into the `vendor` folder. This is generally bad practice and on Servd results in a permissions error being thrown as the `vendor` folder is owned by `root`.
We can resolve this by telling dompdf to use Craft's storage folder for its temporary files:
Event::on(
Pdfs::class,
Pdfs::EVENT_MODIFY_RENDER_OPTIONS,
function (PdfRenderOptionsEvent $event)
{
$pathService = Craft::$app->getPath();
$dompdfRootDir = $pathService->getTempPath() . DIRECTORY_SEPARATOR . 'commerce_dompdf';
$dompdfFontDir = $pathService->getTempPath() . DIRECTORY_SEPARATOR . 'commerce_dompdf';
$event->options->setRootDir($dompdfRootDir);
$event->options->setFontDir($dompdfFontDir);
});You can add this to a custom module's `init` function in your Craft project to ensure it runs with every request.