Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Информационный Канал Subscribe.Ru

Здравствуйте! Выпуск номер 67
рассылки сайта РНР для всех!

Вы получили этот выпуск рассылки, так как являетесь подписчиком рассылок сайта http://subscribe.ru Рассылка выходит еженедельно, и предлагает Вам авторские материалы по теме программирования на скриптовом языке гипертекстового препроцессора РНР. Кроме того - есть система вопросов и ответов, обмен ссылками и баннерами, раздел Ваши письма и многое другое.
Форум сайта
Сайт автора

Важная информация:

  • Открыт сайт, который представляет всю информацию о нужном для вас хостинге - http://host.virtualbrest.com (от 5 у.е. за год включая панель управления + все, что необходимо для работы сайта + поддержка).

  • Если вас интересует возможность быстрой разработки скриптов и приложений для сети Интернет под ваши нужды, или вам необходима помощь специалиста в поддержке и развитии собственных систем (сайтов, страничек и т.д.), пишите на адрес: virtualphp@tut.by - с темой "разработка".

  • По поводу размещения информации в этой рассылке обращайтесь на адрес: virtualphp@tut.by

  • скачать предыдущие выпуски вместе с картинками можно тут

Вложения файлов в РНР

 Каждый, кто сделал хоть одну страничку в сети, сталкивался с проблемой изменения тех или иных данных на ней. Конечно, это не сложно, когда страничек несколько или она одна :-). Но если Вы сделали большой сайт, маленькое дополнение (например, в меню) в сотни файлов может превратиться в настоящий кошмар!

РНР решает эту проблему в раз, позволяя вкладывать одну страницу в другую. Достигается это с помощью операторов REQUIRE и INCLUDE. После этих операторов в круглых скобках должен стоять путь к вкладываемому файлу. Например: INCLUDE (“text.phtml”). Различие между указанными операторами заключается в том, что REQUIRE подменяется содержимым указанного файла свой вызов, и может быть использован только один раз, а INCLUDE – вставляет и выполняет содержимое указанного файла, что позволяет применить его несколько раз, например в цикле.  В любом случае, при исполнении файла интерпретатор РНР (правильно говорить – парсер) пребывает в состоянии HTML, и для его включения код надо заключить в конструкцию <?php … ?>.

Вложения файлов могут происходить только внутри серверного пространства, доступного РНР. Другими словами, Вы не можете использовать в имени файла http://, если только это не разрешено в настройках сервера.

 Маленькое отступление для того, что бы немножко больше объяснить суть этих двух так похожих операторов. Я уже упоминал, что PHP частично является компилятором, так как при обработке преобразовывает код в свое внутреннее представление. Так вот, когда парсер доходит до оператора Include, он останавливается и запускает работу программы с начала или с момента прежней остановки. И только по выполнении этого участка кода вызывает файл, указанный в Include. В случае с Require действия парсера совсем иные. Он сразу обрабатывает указанный файл, не делая никаких остановок на выполнение предыдущего уже обработанного кода. Таким образом – скорость обработки Require значительно выше за счет более полной обработки парсером вместе с остальным кодом без остановки на дополнительное вложение и обработку. Но, использовать в цикле или в условии Require уже не получится, тут нужен именно Include. Вот почему PHP является и интерпретатором и компилятором одновременно. Точнее – он использует более сильные стороны обоих вариантов для нашей с Вами пользы.

Динамические страницы

 Достаточно часто встречаются сайты, ссылки которых включают в себя специальные символы - &, ?, %. Все это может быть и результатом работы РНР, хотя совсем не обязательно. Точнее – данными для него. Дело в том, что если в конце ссылки добавить «адрес ссылки?имя=значение», это значение будет доступно под этим же именем в файле, не который указывает ссылка.

На пальцах это вот как выглядит: http://name.com/index.phtml?lex=7 Ссылка указывает на файл index.phtml. Но если не нее щелкнуть, файл будет запущен на сервере с инициализированной (установленной) переменной PHP $lex со значением 7. Этот прием позволяет легко передать программе нужные данные. Метод такой передачи называется GET. Еще есть, например, метод POST, но о нем ниже.

Если необходимо добавить несколько имен, они могут быть разделены знаком «&». Теперь мы можем сделать сайт, который будет доступен с помощью только одной странички. А всю остальную информацию эта страничка будет выводить на основании полученных по ссылке данных.

