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 (подтверждено с помощью phpinfo())
  • max_execution_time:165
  • Версия PHP: 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());
}
}

Редактировать 1: я обнаружил, что на сервере есть журналы, связанные со временем моей проблемы:
[Sat Nov 15 19:31:30 2025] [X-OVHRequest-Id: x] [error] [client x:0] [host moonlightspa.pl] x: FastCGI: comm with server "/homez.789/moonlighok/www/index.php" aborted: read failed
[Sat Nov 15 19:31:30 2025] [X-OVHRequest-Id: x] [error] [client x:0] [host moonlightspa.pl] AH10149: FastCGI: incomplete headers (0 bytes) received from server "/homez.789/moonlighok/www/index.php"
[Sat Nov 15 19:31:30 2025] [X-OVHRequest-Id: x] [error] [client x:0] [host x.pl] AH10157: FastCGI: An error happened during Fastcgi processing, fallback to CGI


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

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

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

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

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

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