Как мне запустить HTMLDOC из CGI-скрипта?

У меня есть CGI-скрипт, который создает файл .pdf из HTML-страницы. Моя проблема в том, что при запуске из веб-браузера документ .pdf не создается.

Что я сделал до сих пор:

  • настройки chmod установлены на рекомендованные выше (777)
  • протестировал нормальный вывод файла из скрипта, который отлично работает
  • при запуске локально на сервере из командной строки скрипт .cgi работает

Почему скрипт не работает при запуске из веб-браузера?

#!/usr/bin/perl
use LWP::Simple;
use HTML::HTMLDoc;
use CGI;
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head>";
print "<body>";

my $htmldoc->set_html_content(qq~<html><body>A PDF file</body></html>~);
my $pdf = $htmldoc->generate_pdf() or die($!);
$pdf->to_file('/var/www/tom.pdf');
print "</body></html>";
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
442
2

Ответы 2

Куда вы отправляете сгенерированный файл в браузер?

Обратите внимание, что вы не можете встраивать PDF в HTML; ты должен либо

  • поместите файл в место, где ваш веб-сервер доставит его, и отправьте ссылку на файл в браузер
  • или установите тип содержимого application/pdf и просто верните файл (без каких-либо HTML-тегов вокруг него).

Наиболее вероятная причина заключается в том, что /var/www не доступен для записи процессу apache (или любому другому веб-серверу, который вы используете), поэтому, если вы запустите его из командной строки - с разрешениями вашего пользователя - он будет успешным, но при вызове из веб-браузера веб-сервер запускает его со своими собственными (очень ограниченными) разрешениями, а затем запись не выполняется.

Вам необходимо во-первых - проверить код возврата метода to_file, чтобы узнать, была ли запись успешной, а во-вторых - записать в каталог, в который веб-серверу разрешена запись, например /var/tmp.

Другие вопросы по теме