Выглядеть такая ссылка может так: http://имя/index.phtml?link=1 Единица в конце ссылки и есть наш параметр, который будет подставляться в файле index.phtml. Например, вот так:

 <html>

…начало файла …

<?php

$url = “”;

if ($link == 1) { $url = “name1.phtml”; }

if ($link == 2) { $url = “name2.phtml”; }

if ($link == 3) { $url = “name3.phtml”; }

if ($link == 4) { $url = “name4.phtml”; }

if ($url == “”) { $url = “error.phtml”; }

INCLUDE ($url);

?>

конец файла

</html>

 Здесь и далее по тексту примеры будут даваться в таком виде, что бы максимально упростить их понимание неподготовленному пользователю. Эту, и любую другую задачу можно выполнить разными способами, но преимущество всегда отдается тому, который проще для освоения и понимания.

 Обратите внимание, написанный нами код учитывает ситуацию, когда посетитель по разным причинам указал неправильный параметр. В этом случае выводится заранее заготовленная страничка с сообщением об ошибке. Если же параметр соответствует какому либо из файлов сайта, он в код файла index.phtml вкладывается и исполняется.

Таким образом, начало и конец всегда остаются одинаковыми, а изменяется только середина. И какие-либо глобальные изменения уже не кажутся такими страшными, как раньше. Ведь сделать их надо только в одном  файле, а отразится это на всем сайте.

А вот тоже самое, только немного более хитрым способом. 

<html>

начало файла

<?php

INCLUDE (“name”.$link. “.phtml”);

?>

… конец файла …

</html

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

Есть и другой путь. Его суть заключается в том, что у РНР есть доступ к так называемым переменным окружения сервера. Одна из этих переменных – запрашиваемый посетителем путь относительно адреса сайта. И этот путь становится нам доступен для использования.

В этом случае ссылки у нас будут такого вида: http://имя/index.phtml?patch/name.phtml. Вторая часть ссылки - patch/name.phtml будет нам доступна, если мы считаем параметр $QUERY_STRING. Например, так: 

 $add = $QUERY_STRING.  

Теперь, изменим наш головной файл index.phtml так, чтобы все работало автоматически. А если запрашиваемый параметр не будет указан (правильно говоря – будет равен пустой строке), чтобы что-то открыть, присвоим переменной $add имя файла, который должен быть открыт как главная страничка. Пусть это будет файл main.phtml. Тогда код будет выглядеть следующим образом: 

<html>

начало файла

<?php

$add = $QUERY_STRING;

if ($add == “”) { $add = “main.phtml”; }

INCLUDE ($url);

?>

конец файла

</html> 

Вот Вам и живой пример оптимизации. Строчку кода if ($add == “”) { $add = “main.phtml”; } можно (и нужно) писать так: if (!$add) { $add = “main.phtml”; } Восклицательный знак перед именем переменной указывает на ее ложь. Другими словами – переменная равна пустой строке. Таким образом, смысл кода остается прежним, а написание и удобочитаемость значительно улучшаются. 

Как видите, еще лучше, чем в примере выше. Но сразу хочу предостеречь Вас, что этот метод хоть и проще первого, но он открывает путь к получению информации о сервере, где расположен сайт с такой организацией структуры. Злоумышленник, или просто любопытный человек, при наличии определенных обстоятельств и знаний сможет много узнать о Вашем сервере, а это открывает прямой путь к взлому. Так что будьте осторожны и не станьте причиной больших неприятностей. Защититься от подобных проблем можно, но это уже совсем другая история. 

На самом деле приведенный тут пример является просто примером. В жизни так поступать не рекомендуется, и дело тут не только в безопасности. Еще один отрицательный момент заключается в потере гибкости в управлении и организации сайта. Вы сразу лишаете себя многих полезных возможностей, например, очень сложно становится передать в исполняемый файл какую-либо переменную из адресной строки, а иногда это нужно.

Наши друзья

http://virtual.brest.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://host.virtualbrest.com - хостинг по самым маленьким ценам - от 3 у.е. за 1 год!
http://204040.com - Интернет-магазин компьютерного салона Успех г. Брест
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!

автор рассылки Андрей Кухарчик / http://virtual.brest.by/php



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное