PDF-файл ваучера WooCommerce иногда не отправляется после оплаты — процесс Dompdf автоматически завершается сбоем после Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PDF-файл ваучера WooCommerce иногда не отправляется после оплаты — процесс Dompdf автоматически завершается сбоем после

Сообщение Anonymous »

У меня есть собственный плагин WooCommerce, который генерирует ваучер в формате PDF и отправляет его покупателю после оплаты. Большую часть времени он работает отлично, но иногда электронное письмо не отправляется и в журналах не появляются ошибки. У меня есть журнал для каждого шага, и последние журналы для некоторых заказов выглядят так (данные клиента анонимизированы):

Код: Выделить всё

[2025-11-10 08:57:34] -----------------
[2025-11-10 08:57:34] ✔ Function vg_generate_voucher_pdf called. Order ID: 12747
[2025-11-10 08:57:34] Number of order items: 1
[2025-11-10 08:57:34] Voucher number (order ID): 12747
[2025-11-10 08:57:34] New item in loop...
[2025-11-10 08:57:34] Checking product category ID: 10971
[2025-11-10 08:57:34] Product categories: kup-online-dabska-spa
[2025-11-10 08:57:34] Voucher for: John-Doe
[2025-11-10 08:57:34] Recipient email: johndoe@example.com
[2025-11-10 08:57:35] Dompdf object created
[2025-11-10 08:57:35] Paper set
[2025-11-10 08:57:35] Memory usage before render: 39,845,888
Обратите внимание, что после использования памяти журнал «Отображение PDF» или «Отправленное письмо» отсутствует, что означает, что процесс автоматически останавливается где-то во время или после Dompdf::render().
Я проверил:

Код: Выделить всё

memory_limit: 512M (confirmed with phpinfo())
max_execution_time:165
PHP version: 8.1.33
Данные заказа присутствуют и очищены.
Обернут рендеринг и почту в try/catch, никаких исключений не происходит.
Вот упрощенная версия моей функции создания PDF-файлов:

Код: Выделить всё

function generate_and_send_pdf($html, $voucher_for, $order_id, $recipient_email, $location_email, $item)
{
try {
$dompdf = new Dompdf();
$dompdf->set_option('isRemoteEnabled', true);
$dompdf->set_option('defaultFont', 'DejaVu Sans');
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
vg_log("Memory usage before render: " . memory_get_usage(true));
$dompdf->render();
vg_log("Memory usage after render: " . memory_get_usage(true));
vg_log("PDF rendered");

$output = $dompdf->output();
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/VOUCHERS/Voucher_' . $voucher_for . '-' . $order_id . '.pdf';
file_put_contents($file_path, $output);
vg_log("PDF saved to: " . $file_path);

$headers = [
'Content-Type: text/html; charset=UTF-8',
'Reply-To: ' . $location_email
];
$sent = wp_mail(
$recipient_email,
'Your Voucher',
'Voucher PDF attached',
$headers,
[$file_path]
);

if ($sent) {
vg_log("✔ Mail sent.");
} else {
vg_log("🛑 Mail NOT sent!");
}
} catch (Throwable $e) {
vg_log("Error in Dompdf: " . $e->getMessage());
}
}
Будем очень признательны за любые рекомендации и помощь.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ess-silent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»