Выполнение внешней программы (kindlegen) из PHP не завершается без ошибок

Я создаю генератор файлов Mobi, используя PHP и программу kindlegen.

Я имею:
файл kindlegen в пути /var/www/webook_disk/
— PHP скрипт

echo exec(./kindlegen /var/www/webook_disk/books_drafts/1234/book.opf -o 1234.mobi)
  • книжные файлы в /var/www/webook_disk/books_drafts/1234/

Когда я запускаю скрипт PHP, я получаю этот журнал:

Info(prcgen):I1002: Parsing files  0000002

Когда я бегу ./kindlegen /var/www/webook_disk/books_drafts/1234/book.opf -o 1234.mobi из консоли я получаю этот журнал:

*************************************************************
Amazon kindlegen(Linux) V2.9 build 1028-0897292
A command line e-book compiler
Copyright Amazon.com and its Affiliates 2014
*************************************************************

Info(prcgen):I1047: Added metadata dc:Title        "Przykładowa książka"Info(prcgen):I1047: Added metadata dc:Creator      "webook"Info(prcgen):I1047: Added metadata dc:Publisher    "webook"Info(prcgen):I1002: Parsing files  0000002
Info(prcgen):I1016: Building enhanced PRC file
Info(prcgen):I1015: Building PRC file
Info(prcgen):I1006: Resolving hyperlinks
Warning(prcgen):W14001: Hyperlink not resolved:  /2010/07/Wyprawa-zlodzieja-do-Mazeri.html
Warning(prcgen):W14002: Some hyperlinks could not be resolved.
Info(prcgen):I1008: Resolving start reading location
Warning(prcgen):W14016: Cover not specified
Info(pagemap):I8000: No Page map found in the book
Info(prcgen):I1045: Computing UNICODE ranges used in the book
Info(prcgen):I1046: Found UNICODE range: Basic Latin [20..7E]
Info(prcgen):I1046: Found UNICODE range: Latin Extended-A [100..17F]
Info(prcgen):I1046: Found UNICODE range: Latin-1 Supplement [A0..FF]
Info(prcgen):I1046: Found UNICODE range: General Punctuation - Windows 1252 [2013..2014]
Info(prcgen):I1017: Building PRC file, record count:   0000025
Info(prcgen):I1039: Final stats - text compressed to (in % of original size):  61.30%
Info(prcgen):I1040: The document identifier is: "PrzykKadowa_ksiBQka"Info(prcgen):I1041: The file format version is V5
Info(prcgen):I1031: Saving PRC file
Info(prcgen):I1033: PRC built with WARNINGS!
Info(prcgen):I1007: Resolving mediaidlinks
Info(prcgen):I1011: Writing mediaidlinks
Info(prcgen):I1009: Resolving guide items
Info(prcgen):I1017: Building PRC file, record count:   0000027
Info(prcgen):I1039: Final stats - text compressed to (in % of original size):  60.45%
Info(prcgen):I1041: The file format version is V8
Info(prcgen):I1032: PRC built successfully
Info(prcgen):I15000:  Approximate Standard Mobi Deliverable file size :   0002209KB
Info(prcgen):I15001:  Approximate KF8 Deliverable file size :   0002215KB
Info(prcgen):I1037: Mobi file built with WARNINGS!

Похоже, что PHP-скрипт не завершает выполнение программы kindlegen и останавливается на Info(prcgen):I1002: Parsing files 0000002

Что может быть причиной?

** ОБНОВЛЕНИЕ 1 **
Когда я изменил команду php с exec в shell_exec вывод такой:
Я изменил команду на shell_exec а вот логи:

*************************************************************
Amazon kindlegen(Linux) V2.9 build 1028-0897292
A command line e-book compiler
Copyright Amazon.com and its Affiliates 2014
*************************************************************

Info(prcgen):I1047: Added metadata dc:Title        "Przykładowa książka"Info(prcgen):I1047: Added metadata dc:Creator      "webook"Info(prcgen):I1047: Added metadata dc:Publisher    "webook"Info(prcgen):I1002: Parsing files  0000002

Так что не имеет значения, какую команду я использую. Проблема в том, что он внезапно останавливается.

Сегодня я обнаружил, что произошла ошибка в var/crash:
Но журнал очень длинный, поэтому я положил его в суть:
https://gist.github.com/blaszczakphoto/a32fd65384fcd8dd4f48751bfd78e699

0

Решение

Глядя на документацию, возвращаемое значение exec является следующим:

Последняя строка из результата команды. Если вам нужно выполнить
команда и все данные из команды передаются обратно
без каких-либо помех используйте функцию passthru ().

Вы можете использовать shell_exec или же пройти.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]