Я в следующем
Ubuntu 12.04 LTS
PHP 5.3.10-1ubuntu3.18 with Suhosin-Patch (cli)
ImageMagick 6.6.9-7
GPL Ghostscript 9.05 (2012-02-08)
мой гс под /usr/bin
Я постоянно преобразую — PDF в JPG каждой страницы PDF в одно изображение. Сначала он работал для 1-30 комплектов PDF, но теперь я получаю сообщение об ошибке после завершения 7 комплектов PDF
запустить скрипт PHP в командной строке. После преобразования 5-7 комплектов PDF в JPG отдельные изображения (около 1000 JPG) я получаю следующую ошибку
PHP Fatal error: Uncaught exception 'ImagickException' with message 'Postscript delegate failed `../books/58/58.pdf': @ error/pdf.c/ReadPDFImage/663' in /var/www/mysite/public_html/admin/lib.php:10
Stack trace:
#0 /var/www/mysite/public_html/admin/lib.php(10): Imagick->__construct('../books/58/58....')
#1 /var/www/mysite/public_html/admin/test.php(118): include('/var/www/stagin...')
#2 {main}
thrown in /var/www/mysite/public_html/admin/lib.php on line 10
lib.php имеет скрипт для преобразования PDF в JPG — код, как показано ниже
<?php
$file_name = "../books/$book_id/$book_id".'.pdf';
mkdir("../books/$book_id/pages");
// Strip document extension
$file_name = basename($file_name, '.pdf');
// Convert this document
// Each page to single image
$img = new imagick("../books/$book_id/$book_id".'.pdf');
// Set image resolution
// Determine num of pages
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
// Convert PDF pages to images
for($i = 0;$i < $num_pages; $i++) {
// Set iterator postion
$img->setIteratorIndex($i);
// Set image format
$img->setImageFormat('jpeg');
// Write Images to temp 'upload' folder
$img->writeImage("../books/$book_id/pages/$i".'.jpg');
}
$img->destroy();
?>
После получения ошибки, она прекращает конвертацию, но когда я снова запускаю скрипт, он работает еще на 5-7 комплектов PDF и снова останавливается.
Может кто-нибудь, пожалуйста, скажите мне, что мне здесь не хватает.
Я ценю вашу помощь.
Заранее спасибо.
Как предположил @KenS, это, вероятно, тот случай, когда вызов GhostScript напрямую был бы лучше, так как это было бы как быстрее, так и без сбоев.
Я подозреваю, что проблема, с которой вы сталкиваетесь, заключается в том, что ImageMagick держит какой-то ресурс открытым, и что в какой-то момент обработка просто начинает давать сбой, потому что этого ресурса больше нет.
Если вы хотите исследовать это, Трассирование будет инструментом для этого. Однако, просто позвонив в GS, вы сможете перейти к более важным вещам.
Других решений пока нет …