Php вывести html файл
Admin 04.09.2017 , обновлено: 13.09.2017 HTML, PHP, WordPress
Во время работы над обновлением сайтов, обратил внимание на свою старую вёрстку, когда ещё плохо был знаком с php. С учетом приобретённого опыта видны недостатки старого метода вёрстки, когда HTML обрамляет PHP, а не находится внутри него.
К сожалению, я так и не нашёл ничего интересного на этот счёт, чтобы почитать, как же всё-таки лучше верстать. Однако рассматривая современный код вёрстки всё чаще замечал, что html практически всегда находится внутри php конструкций. И в этом есть значительные преимущества.
Рассмотрю преимущества нахождения HTML внутри PHP на примере вывода заголовка в WordPress.
Ниже конструкция из кода следующего типа: если имеются данные в определенном произвольном поле, то выводим заголовок с этими данными. Я взял код верстки в его первозданном виде, такой какой он был раньше. Выглядел он так:
" rel="bookmark" title="">ID, 'name_rus', true) ) : ?>ID, 'name_rus', true); ?>
!-->Иначе, в продолжении сказанного, если сделать вышеприведенный код наглядным:
То при просмотре в браузере HTML кода страницы в заголовке тегов h3 увидим следующее:
Нам же нужно и чтобы код читался легко при редактировании и чтобы потом он также слитно отображался при загрузке сайта. А именно чтобы он выглядел таким образом:
Для этого следует воспользоваться PHP и завернуть весь html код в него. И получаем следующий вид php кода для заголовка WordPress:
echo get_post_meta($post->ID, 'name_rus', true);
В таком формате кода есть и ещё одно преимущество. Он выдержан в едином стиле, а потому легко читается.
Кроме того если if не сработает в качестве true, то обрамляющие теги (H3) тоже не будут выведены. И тем самым не будет нарушен стиль сайта. Что обязательно было бы в первом примере кода.
Кстати, на сайте нет рекламы. У сайта нет цели самоокупаться, но если вам пригодилась информация можете задонатить мне на чашечку кофе в макдаке. Лайкнуть страницу или просто поблагодарить. Карма вам зачтется.
Только начал работу с php. Как вывести страницу через php? Не писать же echo '%длинный html-код%' ? Как это по-хорошему делается?
- Вопрос задан более трёх лет назад
- 16944 просмотра
Оценить 1 комментарий
Все ответы какие-то путаные.
Хотя на самом деле всё очень просто.
Если ХТМЛ пишется в том же самом файле, то тупо закрываем тег РНР и пишет HTML как есть
2. Если в другом файле - то readfile:
Вот это как раз дикость. Ни подсветки кода, ни инструментов редактирования. HTML в пхп надо выводить как есть, а не с помощью костылей.
FanatPHP: Если мы рассматриваем вариант, когда все в одном файле, то меня, как раз таки, напрягает, если php смешан с html. А в вышенаписанном варианте все отдельно (в рамках одного файла), и подсветку можно попеременно включать для php/html. В прочем, это на вкус и цвет, а по-хорошему, лучше в отдельных файлах держать :)
Речь не о твоих субъективных вкусах, а об объективной разнице. Ничего попеременно включать не надо. Если HTML предназначен для вывода - он пишется как есть. Единственное предназначение хередока - это получить текст в переменную, которую потом тем или иным образом обработать. Не путай на будущее.
FanatPHP: Я опираюсь на субъективный вкус, меня напрягает смешанный код, держу все в отдельных файлах, а пример был приведен "как вариант", что уже намекает на "костыльность". Я понял, что вы имеете ввиду, продолжать далее эту дискуссия считаю бесполезным. Спокойной ночи.
Тебя правильно напрягает смешанный код. Именно поэтому нет ни одной причины использовать хередок для вывода. И ответ писать про это не стоило.
И теперь в нужное место в html шаблоне я хочу вывести этой командой:
Но ничего не происходит. Не выводится данный код который в PHP (menu.php). Всех на равнодушных прошу помочь.
Ivanq: фигурные скобки также не дали нужного результата. А вот с логами это тяжело, так как сайт работает на обычном html шаблоне.
Влад Бонем: Все потому, что у вас для .html файлов выключен парсер PHP. Я имею в виду файл с инклудом. Переменуйте его в .php
Ivanq: все такие не понял Ваш ответ мне нужно html страницу переименовать в php. Например: index.php а не index.html.
P.S дико извиняюсь за то что туплю)
Ivanq: Большое спасибо, заработало! Теперь еще последний вопрос! Если я хочу этот код использовать еще на нескольких страницах то эти страницы с расширением .html должны быть переименованы на расширение .PHP Верно я понимаю или есть какие-то другие обходные пути?
Влад Бонем: Используйте расширение .php если там есть инклюды. Но если файлы сами инклюдятся, расширение не важно. Лучше все переименовать в .php
Как это реализовать?
Влад Бонем: Если у вас в каком-то файле написано:
То менять у abc.html не надо. Если этот файл открывается в браузере сразу, а не через include, то меняете на .php.
Если не поняли, просто меняйте все на .php
Посмотрите логи сервера, там будет видна ошибка из-за которой не иполняется код.
А что-бы удостовериться, что ошибка именно в php/menu.php, можете еще перейти просто по ссылке /php/menu.php и если там будет белая страница то ошибка в php коде.
Если же отобразится Ваш текст, то значит Вы неправильно подключаете Ваш файл с меню, либо есть ошибка в php коде где-то раньше, еще до включения этого файла.
Новичок ли вы в PHP программировании или продвинутый специалист - вам известно, что одно из первых с чем сталкиваются разработчики PHP это команда вывода HTML - echo. Это одна из основных команд языка программирования PHP. Она позволяет вывести любой HTML и jаvascript или другой код средствами PHP.
Для более опытных программистов добавлю, что echo с использованием циклов позволяет формировать HTML контент, а именно - таблицы, списки новостей, различные списки, меню и т.п. То есть echo имеет очень широкое применение в PHP.
То что нужно вывести при помощи конструкции echo мы заключаем в кавычки (одинарные или двойные), если это строка или указываем переменную.
Рассмотрим простейшие пример и выведем HTML строку на экран:
Добавим переменную PHP, заранее обозначив ее:
Обращаю внимание на то как соединяются строки в PHP, только через точки (вместо + как во многих других языках программирования). Именно здесь часто допускают ошибки новички в PHP при использовании команды вывода HTML - echo.
При использовании двойных кавычек можно писать переменную PHP не используя соединение строк:
При использовании одинарных кавычек вместо цифры 7 на страницу выводится - $tonn.
Добавим экранирование символов для вывода кавычек в HTML строке:
Выведем при помощи echo массив.
Используем краткую форму функции echo
Если краткий вывод у вас не работает, то возможной проблемой является настройка PHP в файле php.ini.
Добавим несколько строк для вывода HTML при помощи echo:
Открывающий и закрывающий идентификаторы должны располагаться на отдельных строках, пробелов быть не должно!
Добавим цикл, который позволит при помощи echo нам сформировать данные на странице, например список.
А теперь давайте сформируем простую шапку сайта с переменными для заголовка и описания, подвал сайта и основную часть и выведем этот HTML код при помощи PHP команды echo.
Естественно, что все переменные должны быть объявлены заранее
Итак, как видите мы при помощи echo сформировали и вывели html страницу средствами PHP. Если немного расширить этот программный текст и добавить функцию подключения php страниц include(), то можно сформировать несколько HTML страниц, тем самым получив простейший сайт. При этом вам не придется вносить изменения на каждую страницу, например, для шапки сайта. Достаточно будет внести изменения в файл header.php.
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Частые ошибки, возникающие при отправке PHP формы с сайта
Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.
Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.
if (mail("example@mail.ru", "Заказ с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: example2@mail.ru \r\n"))
Создаем форму отправки данных в html
На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.
Первая строка будет следующей
Вернемся к форме. Вторая строка будет содержать поле для ввода ФИО. Имеет следующий код:
Тип формы text, то есть пользователь сможет ввести или скопировать сюда текст с клавиатуры. Под параметром name содержится название формы. В данном случае это fio, именно под таким именем будет передаваться все, что пользователь введен в данноу поле. Параметр placeholder указывает на то, что будет записано в этом поле в виде пояснения.
Здесь практически все то же самое, но имя для поля указано email, а пояснении указано, чтобы пользователь в эту форму ввел свой адресс электронной почты.
И последней строкой в форме будет тэг
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
$fio = $_POST['fio'];
$email = $_POST['email'];
Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method="post". Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров - функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ "
Вторая функция декодирует url, если пользователь попытается его добавить в форму.
$fio = urldecode($fio);
$email = urldecode($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Отправляем полученные данные из формы HTML на почту при помощи PHP
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail("example@mail.ru", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: example2@mail.ru \r\n");
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
Расширение формы, добавление Google ReCaptcha (v.2)
Помещаем HTML и PHP код отправки формы в один файл
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
Давайте посмотрим как изменить PHP код в файле send.php:
Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы - "если существует, то показать форму". А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке . Форма должна ссылаться на эту же страницу, например index.php. В код я добавил заголовок страницы.
Читайте также: