PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 11
eastman75 Отправлено: 18 Мая, 2013 - 19:26:14 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
[quote=Мелкий][/quote]
Все правильно. Действительно, файл со скриптом содержал в самом начале 3 байта, которые всовывает туда Windows. Я их убрал - никакой редактор их не показывает, пришлось использовать WinHEX. Далее - вставил вызовы функции header() в самом начале скрипта и -- УРА!!! - все заработало, то есть я увидел красивый PDF-файл.
БОЛЬШОЕ СПАСИБО ВСЕМ, ПРИНЯВШИМ УЧАСТИЕ В ОБСУЖДЕНИИ !!!

Разрешите мне вернуться к теме. Итак, вот код, который работает:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. header('Content-Type:application/pdf; charset=UTF-8', false);
  4. header('Content-Disposition:inline; filename = file.pdf', false );
  5.  
  6. /* Осуществляем проверку вводимых данных */
  7. $year = htmlspecialchars($_POST["year"]);
  8. $number = htmlspecialchars($_POST["number"]);
  9.  
  10. /* Формируем ссылку на файл */
  11. $filename = '../files/' . $number . $year . '.pdf';
  12.  
  13. /* Проверяем наличие файла и выводим его содержимое в буфер как строку */
  14. $html = '';
  15. if (file_exists($filename)) { // если файл существует
  16.         $html = file_get_contents($filename);
  17.         if ($html != '') print $html;
  18.        else echo 'НЕТ такого файла';
  19.         exit();
  20. }      
  21. ?>
  22.  


Если файл существует, он отображается в браузере как PDF-файл. Но если файла нет, сообщение об этом НЕ ВЫВОДИТСЯ, а вместо этого Adobe Reader выводит окошко с сообщением об ошибке:
http://www[dot]4shared[dot]com/photo/Tdq[dot][dot][dot]eader_error[dot]html

Я понимаю, что ридеру передается что-то, не являющееся PDF-файлом, но как исправить эту ситуацию?
Разобрался я. Отправка заголовков в скрипте стоит в самом начале скрипта и производится до того, как будет сделана проверка на существование файла. Получается, что рендеринг PDF-кода происходит всегда, независимо от того, есть ли такой код или его нет. Отсюда и сообщение об ошибке: пустой файл есть, а кода нет. Если же переставить отсылку заголовков ПОСЛЕ проверки наличия файла, то они не будут отсылаться при отсутствии файла; нужно также добавить в скрипт сообщение о том, что файла нет (в ветке ELSE). Если кому-то надо, могу выложить полный текст работающего скрипта.
eastman75 Отправлено: 18 Мая, 2013 - 18:54:21 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
caballero пишет:
HEREDOC

За это спасибо. Лишний раз убеждаюсь, что надо читать мануалы !!!
Что же касается никакого HTML, то я его убрал, оставил только заголовки в виде <meta ... и получил тот же результат - вывелся PDF-код. Вы скажете, что и <meta ... надо убрать, и опять я с Вами соглашусь, только вот функция header() у меня не катит - об этом написано раньше. НЕУЖЕЛИ НЕЛЬЗЯ ДАТЬ ДЕЛЬНЫЙ СОВЕТ ИЛИ ХОТЯ БЫ ССЫЛКУ?
eastman75 Отправлено: 18 Мая, 2013 - 14:47:04 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
DlTA, верстку я вывожу для того, чтобы дать браузеру информацию о типе вложения. Но, оказывается, это не помогает - и без верстки, и с версткой выводится только PDF-код. А первая строчка для $html - это не опечатка; оказывается, так можно задавать длинные строки для переменной в PHP (см. например http://www[dot]mpdf1[dot]com/mpdf/download ). Я тоже не знал об этом раньше. Во всяком случае, мой скрипт обрабатывается без ошибок. А ВОТ ИЗОБРАЖЕНИЕ ИЗ КОДА НЕ ВЫВОДИТСЯ !!!
eastman75 Отправлено: 17 Мая, 2013 - 20:11:42 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
DlTA пишет:
гдето и что то у вас до этого места уже было выведено в браузер

Отказался от mPDF, так как этот класс предназначен для формирования PDF-файла, а мне нужно просто вывести в окно браузера готовый PDF-файл, имя которого формируется из запроса в HTML-файле в переменной $filename. Вот окончательный вариант скрипта:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. ...
  4. $html = "
  5. <html><head>
  6. <meta http-equiv="Content-Type" content="application/pdf; charset=UTF-8">
  7. <meta http-equiv="Content-Disposition" content="inline; filename = '.$filename.' ">
  8. </head><body>
  9. ';
  10. if (file_exists($filename)) {
  11.         $html .= file_get_contents($filename);
  12.         $html .= '</body></html>';
  13.         print $html;
  14.    exit;
  15. }
  16. ...
  17. ?>
  18.  

проблема в том, что в окно браузера из файла выводится не изображение, а PDF-код. Так как же заставить браузер сделать рендеринг?
eastman75 Отправлено: 15 Мая, 2013 - 17:00:16 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
DeepVarvar пишет:
eastman75 пишет:
в том смысле, что такие заголовки уже отосланы:
Не то. Там говорят что поздно что-то слать т.к. уже пошел вывод текста.
А заголовки всегда можно изменить или добавить, главное сделать это вовремя.

Не понимаю, куда их вставить. Вот последнее исправление:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (file_exists($filename)) { // если файл существует
  3.     header ('Content-type: application/pdf', false);
  4.     header ('Content-disposition: inline; filename = \"".$filename.\""', false);
  5.     $html = file_get_contents($filename);
  6. /* Выводим файл */
  7.     $mpdf=new mPDF();
  8.     $mpdf->WriteHTML($html);
  9.     $mpdf->Output();
  10.     exit;
  11. }
  12.  


Как я понимаю, до вызова функции file_get_contents() вывод файла не производится. Я ошибаюсь?
eastman75 Отправлено: 15 Мая, 2013 - 15:43:51 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
DlTA пишет:
а где та часть скрипта которая выдает заголовки, говорящие браузеру, что дальше будет идти пдф, а не какой то непонятный текст?

Я пытался вставить заголовки таким способом:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. header ("Content-type: application/pdf", false );
  3. header('Content-Disposition: inline; filename=$filename', false);
  4.  


но получил "отлуп" от mpdf.php в том смысле, что такие заголовки уже отосланы:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\Transport\archive_form.php:1) in C:\OpenServer\domains\Transport\archive_form.php on line 19
  3. Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\Transport\archive_form.php:1) in C:\OpenServer\domains\Transport\archive_form.php on line 20
  4.  


Я понимаю их важность, но не понимаю, как убедить mpdf.php.
eastman75 Отправлено: 15 Мая, 2013 - 14:52:28 • Тема: Нужно конвертировать .doc в .pdf • Форум: Программирование на PHP

Ответов: 5
Просмотров: 1150
andlis пишет:
Да я более чем уверен, что именно она мне и нужна Улыбка
Вот только хотелось бы поделиться опытом (чужим). Какая, кто ей пользовался и был ли положительный результат.

Для конвертирования DOC в PDF я использую PrimoPDF http://www[dot]primopdf[dot]com/ .
eastman75 Отправлено: 15 Мая, 2013 - 14:23:21 • Тема: Как отобразить PDF-файл в браузере • Форум: Работа с файловой системой и файлами

Ответов: 12
Просмотров: 10074
Здравствуйте! Формирую имя файла и путь к нему в форме запроса. Затем считываю содержимое файла одной строкой и пытаюсь увидеть этот файл в браузере, но вижу только текст, а не изображение. Что надо сделать, чтобы увидеть изображение? У меня 3 браузера и у всех есть нужные плагины. Вот та часть PHP-скрипта, которая выполняет чтение и вывод файла (использую mPDF):

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (file_exists($filename)) { // если файл существует
  3.         $html = file_get_contents($filename);
  4.  
  5. /* Выводим файл */
  6.     $mpdf=new mPDF();
  7.     $mpdf->WriteHTML($html);
  8.     $mpdf->Output();
  9.     exit;
  10. }
  11. else
  12.         echo "Файл <b>$filename</b> <font color=red> не существует</font>";
  13.  

Помогите советом или ссылкой - сам я ничего не смог отыскать. Не понял
eastman75 Отправлено: 09 Апреля, 2012 - 18:11:46 • Тема: Denwer - холивар за и против • Форум: Apache и другие веб-серверы

Ответов: 78
Просмотров: 4412
DelphinPRO пишет:
caballero пишет:
отправка почты замечательно работает в самом PHP без всяких коробок

для отправки почты, как минимум, нужен smtp сервер. который еще установить и настроить нужно.

Так я так и сделал - обратил внимание на другую сборку, то есть Open Server. Удалил Denver, установил и настроил Open Server, и с удивлением обнаружил, что для отправки почты в нем используется тот же sendmail, который мне где-то посоветовали скачать раньше. Мой сайт прекрасно смотрится, и сообщение из формы пришло на указанный почтовый сервер.
Так что все работает и без дополнительного SMTP-сервера, - нужно только правильно задать параметры почты в настройках.

Всем участникам дискуссии - РЕСПЕКТ!!! Превосходно
eastman75 Отправлено: 09 Апреля, 2012 - 08:20:30 • Тема: Denwer - холивар за и против • Форум: Apache и другие веб-серверы

Ответов: 78
Просмотров: 4412
Ну что вы, ребята, такие суровые? Вот я, например, статические странички делать умею, и свой сайт на бесплатном хостинге имею, а реальный сайт никогда не делал. Для меня комплект Denver вполне достаточен. Ставлю на него еще Joomla, и копаюсь с созданием шаблонов. А когда сделаю все, отпортирую эту разработку на хостинг, где есть Apache, MySQL и PHP. Что здесь не так?
Хотя, конечно, проблемы есть. Например, я сделал набор страничек и залил их в Denver, не используя Joomla. На одной страничке есть форма для отправки сообщения, а отправить его я не могу, - в Denver стоит заглушка. Я по форуму полазил, но ничего конкретного не нашел: советов много, но они как бы в сторону стреляют. Как прикрутить libmail.php - непонятно. Поставил sendmail, сделал все необходимые настройки в php.ini и в sendmail.ini, - сообщение уходит, но никуда не приходит (обращаю ваше внимание на то, что Joomla я пока не использую, а потому советы по настройке сервера в Joomla не годятся!).
Так что Denver - полезен, но с оговорками.
eastman75 Отправлено: 07 Апреля, 2012 - 19:07:58 • Тема: Отправка письма • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1605
caballero пишет:
почему нельзя
в php.ini можно сделать стандартную настройку на почтовик


А как было бы здорово, если бы Вы еще и сказали, как выглядит эта стандартная настройка. Ну, просто так, из любви к ближнему. Не все же гуру. Радость

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB