@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мб, поэтому ввиду ограничений вирт хостинга извините....

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

и есть ли возможность в консоли посмотреть какую-нибудь полезную для отладки информацию?
ну кроме времени выполнения скрипта...
  • Вопрос задан
  • 237 просмотров
Решения вопроса 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 ((((
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 11:46
3000 руб./за проект
23 апр. 2024, в 11:38
20000 руб./за проект