Почему в php файлах не рекомендуется ставить закрывающийся тег
Начнём мы с для кого повторения, для кого изучения темы “PHP Основы” и сегодня разберём основы синтаксиса (правил написания PHP скриптов).
Сначала предлагаю вам пройти тест, оценить свои знания. Не забудьте отписаться и кинуть свой результат в комментариях! Даже если результат будет неудовлетворительным! :)
После прохождения теста, предлагаю вам ознакомиться с каждым вопросом и обсудить ответы!
5 последних уроков рубрики "PHP"
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Здравствуйте! Зачем вообще указывать теги в файле с расширением php.
Почему я должен делать так:
А не так:
echo "Текст";
Зачем иногда в файле php указывается html код?
Простой 5 комментариев
Vlad, А зачем это вообще придумано, если файл с расширением php. Разве там может быть еще что-то написано без какой-то пометки?
Geo5, вы это сейчас серьёзно?
В прошлом вопросе вы привели пример РНР файла, в котором просто ВАГОН "чего-то там ещё"
Вам напомнить что там было или вы сами осилите?
Geo5, забудьте о таком понятии, как "расширение файла". Это легаси времен CP/M, далее - DOS'а (вы знаете что это такое?) и дальнейшей платформы windows. В линуксе вам это не пригодится.
Во-первых, не
Во-вторых, кроме в файле может быть написано
которое не будет являться командой, а просто текстом.
И вот чтобы отличить команду от текста и служат теги РНР
У меня вот такая ошибка
Мой код:
Что интересно, в отношении яваскрипта таких вопросов почему-то не возникало.
почему это вдруг надо писать его внутри тегов , а не вообще в любом месте, где заблагорассудится
FanatPHP, если писать его в файле с расширением js, то никаких тегов там не требуется. А вот если в html документ вставлять код - то конечно, это логично.
Знаете, как расшифровывается PHP?
(невелика загадка, у них на сайте в title написано - PHP: Hypertext Preprocessor)
PHP создавался как шаблонизатор (выражаясь современным языком) для гипертекста, т.е. html. Изначально закладывадось, что писать на нем будут примерно так:
сейчас такое назвали бы говнокодом, и обычно такое разве что генерируют современные шаблонизаторы. Но во времена PHP 3 примерно весь код был в этом стиле.
Открывающий тег
что нередко ломало, кроме прочего, подсветку синтаксиса, поэтому от него в итоге отказались совсем.
Приветствую.
Не разводя демагогию вокруг php, хотелось бы узнать, кто что думает по поводу использования шорт тегов.
Влияет ли их использование хоть на что то на сервере? Или же это чисто «философская» заморочка?
['array_key']
Это не философские вопросы. Это на сколько вы профессиональный программист.
-Зачем вообще нужно следовать этому стайл гайду?
- Для того чтобы все кто программирует на данном языке придерживался единых стандартов(что увеличивает скорость понимания чужого кода да и своего в дальнейшем) и уменьшает количество возможных ошибок.
В итоге ускоряет разработку.
" На количество ошибок никак не влияет.
Скорость разработки замедляет - ибо печатать больше, читать больше, ухудшается восприятие текста.
В общем лонг-тэги придумали задроты для задротов, чтобы потешить своё самомнение: типа мы такие серьезные, тоже не пальцем деланы - даже стандарт написали для таких дел.
Лучше бы выпилили действительно отстойные вещи из php:
$
->
=>
Ну во-первых, есть требования к написанию кода. PSR-1
Во-вторых, короткий открывающий тег ухудшает транспортабельность кода. Вы можете задеплоить проект на дешевый хостинг, где не будет возможности включить в php.ini
Рекомендации, а не требования. Но да, короткие теги вызывают перечень проблем и лично я в них не вижу особого смысла.
Files MUST use only
1. MUST This word, or the terms "REQUIRED" or "SHALL", mean that the
definition is an absolute requirement of the specification.
Алексей Скобкин: Простите, не сразу вас понял. Есть стандарт написания кода, в котором есть требования. Сам стандарт конечно является рекомендацией.
Все, что находится вне пары открывающегося и закрывающегося тегов, игнорируется интерпретатором PHP, у которого есть возможность обрабатывать файлы со смешанным содержимым. Это позволяет PHP-коду быть встроенным в документы HTML, к примеру, для создания шаблонов.
Это будет проигнорировано PHP и отображено браузером.
Это тоже будет проигнорировано PHP и отображено браузером.
Это работает так, как и ожидается, потому что когда интерпретатор PHP встречает закрывающие теги ?>, он просто начинает выводить все что найдет (за исключением сразу следующего символа перевода строки - смотрите раздел разделение инструкций) пока не встретит другой открывающий тег за исключением случая с содержащимся внутри кода условным оператором, в котором интерпретатор определяет результат условия перед принятием решения что пропустить. Ознакомьтесь со следующим примером.
Использование структур с условиями
В этом примере PHP пропускает блоки, где условие не соблюдается. Даже несмотря на то, что они находятся вне пары открывающих/закрывающих тегов, PHP пропустит их в соответствии с условием, так как интерпретатор PHP будет перепрыгивать через блоки, содержащиеся внутри условия, которое не соблюдается.
При выводе больших блоков текста выход из режима синтаксического разбора PHP обычно более эффективен, чем отправка текста с помощью функций echo или print .
Существует четыре набора тегов, которые могут быть использованы для обозначения PHP-кода. Из них только два и ) всегда доступны. Другими двумя являются короткие теги и теги в стиле ASP , которые могут быть включены или выключены в конфигурационном файле php.ini . Хотя короткие теги и теги в стиле ASP могут быть удобны, они не так переносимы, как длинные версии, и поэтому не рекомендуются.
Замечание:
Кроме того, если вы намереваетесь вставлять PHP-код в XML или XHTML, чтобы соответствовать XML стандартам, вам следует использовать форму .
Несмотря на то, что теги указанные в первых двух примерах всегда доступны, наиболее широко используется (и рекомендуется) первый пример из этих двух.
Короткие теги (третий пример) доступны, только когда они включены с помощью директивы short_open_tag в конфигурационном файле php.ini , либо если PHP был скомпилирован с опцией --enable-short-tags .
ASP (четвертый пример) доступны, только когда они включены с помощью директивы asp_tags в конфигурационном файле php.ini .
Замечание:
Следует избегать использования коротких тегов при разработке приложений или библиотек, предназначенных для распространения или размещения на PHP-серверах, не находящихся под вашим контролем, так как короткие теги могут не поддерживаться на целевом сервере. Для создания переносимого, совместимого кода, не используйте короткие теги.
Замечание:
В PHP 5.2 и более ранних версиях парсер не позволял файлам содержать только один открытый тег . Это было разрешено, начиная с версии PHP 5.3 при наличии одного или более пробела после открывающего тега.
Замечание:
Начиная с PHP 5.4 короткий тег echo всегда распознается и действует, несмотря на значение опции short_open_tag.
Прочитал сейчас статью там было написано что не рекомендуется в конце страницы ставить закрывающий тэг для php. Возможно я неправильно понял или это действительно так?
Php - это Печаталка и ВСЁ.
Сервер ВЫВОДИТ из файла .php всё, что заключено между тегами
ЭТО ВСЁ, что делается. Никаким образом невозможно записать хоть что-то в файл .php, в том числе и перед последним тегом, так как вывод обеспечивает СЕРВЕР, то есть в первую очередь надо что-то попытаться записать на сам Сервер, так как ЛЮБОЕ обращение к файлу .php никаким образом не выводит его сам и не может подключить его к записи.
Поэтому мне довольно весело читать, ТАКОЕ.
По поводу того, что есть переход на новую строку в конце файла: Поставьте их сто тысяч, от этого совсем НИЧЕГО не изменится, ИСПОЛНЯЕТСЯ всё то, что находится между тегами
По поводу того, что в Php многое не надо, например объявлять переменные и их свойства, и тот же конец файла .php - по поводу Первых - да, можно ничего не объявлять, но заключительный тег ставить надо обязательно, хотя бы по той причине, чтобы не НАПРЯГАТЬ сервер, когда он всё время будет не находить конец файла и сам станет его завершать по своему усмотрению (лишние ресурсы)
Алекс 777 Оракул (81777) Так Вы же смотрите ЗАЧЕМ и КТО ЭТО пишет PHP в Zend Framework'е ШИФРОВАНИЕ - вот, что это такое. ZEND уже давно шифрует .php файлы так, чтобы другие не могли распознать код. Это ТОЛЬКО их фишка, и не имеет к самому PHP ничего. Если Вы станете ШИФРОВАТЬ файлы их МЕТОДОМ, то и должны выдерживать ИХ СТАНДАРТЫ, только и всего. Если же Вы не будете ничего шифровать, а будет использовать обычные файлы php, то ни в коем случае, нельзя убирать последний тег.
Печаль. Полное не понимание концепции языка и его первичного назначения.
PHP родился как шаблонизатор. Всё, что находится вне тэгов ПХП будет просто выводится на печать во время интерпретации файла скрипта. И это стало первопричиной появления запрета на закрывающий тэг. Иначе, случайно попавшие после него пробельные символы просто вываливаются в браузер. Т.о. ломается вёрстка в IE, ломается установка заголовков.
Зенд не занимается шифрованием файлов. Область их разработок выходит за эти примитивные рамки.
Шифрованием занимается зенд-гвард. Оптимизацией занимается зенд-оптимайз. До недавнего времени оба продукта входили в один пакет и поставлялись вместе.
Бред. Если страница состоит целиком из скрипта, то закрывающий тег по любому будет в конце. (ваш КЭП)
Вот и я о том же подумал. Сейчас перечитал этот абзац, всё таки там однозначно говорится о том что нельзя ставить закрывающий тэг. Могу процитировать, сам почитай:
Не нужно лениться. Не нужно пользоваться short-тегами. Их вообще скоро выведут из употребления, так как они пересекаются с XML. Писать нужно только так: нельзя ставить ни в коем случае. Это не просто вредно, но и опасно.
Объясню, чтоб не быть голословным.
1. После него может оказаться пробел или перенос строки. А так, как файл подключен выше доктайпа, значит и пробел вылезет туда. А это гарантированно угробит верстку в IE.
2. Всё, что написано после него, интерпретируется как HTML. А это значит, что (не дай Бог) в конец файла попадет вирус, то он сработает.
А тупые боты именно туда норовят прописать всякую гадость. Так вот, ежели его (закрывающего значка) не будет, то вирь попадет в тело php и вызовет ошибку. Плохо конечно, но лучше, чем бы он сработал у клиента.
SELIGOZAVR Просветленный (42811) насколько я понимаю- вирус-это вредоносная программа.хтмл-язык разметки а не программирования. как разметка может быть программой?бот-это тоже программа!
Не нужно лениться. Не нужно пользоваться short-тегами. Их вообще скоро выведут из употребления, так как они пересекаются с XML. Писать нужно только так: "" нельзя ставить ни в коем случае. Это не просто вредно, но и опасно.
Объясню, чтоб не быть голословным.
1. После него может оказаться пробел или перенос строки. А так, как файл подключен выше доктайпа, значит и пробел вылезет туда. А это гарантированно угробит верстку в IE.
2. Всё, что написано после него, интерпретируется как HTML. А это значит, что (не дай Бог) в конец файла попадет вирус, то он сработает.
А тупые боты именно туда норовят прописать всякую гадость. Так вот, ежели его (закрывающего значка) не будет, то вирь попадет в тело php и вызовет ошибку. Плохо конечно, но лучше, чем бы он сработал у клиента.
~ Мудрец (18969) > в конец файла попадет вирус, то он сработает Что-то слабо представляю себе вирус в html. > А так, как файл подключен выше доктайпа, значит и пробел вылезет туда. А это гарантированно угробит верстку в IE. Что мешает использовать код под доктайпом?
и вобще как может пробел в конце страницы оказаться над доктипом,который изначально в самом верху страницы?или я чего-то не догоняю сути вопроса про конец?это уже будет чистый баг кодинга именно обожаемого автором зенда. или его самого. даже в этом случае ни что не мешает сперва вставить сперва доктип,а после пхп код..
Да. Слышал, что если вирус добавит какую-нибудь гадость в конец файла, интерпретатор выдаст ошибку, а не покажет это чудо клиенту.
Дело в том, что некоторые редакторы, например gedit, сохраняют документ так, чтобы в конце обязательно был перевод строки, при этом прячут этот перевод от пользователя как страшную тайну. В таком случае, если у тебя выдача хедеров идет после инклюда каких-либо скриптов, получится варнинг (только если выдача на этой стадии вообще не отключена, как во многих популярных движках) . Выдачу лучше не отключать, поскольку бывает при дебаге несколько строчек, добавленных в код, позволяют то, чего не умеет дебагер.
Источник: лично я тэг ставлю, поскольку считаю, что синтаксис не место для хаков, все должно быть четко
[ссылка заблокирована по решению администрации проекта]
Для файлов, содержащих только PHP-код, закрывающийся тег не разрешен. Он не требуется синтаксисом PHP. Это предотвращает от случайного включения в вывод конечных пробелов.
мнения разделились. спецификацию не судьба почитать?
между считается кодом пхп, а все остальное как хтмл код интерпретируется. а в хтмл любое количество пробелов браузер примет за 1 пробел в рендеринге. а перевод строки происходит специальным тегом.
Вопрос 3
Вопрос: Какие из перечисленных тегов непригодны для открытия и закрытия PHP блока?
Ответ:
Standard Tags - чаще всего используются стандартные теги. Их невозможно деактивировать:
Short Tags - короткие теги используются реже. Для того чтобы они были активны, в php.ini нужно опции short_open_tag выставить значение On:
Второй вид укороченного тега. Эквивалент кода
Script Tags - скриптовый тег представляет собой обычный html блок:
Вопрос 4
Вопрос: Почему в PHP файлах не рекомендуется ставить "?>" закрывающийся тег?
- Для того чтобы предотвратить случайное включение пробелов или переносов на новую строку
- Подобная рекомендация улучшает читабельность
- Это важный аспект безопасности
- Не рекомендуется? Не, это не правда
Ответ: Для того чтобы предотвратить случайное включение пробелов или переносов на новую строку
Так что следуйте рекомендации и не закрывайте теги в файлах, где у вас только PHP код.
Вопрос 1
Вопрос: Заполните фразу: PHP (от англ. _______________) это _________ язык программирования, основанный на технологии _________
- "PHP: Hypertext Preprocessor", "скриптовый язык", "Zend"
- "PHP: Hypertext Preprocessor", "скриптовый язык", "PHP"
- "PHP: Hypertext Preprocessor", "функциональный язык", "Zend"
- "PHP: Hypertext Preprocessor", "функциональный язык", "PHP"
- "Personal Hypertext Processor", "скриптовый язык", "Zend"
- "Personal Hypertext Processor", "скриптовый язык", "PHP"
- "Personal Hypertext Processor", "функциональный язык", "Zend"
- "Personal Hypertext Processor", "функциональный язык", "PHP"
Ответ: "PHP: Hypertext Preprocessor", "скриптовый язык", "Zend"
Все эти факты нужно просто запомнить.
Вопрос 5
Вопрос: Что будет выведено в результате выполнения следующего кода?
- 33
- 22
- 11
- 0
- 22 = 11 = 33
- Возникнет "Parse error"
Ответ: 33
НО в принципе, в последнем выражении, после которого следует закрывающийся тег, точку с запятой ставить не обязательно. PHP на это не будет ругаться, однако во избежание каких-то скрытых проблем, лучше всё-таки все выражения заканчивать точкой с запятой.
Вопрос 8
Вопрос: Что будет выведено в результате выполнения следующего кода?
- Hello Certification.
- Возникнет ошибка
- Hello PHP Certification.
- Hello PHP Certification.
- HelloPHP Certification.
- Hello Certification.
Ответ: Hello Certification.
Если же данные две строки поместить в блок:
то ситуация изменится. Обе строки будут зависеть от условия if.
Вопрос 9
Вопрос: В чём разница между echo и print?
- print можно использовать как часть выражения, а echo нет
- echo можно использовать как часть выражения, а print нет
- Между этими функциями нет никакой разницы
Ответ: print можно использовать как часть выражения, а echo нет
Вопрос 7
Вопрос: Что будет выведено в результате выполнения следующего кода?
- apple0banana1orange
- applebananaorange
- apple banana orange
- apple0 banana1 orange
- apple 0 banana 1 orange
- возникнет ошибка
Ответ: возникнет ошибка
Вопрос 10
Вопрос: Что будет выведено в результате выполнения следующего кода?
Ответ: B
Т.к. выражение “print 'PHP'” вернёт нам 1, и 1 равна 100-99 = 1, 1 == 1, то выведется буква B. Если хотя бы одно условие if выполнилось, то работа условия прекращается.
Вопрос 2
Вопрос: Что будет выведено на экран в результате выполнения следующего кода?
- echo 'Какой-то текст';
- Какой-то текст
- Ничего не выведется
- Возникнет ошибка
Ответ: Какой-то текст
Вопрос 6
Вопрос: Что будет выведено в результате выполнения следующего кода?
Ответ: AB D
Для того чтобы поставить комментарий на одной строке, мы можем воспользоваться следующим синтаксисом:
Для того чтобы написать комментарий на несколько строк, его нужно поместить между блоком /* */:
Если же комментарий стоит на той же строчке, где и закрывающийся PHP тег, то строка кода с какой-то операцией будет закомментирована, а тег - нет. Таким образом, никакой ошибки не возникнет. В PHP блоке выведутся буква AB, а после него пробел и буква D.
Вопрос 1
Вопрос: Заполните фразу: PHP (от англ. _______________) это _________ язык программирования, основанный на технологии _________
- "PHP: Hypertext Preprocessor", "скриптовый язык", "Zend"
- "PHP: Hypertext Preprocessor", "скриптовый язык", "PHP"
- "PHP: Hypertext Preprocessor", "функциональный язык", "Zend"
- "PHP: Hypertext Preprocessor", "функциональный язык", "PHP"
- "Personal Hypertext Processor", "скриптовый язык", "Zend"
- "Personal Hypertext Processor", "скриптовый язык", "PHP"
- "Personal Hypertext Processor", "функциональный язык", "Zend"
- "Personal Hypertext Processor", "функциональный язык", "PHP"
Ответ: "PHP: Hypertext Preprocessor", "скриптовый язык", "Zend"
Все эти факты нужно просто запомнить.
Читайте также: