Правильные теги для PHP файлов
Даже если PHP код помещён в файл с расширением .php, то для того, чтобы он обрабатывался интерпретатором именно как PHP код, он должен быть размещён после тэга
<?php
Закрывающий тег, который, кстати, пишется так
?>
Закрывающий тег не является обязательным. Тем не менее, закрывающий тег может использоваться когда заканчивается PHP код и начинается, например, HTML код.
Пары <?php и ?> могут использоваться в одном файле несколько раз, отделяя PHP код от HTML кода.
Важная вещь, которую нужно знать про закрывающий тег ?>: он выбросит вас из PHP в HTML даже если он закомментирован с помощью //. Однако комментарий /* */ справляется — тег ?> теряет своё специальное значение. Помните об этой интересной особенности, поскольку при комментировании блоков кода, вы можете столкнуться с необычной ситуацией, когда ?> продолжит работу не смотря на то, что вы этого не ожидаете.
В некоторых старых скриптах или старых учебниках вы можете встретить примеры PHP кода, помещённого между тегов <? и ?>.
Если вы поместите какой-то PHP код между этих тегов, то почти наверняка веб-браузер просто ничего не отобразит с новой версией PHP.
Отделение PHP и HTML кода
Все, что находится вне пары открывающегося и закрывающегося тегов, игнорируется интерпретатором PHP, у которого есть возможность обрабатывать файлы со смешанным содержимым. Это позволяет PHP-коду быть встроенным в документы HTML, к примеру, для создания шаблонов.
<p>Это будет проигнорировано PHP и отображено браузером.</p> <?php echo 'А это будет обработано.'; ?> <p>Это тоже будет проигнорировано PHP и отображено браузером.</p>
Это работает так, как и ожидается, потому что когда интерпретатор PHP встречает закрывающие теги ?>, он просто начинает выводить все что найдёт (за исключением сразу следующего символа перевода строки) пока не встретит другой открывающий тег за исключением случая с содержащимся внутри кода условным оператором, в котором интерпретатор определяет результат условия перед принятием решения что пропустить. Ознакомьтесь со следующим примером.
Продвинутое изолирование с использованием условий:
<?php if ($expression == true): ?> Это будет отображено, если выражение истинно. <?php else: ?> В ином случае будет отображено это. <?php endif; ?>
В этом примере PHP пропускает блоки, где условие не соблюдается. Даже несмотря на то, что они находятся вне пары открывающих/закрывающих тегов, PHP пропустит их в соответствии с условием, так как интерпретатор PHP будет перепрыгивать через блоки, содержащиеся внутри условия, которое не соблюдается.
При выводе больших блоков текста выход из режима синтаксического разбора PHP обычно более эффективен, чем отправка текста с помощью функций echo или print.
Выход из HTML также применяется к другим управляющим операторам:
<?php for ($i = 0; $i < 5; ++$i): ?> Hello, there! <?php endfor; ?>
При выполнении приведённого выше фрагмента кода, мы получаем следующий вывод:
Hello, there! Hello, there! Hello, there! Hello, there!
Разделение инструкций
Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней строки блока с PHP-кодом. Закрывающий тег блока «поглотит» немедленно следующий за ним переход на новую строку, если таковой будет обнаружен.
<?php echo 'Это тест'; ?> <?php echo 'Это тест' ?> <?php echo 'Мы опустили последний закрывающий тег';
Замечание: закрывающий тег PHP-блока в конце файла не является обязательным, и в некоторых случаях его опускание довольно полезно, например, при использовании include или require, так, что нежелательные пробелы не останутся в конце файла и вы все еще сможете добавить http-заголовки после подключения к ответу сервера. Это также удобно при использовании буферизации вывода, где также нежелательно иметь пробелы в конце частей ответа, сгенерированного подключаемыми файлами.
Regular expressions
Регулярные выражения, которые вам могут встретиться в .htaccess.
Символ | Значение | Пример |
---|---|---|
. | Один любой символ | c.t это cat, cot, cut, и т. д. |
+ | Один или несколько одинаковых символов | a+ это a, aa, aaa, и т. д. |
* | Ноль или несколько одинаковых символов | a* работает также как и a+ но в случае a* условию удовлетворит и пустая строка |
? | Совпадение опционально | colou?r подойдет как color, так и colour. |
^ | Символ, с которого начинается строка | ^a соответствует строка, которая начинается с a |
$ | Символ, которым заканчивается строка | a$ соответствует строка, которая заканчивается a. |
( ) | Находит и запоминает соответствие группы символов.Также может быть использовано для Back-Reference (смотри пример) | (ab)+ удовлетворит abababBack-Reference example:RewriteRule ^/(+)/(.*)$ /home?page=$1&id=$2/album/123 → /home?page=album&id=123 |
Один из возможных символов | ct подойдет cut, cot или cat. |
Больше regular expressions
Флаги
Синтаксис: RewriteRule regular_expression
Флаг | Описание |
---|---|
Forbidden — возвращает ошибку 403 Forbidden (запрещено). | |
Last — остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. | |
Query String Append — этот флаг указывает механизму преобразований на добавление, а не замену, строки запроса из URL к существующей, в строке подстановки. | |
PassThrough — останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке. | |
Redirect — останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на новую страницу. | |
Skip — пропускает следующее правило, если текущее правило сработало. Можно указать количество последующих игнорируемых правил . |
Больше флагов здесь
Итак, следующая строка в нашем конфигурационном файле
переводится как:
«Строку, начинающуюся с application или modules или system не преобразовывать, доступ запретить
А последние три строки можно интерпретировать как
«Если запрос не является файлом(!-f) или директорией(!-d), то любое количество любых символов (.*) редиректить по адресу index.php/ после слэша идет полностью результат.* (условие $0), доступ запретить, больше никаких правил преобразования не применять»
- $0 полностью включает результат регулярного выражения [в нашем случае оно одно .*]
- $1 включает результат регулярного выражения в первых скобках
- $N (1<=N<=9), по очереди включает результат выражения в каждой из N скобок
mod_rewrite и редиректы
Убедитесь, что в конфигурационном файле Apache httpd.conf активирован mod_rewrite. То есть, раскомментирована соответствующая строка:
Или, если не хотите открывать в текстовом редакторе файл, можно воспользоваться командой в терминале:
mod_rewrite — это модуль Apache, предназначенный для преобразования URL-ов. Рассмотрим на примере, как он работает. Допустим, пользователь вводит следующий адрес:
C помощью mod_rewrite можно отправить содержание с другого URL, например такого:
Зачем это нам? Легко догадаться, что писать полный путь до страницы долго и просто неудобно
Посетителям сайта не нужно думать о внутренней структуре сайта — им важно максимально быстро попасть на искомую страницу
В адресной строке пользователь будет всё также видеть введенное им:
Это пример самого простого редиректа.