Я конвертирую 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.
error.log
может быть более актуальным, если stderr ничего не дает. - person mario   schedule 08.01.2017wkhtmltopdf 0.12.2.1 (with patched qt)
. Как вы думаете,patched qt
то, что заставляет его работать без запуска X11? - person BenMorel   schedule 09.01.2017xvfb
, но ни одно из предложенных решений не казалось напрямую применимым к Fedora (пакета с таким именем не существует). - person BenMorel   schedule 09.01.2017