wkhtmltopdf через proc_open () не работает в PHP-модуле Apache

Я конвертирую HTML-документы в PDF, вызывая wkhtmltopdf с помощью proc_open ().

Вот пример сценария:

$wkhtmltopdf = '/bin/wkhtmltopdf';

$html = '<html><body><h1>Hello world!</h1></body></html>';

$process = proc_open($wkhtmltopdf . ' - -', [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
], $pipes);

fwrite($pipes[0], $html);
fclose($pipes[0]);

$pdf = stream_get_contents($pipes[1]);
fclose($pipes[1]);

$err = stream_get_contents($pipes[2]);
fclose($pipes[2]);

$status = proc_close($process);

if ($status != 0) {
    die('Status ' . $status . ': ' . var_export($err, true));
}

echo substr($pdf, 0, 4);

Если я запускаю сценарий из интерфейса командной строки PHP, сценарий работает нормально и выводит заголовок PDF, как и ожидалось:

%PDF

Однако если я запускаю его из модуля PHP Apache, я всегда получаю одну и ту же ошибку:

Статус 134: ''

При поиске в Google статус 134 выдает что-то вроде «утверждение не удалось», что мне не очень помогает. stderr быть пустым, это тоже бесполезно.

Почему этот код не работает под модулем PHP Apache?

Я использую wkhtmltopdf 0.12.3 в Fedora 25 с PHP 7.1.


person BenMorel    schedule 08.01.2017    source источник
comment
Это действительно работает из CLI, или только из CLI с запущенным X11? См. Также stackoverflow.com/questions/38719715/ // Код выхода 134 обычно соответствует SIGABRT, кстати. - Также error.log может быть более актуальным, если stderr ничего не дает.   -  person mario    schedule 08.01.2017
comment
Хм, вы правы, я использую CLI в графической среде. Если я попытаюсь использовать SSH, то получаю следующую ошибку: Ошибка 134: 'QXcbConnection: не удалось подключиться к дисплею. Есть ли способ заставить его работать в этом случае?   -  person BenMorel    schedule 09.01.2017
comment
Как говорила моя бабушка: компилировать из исходников или GTFO. Ваш двоичный файл wkhtmltopdf не подходит для использования на сервере без обходных путей.   -  person mario    schedule 09.01.2017
comment
На сервере, где он работает с PHP-FPM, используется версия wkhtmltopdf 0.12.2.1 (with patched qt). Как вы думаете, patched qt то, что заставляет его работать без запуска X11?   -  person BenMorel    schedule 09.01.2017
comment
Хорошо, я наконец загрузил архив с официальной страницы загрузки wkhtmltopdf, и этот архив содержит скомпилированную двоичную версию это работает из коробки. Я удалил версию, поставляемую с Fedora 25, и заменил ее этой, и она работает как шарм. Спасибо за вашу помощь! Обратите внимание, что решения в вопросе, который вы связали для работы с xvfb, но ни одно из предложенных решений не казалось напрямую применимым к Fedora (пакета с таким именем не существует).   -  person BenMorel    schedule 09.01.2017
comment
Глупо близко ... -..- '   -  person Carlos    schedule 14.01.2020