@Mihail_Mel

Как оптимизировать преобразование PDF в PNG?

Здравствуйте!
Преобразовываю PDF в PNG на сервере постранично
$location = "папка"; $location_file = "имя файла";
if($_FILES['filename_less']['name'] != ''){
  if(!mkdir($location, 0777, true)) 
   { echo "Не удалось создать директорию. Выполнение операции невозможно"; exit(); } 
   else
   {
     if(move_uploaded_file($_FILES['filename_less']['tmp_name'], $location_file)) 
     { 
       // преобразование файла pdf в png или jpeg
	$im = new Imagick();
	$im->setResolution(300,300);
	$im->readimage($location_file); 
 	$noOfPagesInPDF = $im->getNumberImages(); 
 	if($noOfPagesInPDF) 
	{ 
 	   for ($i = 0; $i < $noOfPagesInPDF; $i++) 
	  { 
 	    $url = $location_file.'['.$i.']'; 
 	    $image = new Imagick($url);
 	    $image->setImageFormat("png"); 
 	    $image->writeImage($location."/".($i+1).'_'.$way.'.png'); 
	    echo "Страница создана";
 	  }
      } else { echo "PDF не содержит страниц"; }
    } 
   else { echo "Файл не загружен. Обратитесь к администратору портала"; exit(); }
   }
}


и все работает но есть 1 момент - файл более 10 страниц выдает BAD GETWAY
а на хостере говорят что память съедается до 400мб, поэтому ввиду ограничений вирт хостинга извините....

как-то можно оптимизировать скрипт?

и есть ли возможность в консоли посмотреть какую-нибудь полезную для отладки информацию?
ну кроме времени выполнения скрипта...
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
@BorisKorobkov Куратор тега PHP
Web developer
Добавьте профилирование. Возможно, падает на readimage(), когда читает весь файл в память.
Попробуйте убрать этот код. А вместо определения количества страниц можно перебирать их все подряд, пока не будет ошибка, которую отловить try-catch

Оптимизировать тоже надо, но в любом случае переходите на VPS. Это стоит от 340 руб/месяц. Только на написание этого вопроса вы уже потратили время, которое стоит дороже месячной аренды.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Adamos
@Adamos
Шаред не из тех, которые позволяют запускать произвольные скрипты по крону?
Так-то пройтись по папке с PDF консольным ImageMagick может оказаться куда быстрее, чем все вот это с пыхом. Потом разбирать уже готовые картинки, куда надо.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) Зачем такое разрешение - 300 дпи? Это критично? Поставьте 100-150, для экрана это более чем достаточно.
2) Выделите обработку в отдельный скрипт и запускайте из консоли в отдельном потоке каждую страницу - консольные приложения не имеют ограничения по времени исполнения, с другой стороны - на шареде может не поддерживаться cli.
3) Замер тайминга не делали? Что из операций отжирает ресурс? Сначала бы определить что оптимизировать...
4) Неплохо после обработки использовать clear
Ответ написан
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Если запускать внешние команды через exec(), тот же imagemagick или ghostscript? В свое время не получилось imagemagick заставить менять dpi у выходного файла, поэтому использовался ghostscript. Насчёт съедаемой памяти и в принципе возможности запуска на вашем хостинге - не подскажу.
Ответ написан
Комментировать
@Mihail_Mel Автор вопроса
Спасибо всем за идеи! Скорее всего придется копать в сторону API, потому как все остальное реально вешает виртуальный сервер, а использовать выделенный нет имеет смысла, так как это не сервис перегонки PDF ((((
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы