У меня есть приложение PHP, которое использует pdf2htmlEX и HTMLpurifier для преобразования документов PDF в текстовый формат. Процесс конвертации состоит из нескольких этапов:
1. загрузка книги с помощью веб-браузера
2. преобразование из pdf в txt с помощью pdf2htmlex
3. обработка txt файлов с помощью HTMLPurifer
Для большинства документов все работает правильно, но для некоторых документов с большим количеством страниц (более 230) шаг 3 не выполняется. Пока HTMLpurifier обрабатывает страницу, возникает ошибка: «Неустранимая ошибка PHP: превышено максимальное время выполнения 0 секунд». В моей конфигурации max_execution_time установлено в 0. Я подключил strace к процессу Apache, и вот результат перед завершением:
lstat("/tmp/books/3349/html/78.page", {st_mode=S_IFREG|0644, st_size=40165, ...}) = 0
open("/tmp/books/3349/html/78.page", O_RDONLY) = 20
fstat(20, {st_mode=S_IFREG|0644, st_size=40165, ...}) = 0
lseek(20, 0, SEEK_CUR) = 0
fstat(20, {st_mode=S_IFREG|0644, st_size=40165, ...}) = 0
read(20, "<div class=\"pd w1 h1\"><div id=\"p"..., 8192) = 8192
read(20, "AACAsAQAAQFgCAAAgLAEAABCWAAAACEs"..., 8192) = 8192
read(20, "7\"><span class=\"_ _1f\"> </span>F"..., 8192) = 8192
read(20, "class=\"_ _8\"> </span>of<span cla"..., 8192) = 8192
read(20, "/span></div><div class=\"t m1 x7a"..., 8192) = 7397
read(20, "", 8192) = 0
read(20, "", 8192) = 0
close(20) = 0
lstat("/tmp/books/3349/text/78.txt", 0x7fff115a43f0) = -1 ENOENT (No such file or directory)
open("/tmp/books/3349/text/78.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 20
fstat(20, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
lseek(20, 0, SEEK_CUR) = 0
write(20, "66 2. TOPOSESa \357\254\201xed space is a"..., 2157) = 2157
close(20) = 0
lstat("/tmp/books/3349/html/79.page", {st_mode=S_IFREG|0644, st_size=48214, ...}) = 0
open("/tmp/books/3349/html/79.page", O_RDONLY) = 20
fstat(20, {st_mode=S_IFREG|0644, st_size=48214, ...}) = 0
lseek(20, 0, SEEK_CUR) = 0
fstat(20, {st_mode=S_IFREG|0644, st_size=48214, ...}) = 0
read(20, "<div class=\"pd w1 h1\"><div id=\"p"..., 8192) = 8192
read(20, "AWAIAACAsAQAAYN5hAoBPSWIEdtXWCAD"..., 8192) = 8192
read(20, "=\"_ _0\"></span>oof<span class=\"f"..., 8192) = 8192
read(20, "c\"></span>).</span></div><div cl"..., 8192) = 8192
read(20, "lass=\"_ _23\"> </span>sho<span cl"..., 8192) = 8192
read(20, "ls0 ws0 r0\">F<span class=\"ff4\"><"..., 8192) = 7254
read(20, "", 8192) = 0
read(20, "", 8192) = 0
close(20) = 0
--- SIGPROF (Profiling timer expired) @ 0 (0) ---
Что интересно - у меня две среды в одной конфигурации системы - одна в AWS, а другая виртуальная машина в VirtualBox. Оба имеют Ubuntu 12.04 + Apache 2.2 + PHP 5.4.13, настройки конфигурации такие же, но проблема возникает только на узле AWS. Любая идея?
Проблема заключалась в том, что для параметра max_input_time установлено слишком маленькое значение. Когда я его увеличил, проблема исчезла. Это сообщение об ошибке PHP вводит в заблуждение.