Сообщество студентов и преподавателей: блог Сазонова Дмитрия
Сообщество студентов и преподавателей
На главную страницу Статьи | Методика | Неделя информатики | Тесты | Гостевая книга
Еще по данной теме
  Информационная система Электронная выставка

Система управления контентом сайта по технологии .net

Система управления контентом

Назначение и цель создания АСУ

PHP для пользователя. Основы работы

Влияет ли Internet на личность человека?

Особенности создания корпоративного Web-сайта коммерческого банка

Написание гостевой книги на языке PHP, с использованием базы данных MySQL

Информационная система управления учебным процессом на базе СНО

Экспертный анализ англоязычного текста

Алгоритм сжатия HTML трафика

Виртуальная любовь

Личность человека в компьютеризированном мире

Управление учебным процессом на основе Web-сайта

Система мониторинга и управления удаленными филиалами торговой компании

Способы продвижения компании в сети internet

Информатика-царица наук

Анализ музыкальных предпочтений

DELPHI: ПЕРВЫЕ ШАГИ

DELPHI: СТАВИМ ПАРОЛЬ НА ПРОГРАММУ

PASCAL:Решение задачи о восьми ферзях

DELPHI:Работа с файлами

PASCAL:Задача решения систем уравнений методом Гаусса

PASCAL:Задача решения системы уравнений методом итерации

PASCAL:Вычисление выражений

PASCAL:Задачи из школьного учебника

PASCAL:Алгоритм решения задачи Треугольник

PASCAL:Алгоритм решения системы уравнений методом Зейделя

Шифрация данных

Задачи параметрического программирования

Место предмета ЕСТЕСТВОЗНАНИЕ в курсе школы

Основы Visual Basic for Application

Размышления на тему гениальности

Использование игровых форм в системе внеаудиторной деятельности студентов пед. вуза

Разработка курса обучения по среде программирования Visual C++

Компьютерная графика: особенности, назначение и функции

Комплексная оценкакачества функционирования типовой программной системы защиты информации

Что такое нейронная сеть

Интеллектуальные информационные системы на примере языка clips

Олимпиада по Flash 2003

Что такое PHP?

Психические расстройства связанные с компьютером

Компьютерные игры: хорошо это или плохо

Виртуальные знакомства: мифы и реальность





Кузнецова Елена Сергеевна
PHP для пользователя. Основы работы


Введение

Интернет уже давно прочно вошел в нашу жизнь. Сеть стала незаменимым помощником быстро и просто можно найти необходимую информацию для работы, учебы. Электронная почта, виртуальное общение для многих стало неотъемлемой частью жизни.
Сделать свою страничку стало даже престижно, и пусть в ней мало полезного, а счетчик фиксирует только Ваши не частые посещения, сделанное может стать началом серьезного проекта и изменить всю Вашу жизнь.
Путешествуя по просторам глобальной сети Интернет, Вы, конечно же, не раз обращали внимание на гиперссылки, которые порой достигают внешне очень больших размеров и просто приводят в недоумение наличием странных символов. И конечно, все обращали внимание на формы, которые требовалось заполнить и получить что-то взамен. Но немногие задумываются над тем, как все это работает и что все это значит. Попробуем разобраться.
Наилучшим языком для web-программирования является PHP.
PHP (аббревиатура от слов personal home page) это широко распространённый Открытый ресурс - язык скриптинга (сценариев) общего назначения, который создан специально для Web и который можно внедрять в HTML.
Он обладает рядом преимуществ перед другими языками. Он может работать почти на любой операционной системе и с любым сервером. Считается, что ASP громоздок и работает медленнее, чем PHP, а также менее устойчив. Одним из преимуществ ASP можно считать то, что, поскольку там используется в основном VBScript, относительно легче освоить его язык. ASP также по умолчанию поддерживается на IIS-сервере, облегчая его получение и запуск. Компоненты, встроенные в ASP, имеют реальные ограничения, поэтому, если вы хотите использовать "продвинутые" возможности типа взаимодействия с FTP-серверами, вам необходимо приобретать дополнительные компоненты. Считается, что РНР работает быстрее и эффективнее в сложных задачах программирования и легче воспринимает новые идеи. PHP обычно указывается как более стабильный и менее жадный до ресурсов. Наиболее важным преимуществом PHP по сравнению с Perl является то, что PHP был разработан для скриптинга на web, а перед Perl ставились более широкие задачи, и поэтому он получился намного более сложным. Гибкость/сложность Perl облегчает написание кода, который потом другой автор/кодировщик будет долго разбирать. PHP имеет более однозначный и строгий формат без потери гибкости. PHP легче интегрируется в существующий HTML, нежели Perl. PHP имеет почти такую же 'хорошую' функциональность, что и Perl: конструкции, синтаксис и т д. без усложнения Perl. Perl это язык хорошо испытанный и проверенный, он появился в конце 80-х годов (прошлого века), но PHP мужает очень быстро.

История РНР

Начинать нужно всегда с самого простого, и сейчас я попробую познакомить Вас с программированием на скриптовом языке РНР. РНР (читается как пи-эйч-пи) появился на свет осенью 1994 года, и его создатель — Расмус Лердорф — использовал язык в своих целях, для того, чтобы иметь представление о тех людях, которые посещают его сайт и знакомятся с его резюме.
По словам автора, РНР был написан буквально за день в промежутках между деловыми встречами. Сначала это была просто невзрачная CGI-оболочка, написанная на языке Perl, и служила она исключительно для специфических целей. Для справки — СGI (Common Gateway Interface) — общий шлюзовой интерфейс, является стандартом, который предназначен для создания серверных приложений HTTP.
Такое приложение, которое называют шлюзом или CGI-программой, запускается сервером в реальном режиме времени. Сервер передает запросы пользователя CGI-программе, которая их обрабатывает и возвращает результат своей работы на экран пользователя.
Таким образом, посетитель получает динамическую информацию, которая может изменяться в результате влияния различных факторов. Сам шлюз (скрипт CGI) может быть написан на различных языках программирования — C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script и других подобных языках. Но в случае с РНР, для написания его в первоначальном варианте был выбран язык Perl, как наиболее простой и доступный.
В результате дальнейшей эксплуатации выяснилось, что оболочка обладает маленькой производительностью, и автор вынужден был переписать все заново, но уже на языке С, что позволило увеличить скорость работы РНР. Пользователи сервера, где располагался сайт с первой версией РНР, попросили себе такой же инструмент, и хоть автор не предполагал, что кто-то другой будет пользоваться этим языком, довольно быстро РНР перерос в самостоятельный проект, и в начале 1995 года вышла первая известная нам версия продукта. Имя этого первого пакета было Personal Home Page Tools (средства для персональной домашней страницы). На тот момент РНР обладал более чем скромными возможностями. Он имел простейший анализатор кода, который понимал несколько специальных команд, а также разные утилиты для использования на домашней странице, необходимые для построения таких полезных вещей, как гостевая книга, счетчик, чат, системы статистики и тому подобное. К середине 1995 года язык был основательно переработан, появилась обработка форм, были добавлены функции работы с базами данных, и в таком виде вышла вторая версия продукта.
Сегодня РНР — это мощный кроссплатформенный набор средств, который располагается на сервере и предназначен для обработки специального кода, встраиваемого в HTML-страницу. Благодаря этому, появляется возможность легко создавать динамические сайты. Файлы, созданные таким образом, хранятся и обрабатываются на сервере, и когда посетитель запрашивает документ с РНР, скрипт обрабатывается не браузером посетителя, как, например, Java Script, а сервером, и посетителю передаются уже только результаты работы. Точно так же работает CGI-программа, написанная на С или Perl. Но, в отличие от CGI, код РНР можно встраивать в любое место HTML-странички, что является основным преимуществом по отношению к CGI. А, кроме того, сам язык РНР очень прост для изучения и не требует каких-либо специфических знаний. Несмотря на столь радужную характеристику, есть у РНР и недостатки. Стоит отметить довольно медленную (по сравнению с программами на CGI) работу скриптов РНР, а также сложность написания больших и сложных программ. Так или иначе, РНР остается интерпретируемым языком, что непременно ведет к ухудшению производительности в случае очень больших и сложных программ, но, для выполнения несложных манипуляций на сайте, РНР — лучший выбор. Недаром к середине 2000 года РНР использовался более чем на 2,5 миллионах сайтов!

Что может PHP?

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

  • Серверный скриптинг. Это наиболее традиционная и главная сфера применения PHP. Для выполнения этой работы вам нужны три вещи. Разборщик кода PHP (CGI или серверный модуль), web-сервер и web-браузер. Сервер должен быть запущен и должен иметь соединение с инсталированным PHP. Вы можете получить вывод PHP-программы в web-браузер, просматривая PHP-страницу на сервере.
  • Скриптинг командной строки. Вы можете создать и запустить PHP-скрипт на выполнение без сервера или браузера. Для этого необходим только разборщик PHP. Этот тип использования идеально подходит для регулярного выполнения скрипта с помощью cron (в *nix или Linux) или Task Scheduler (в Windows). Эти скрипты можно использовать также для задач простейшего текстового процессинга/обработки.
  • Клиентские GUI-приложения. PHP, возможно, не самый лучший язык для написания оконных приложений, но, если вы знаете PHP очень хорошо и хотели бы использовать некоторые продвинутые возможности PHP в клиентских приложениях, вы можете также использовать PHP-GTK для создания таких программ. У вас имеется также возможность создавать межплатформенные приложения. PHP-GTK является расширением PHP, отсутствующим в основном дистрибутиве.

PHP может использоваться на всех крупных операционных системах (ОС), включая Linux, многие варианты Unix (HP-UX, Solaris и OpenBSD), Microsoft Windows, Mac OS X, RISC OS и, возможно, другие. PHP имеет поддержку для большинства существующих web-серверов. Это Apache, Microsoft Internet Information Server, Personal Web Server, Netscape и iPlanet-серверы, Oreilly Website Pro, Caudium, Xitami, OmniHTTPd и многие другие. Для большинства этих серверов PHP имеет модули. В других, поддерживающих стандарт CGI, PHP может работать как CGI-процессор.
Итак, с помощью PHP вы получаете свободу выбора ОС и web-сервера. Более того, вы может также выбрать использование процедурного или объектно-ориентированного варианта программирования или их сочетания. Хотя не всякая стандартная возможность OOП реализована в текущей версии PHP, многие библиотеки кодов и большие приложения (включая библиотеку PEAR) написаны только с использованием OOП-кода.
В PHP вы не имеете ограничений в выводе HTML. PHP может выводить изображения, PDF-файлы и даже клипы Flash (используя libswf и Ming), генерируемые на лету. Вы также легко можете выводить любой текст, включая XHTML, и любой другой XML-файл. PHP может автоматически генерировать эти файлы и сохранять их в файловой системе, вместо их распечатки, формируя серверный кэш для вашего динамического содержимого.
Одна из наиболее сильных и привлекательных черт PHP - поддержка им большого количества баз данных (БД). Создать web-страницу, работающую с БД, невероятно легко.
В настоящее время поддерживаются следующие БД:
Adabas D Ingres Oracle (OCI7 и OCI8)
dBase InterBase Ovrimos
Empress FrontBase PostgreSQL
FilePro (read-only) mSQL Solid
Hyperwave Direct MS-SQL Sybase
IBM DB2 MySQL Velocis
Informix ODBC Unix dbm

У нас имеется также абстрактное расширение DBX, позволяющее прозрачно использовать любую БД, поддерживаемую этим расширением. Также PHP поддерживает ODBC, стандарт Open Database Connection, и вы можете подключаться к любой БД, поддерживающей этот всемирный стандарт.
PHP поддерживает взаимодействие с другими службами по таким протоколам, как LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (под Windows) и множество других. Вы можете также открыть обычный сетевой сокет и взаимодействовать с использованием любого_протокола.
PHP поддерживает сложный обмен данными WDDX между практически всеми языками программирования_Web.
PHP имеет поддержку инстанциации Java-объектов и их прозрачного использования как PHP-объектов. Вы также можете использовать ваше CORBA-расширение для доступа к удалённым объектам.
PHP имеет предельно удобные возможности для работы с текстом, от POSIX Extended или регулярных выражений Perl до разбора документов XML. Для разбора и доступа к XML-документам мы поддерживаем стандарты SAX и DOM. Вы можете использовать наше XSLT-расширения для трансформации XML-документов.
При использовании PHP в области электронной коммерции вы можете использовать функции Cybercash-платежей, CyberMUT, VeriSign Payflow Pro и CCVS для ваших online-программ платежей.
Наконец, но не окончательно, у нас имеются многие другие интересные расширения, функции машины поиска mnoGoSearch, функции IRC Gateway, утилиты сжатия (gzip, bz2), конвертации календарей, перевода ...

Особенности РНР


Вводный пример
<html>
<head>
<title>Пример</title>
</head>
<body>

<?php
echo "Hi, I'm a PHP script!";
?>

</body>
</html>


Заметьте, как это отличается от скриптов, написанных на языках Perl или C - вместо написания программы с большим количеством команд для вывода HTML, вы пишете HTML-скрипт с некоторым количеством встроенного кода для выполнения каких-либо действий (в данном случае - для вывода некоторого текста). Код PHP заключён в специальные начальные и конечные тэги, что позволяет вам входить в и выходить из "режима PHP".
PHP отличается от других подобных языков, типа клиентского JavaScript, тем, что код выполняется на сервере. Если вы имеете скрипт, аналогичный вышеприведённому на сервере, то клиент получит результат работы этого скрипта, не имея возможности определить, каков был исходный код. Вы также можете сконфигурировать ваш web-сервер таким образом, чтобы он обрабатывал все ваши HTML-файлы с помощью PHP, и реально пользователь не будет иметь способа определить, что у вас "в рукаве".
Наилучшим качеством PHP является то, что он предельно прост для новичка в программировании, но предлагает много продвинутых возможностей для программиста-профессионала. Не пугайтесь, увидев длинный список возможностей PHP. Вы скоро освоитесь и через несколько часов начнёте писать код.
Как и у всякого языка программирования, у РНР есть свой синтаксис. Он очень похож на синтаксис языка С или Perl. Программисты, пишущие на этих языках, смогут освоить РНР буквально за несколько дней. Но даже если Вы никогда не программировали, РНР поддастся Вам легко и обеспечит базу для перехода на языки более сложного уровня. Все команды достаточно логичны, а правила просты. Синтаксис включает в себя операторы, разделенные между собой точкой с запятой. Одна из основных ошибок начинающих программистов — отсутствие точки с запятой между операторами. К счастью, ошибки в РНР по умолчанию выдаются на экран (в отличие от CGI, где все ошибки записываются в лог-файл), и найти их при определенной внимательности и опыте не составит большого труда. Тем более что умный интерпретатор подскажет номер строки, в которой произошла ошибка.
Для программирования на РНР Вам понадобится любой текстовый редактор, но для удобства он должен обеспечивать подсветку синтаксиса и нумерацию строк. Для того чтобы сервер знал, в каком из файлов есть код РНР, его расширение (файла) нужно сделать либо phtml, либо php3, либо php. Строго говоря, может быть назначено любое расширение, но я рекомендую Вам в целях совместимости всегда использовать phtml. Каждая команда в РНР, как правило, начинается с "<?php" и заканчивается "?>" (здесь и далее без кавычек). Как Вы помните, несколько команд разделяются точкой с запятой. В любом месте скрипта РНР можно поставить комментарий, начинается он с "/*", а заканчивается — "*/" Если комментарий маленький и занимает только одну строчку, можно поставить "//" и таким образом легко закомментировать любую строчку до ее конца. Как обычно, пробелы, символы табуляции и перевод строки просто игнорируются и могут применяться для улучшения читабельности кода РНР.

Выход из HTML

Когда PHP разбирает файл, он просто передаёт текст файла, пока не обнаружит один из специальных тэгов, который говорит о необходимости начать интерпретацию текста как кода PHP. Разборщик выполняет весь найденный код до закрывающего тэга PHP, который говорит разборщику, что нужно снова начать просто передавать текст. Этот механизм позволяет внедрять PHP-код в HTML: всё за пределами тэгов PHP остаётся без изменений, а внутри тэгов - разбирается как код.
Имеются четыре набора тэгов, которые используются для обозначения блоков кода PHP.
Только два из них (<?php. . .?> и <script language="php">. . .</script>) всегда доступны; другие можно включать и отключать из файла конфигурации php.ini. Хотя сокращённые тэги и тэги в стиле ASP могут быть удобны, они не так переносимы, как их длинные версии. Также, если вы предполагаете внедрять PHP-код в XML или XHTML, нужно использовать форму <?php. . .?> для соответствия XML.

Тэги, поддерживаемые PHP:
1. <?php echo("если вы хотите работать с документами XHTML или XML, делайте так\n"); ?>

2. <? echo ("это простейшая SGML-инструкция процессинга\n"); ?>
<?= выражение ?> Это аббревиатура для "<? echo выражение ?>"

3. <script language="php">
echo ("некоторые редакторы (вроде FrontPage) не любят
инструкции процессинга");
</script>

4. <% echo ("Вы можете по выбору использовать тэги в стиле ASP"); %>
<%= $variable; # Это аббревиатура для "<% echo . . ." %>

Первый способ, <?php. . .?>, это предпочтительный метод, так как он позволяет использовать PHP в коде, соответствующем правилам XML, таком как XHTML.
Второй способ вообще невозможен. Сокращённые тэги доступны только тогда, когда они подключены. Это можно сделать функцией short_tags() (только в PHP 3), включив установку конфигурации short_open_tag в PHP config-файле, или скомпилировав PHP с опцией --enable-short-tags в configure. Даже если вы по умолчанию включили в php.ini-dist, использование сокращённых тэгов не рекомендуется.
Четвёртый способ доступен, только если тэги в стиле ASP включены с использованием установки конфигурации asp_tags.
Примечание: поддержка тэгов ASP-стиля была введена в версии 3.0.4.
Примечание: использование сокращённых тэгов должно быть исключено при разработке приложений или библиотек, предназначенных для распространения или при публикации на PHP-серверы, которые вами не контролируются, поскольку сокращённые тэги могут не поддерживаться на целевом сервере. Для обеспечения переносимости и распространения кода не используйте сокращённые тэги.
Закрывающий тэг блока будет иметь следом за собой ведомый символ newline, если он имеется. Также закрывающий тэг автоматически подразумевает точку с запятой; вам не нужно также вводить символ "точка с запятой" в конце последней строки PHP-блока.
PHP позволяет использовать структуры такого вида:
Пример . Advanced escaping/продвинутая замена
<?php
if ($expression) {
?>
<strong>Это правильно.</strong>
<?php
} else {
?>
<strong>Это неправильно.</strong>
<?php
}
?>

Этот код работает так, как ожидается, поскольку, когда PHP встречает закрывающие тэги ?>, он просто начинает выводить всё, что обнаруживает после них, до обнаружения другого открывающего тэга. Этот пример, конечно, надуманный, но при выводе больших блоков текста выход из режима разбора PHP обычно более эффективен, чем отправка всего текста через echo() или print() или что-нибудь похожее.
Комментарии
PHP поддерживает комментарии 'C', 'C++' и оболочки Unix. Например:
<?php
echo "This is a test"; // Это однострочный комментарий в стиле c++
/* Это многострочный комментарий,
это ещё одна его строка */
echo "This is yet another test";
echo "One Final Test"; # Это комментарий в shell-стиле
?>
Комментарии "однострочных" стилей это комментарии, идущие до конца текущей строки или текущего блока PHP-кода, смотря что, идёт вперёд.
<h1>This is an <?php # echo "simple";?> example.</h1>
<p>Этот заголовок запишет 'This is an example'.
Вы не должны вкладывать комментарии в стиле 'C' при комментировании больших блоков.
<?php
/*
echo "This is a test"; /* Такой комментарий создаст проблемы */
*/
?>
Комментарии "однострочных" стилей это комментарии, идущие до конца текущей строки или текущего блока PHP-кода, смотря что идёт вперёд. Это означает, что HTML-код после // ?> БУДЕТ напечатан: ?> выводит из режима PHP и возвращает в режим HTML, а // не может это делать.
Типы
PHP поддерживает 8 примитивных типов.
4 скалярных типа:
? boolean
? integer
? число с плавающей точкой (float)
? string
Два составных типа:
? array
? object
И, наконец, два специальных типа:
? resource
? NULL
Тип переменной обычно программистом не устанавливается; напротив, он определяется РНР на этапе прогона, в зависимости от контекста, в котором эта переменная используется.
Примечание: если вы хотите проверить тип и значение конкретного выражения, используйте var_dump().
Если вы просто хотите получить читабельное представление типа для отладки, используйте gettype(). Для проверки конкретного типа не используйте gettype(), а используйте функции is_type.
Если вы хотите форсированно конвертировать переменную в определённый тип, вы можете либо привести переменную, либо использовать с ней функцию settype().
PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присваиваете строковое значение переменной var, var становится строкой. Если вы затем присваиваете переменной var целочисленное значение, она становится целым числом.
Примером автоматической конвертации в PHP является операция сложения '+'. Если любой из операндов float, то все операнды вычисляются как float, и результат также будет float. Если же операнды интерпретируются как целые числа, то и результат будет целочисленным. Обратите внимание, что при этом НЕ изменяются типы самих операндов; это делается только на этапе вычисления операндов.
$foo = "0"; // $foo это строка (ASCII 48)

$foo += 2; // теперь $foo это integer (2)
$foo = $foo + 1.3; // теперь $foo это float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo это integer (15)
$foo = 5 + "10 Small Pigs"; // $foo это integer (15)

Вывод на экран и переменные в РНР
РНР очень легко позволяет организовать вывод текста на экран. Рассмотрим пример скрипта:
<?php
echo "Привет, мир!";
?>
Этот скрипт может быть расположен в любом месте HTML-документа, и сам по себе он не несет ничего полезного, так как только выводит на экран фразу "Привет, мир!". Но таким образом мы знакомимся с одной из наиболее распространенных команд РНР — вывод информации на экран пользователя. Для того чтобы придать нашему скрипту полезные функции, давайте познакомимся с переменными. Переменная характеризуется именем, типом и значением. Имя может быть любым и включать в себя цифры, буквы английского алфавита и разрешенные символы (например, символ подчеркивания или тире). По типу переменные делятся на целые, с плавающей запятой и символьные. Значение в соответствии с типом может быть практически любым. Например, переменная a=5. Это говорит нам о том, что имя у переменной — а, тип — целочисленный, значение — 5. Вот еще примеры имен и значений:
<?php
$name = 6;
$h12 = 4.89;
$file_type = "path/index.phtml";
$os = "РНР для всех!";
?>
Как видите, все переменные в РНР (но не только в нем) должны начинаться с символа $, что позволяет интерпретатору безошибочно отличать их от команд РНР. В первой строчке нашего скрипта переменной $name присваивается значение 6, и эта переменная автоматически становится целочисленной. Кстати говоря, заранее описывать тип переменной не требуется, как в языках Pascal или Visual Basic, но хотя разделение на типы чисто условное, каждая переменная автоматически стремится использовать правильный тип, соответственно значению. Вторая строчка кода присваивает переменной $h12 значение 4.89, которое является значением с плавающей запятой. Третья и четвертая строчки кода присваивают своим переменным значения, являющиеся символьными строками. Все, что заключено в кавычки (включая цифры), будет интерпретировано как символьная строка. Если переменные не определены ранее, но используются, их значение принимается равным либо нулю, либо пустой строке в зависимости от типа.
Как и в любом языке, над переменными можно совершать любые арифметические действия, и это не требует присутствия специального оператора, достаточно указать переменную для результата, знак равенства и перечислить в естественном порядке переменные или значения с необходимыми арифметическими знаками. Пример:
<?php
$a = 5;
$b = 3;
$c = 4;
$d = $a+$b-$c;
echo $d;
?>
Результат работы скрипта — вывод на экран цифры 4. Поддерживаются все арифметические операции и функции, многоуровневые скобки, логические операции, операции увеличения или уменьшения на единицу и многое другое.
Кроме того, очень просто и естественно организуется сравнение если — то — иначе. Для этого в РНР применяется конструкция if ( ) { } else { }. Есть различные варианты синтаксиса этого оператора, но этот — основной, и самый логичный из всех.
(если) if (условие) (то) { выполняется то, что заключено в кавычки } (иначе) else { выполняется то, что заключено в кавычки }
После кавычек ставить точку с запятой, как обычно между операторами, не обязательно. Но внутри кавычек — разделение операторов между собой проводится только через точку с запятой. Допускается вложение нескольких операторов проверки один в один. В этом случае надо быть очень внимательным к количеству закрывающих кавычек, так как при отсутствии даже одной интерпретатор выдаст ошибку кода. Рассмотрим несложный пример:
<?php
$a = 5;
$b = 9;
if ( $a == $b ) { echo $b-$a; } else { echo $b.$a; }
?>
При сравнении на истину применяется два знака равенства для того, чтобы интерпретатор мог без труда отличить сравнение от присваивания. Результат работы скрипта — 95, т.к $a не равно $b, а команда echo $b.$a; (между переменными стоит точка, а не знак арифметической операции) выводит подряд указанные переменные. Неравенство (ложь) обозначается символами !=, допустимы все остальные арифметические и логические символы и операторы (например, or, and, >, <= и т.д.). Применяется три знака равенства для того, чтобы сравнивались не только значения, но и типы переменных.
Оператор or, || обозначает “или”. Оператор and,&& - “и”. Две версии этих операторов объясняются разным порядком вычисления операторов. Оператор or имеет более низкий уровень старшинства, чем ||. Оператор and имеет более низкий уровень старшинства, чем &&. Однако, я не рекомендую увлекаться таким способом указания порядка, так как в нем легко запутаться и сделать ошибку. Например, следующие два выражения эквивалентны, но второе гораздо проще для понимания.
$x and $y || $z; ($x && $y) || $z;
В РНР есть средства быстрого изменения переменной на единицу в сторону увеличения или уменьшения. Для этого нужно указать имя переменной и за ним, без знака равенства, — подряд два плюса или минуса соответственно. Например, $a++; — переменная $a будет увеличена на единицу. Поддерживается одновременное присваивание одного значения нескольким переменным — $a = $b = 4;. Обе переменных будут равны четырем. Вот еще несколько примеров нестандартных арифметических операций в РНР:
<?php
$b = $a = 5; // присваиваем значения переменым $a и $b
$c = $a++; // последующее увеличение, присваиваем $c
// начальное значение $a (5)
$e = $d = ++$b; // предварительное увеличение, присваиваем $d и $e
// увеличенное значение$b (6) тут и $d и$e равны 6
$f = double($d++); // присвоить удвоенное значение $d до его увеличения,
// то есть 2*6 = 12, переменной $f
$g = double(++$e); // присвоить удвоенное значение $e после его увеличения,
// то есть 2*7 = 14, переменной g
$h = $g += 10; // сначала увеличить значение $g на 10, что дает в
// результате 24, а затем присвоить это значение
// переменной $h, что также дает 24
?>


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

Открытие файла
Работа с файлами в PHP очень напоминает работу с файлами в Си. То есть, сначала файл открывается в нужном режиме, при этом возвращается некоторое целое число. Следующим этапом идет собственно работа с самим фалом (чтение, запись...) Последним этапом есть закрытие файла. Некоторое программисты утверждают, что файл можно не закрывать, так как PHP автоматически закрывает все открытые файлы по завершению сценария. Это всё правда, рекомендуется закрывать самим фалы, воспринимайте это как хороший стиль кодинга.
fopen ($filename, $mode, $use_other_path=false)
Итак, мы открываем файл $filename в режиме $mode. Редко используется третий параметр $use_other_path, он означает, что если не указан относительный путь к файлу, его нужно искать среди путей используемых конструкциями include и require.
Пред вами список значений, которые может принимать параметр $mode:

  • r - Файл открывается только для чтения. Если файла не существовало, будет ошибка. После удачного открытия файла указатель устанавливается в начало файла.
  • r+ - файл открывается одновременно и на чтение и на запись. Указатель устанавливается на начало. Если файла не существовало, возвращается false. Если в момент записи указатель установлен где-то посередине файла, то данные запишутся поверх уже существующих.
  • w- Создаётся новый пустой файл. Если на момент вызова уже существовал такой файл, то он уничтожается.
  • w+ - аналогичен r+, но если файла не существовало он создается. Можно работать как в режиме записи так в режиме чтения. Если файл существовал, то его содержимое уничтожается.
  • а- открывает существующий фал в режиме записи и при этом двигает указатель на последний байт файла. Этот режим используют, когда нужно что-то дописать. Вызов проваливается если файла не существовало.
  • а+ - открывает файл в режиме чтения и записи. Указатель устанавливается в конец файла при этом, не уничтожая содержимое файла. Отличается от а тем, что ели до вызова файла не существовало, то он создается.

В конце любой из строк r,w,a,r+,w+,a+ может находиться ещё один символ- "b" или "t". Если указан "b", то файл открывается в режиме бинарного чтения/записи. Если "t", устанавливается режим трансляции символа перевода строки. Всё это можно продемонстрировать на примере:
<?

/* Получает в параметрах строку и возвращает через пробел
коды символов, из которых она состоит */

function makehex($st)
{
for($i=0; $i<strlen($st); $i++) $hex[]= sprintf ("%2X", ord($st[$i]));
return join (" ",$hex);
}

# открываем файл разными способами

$f= fopen("test.php","r");
echo makehex(fgets($f,100))."\n";
$f= fopen("test.php","rt");
echo makehex (fgets($f,100))."\n";

?>
Первая строчка файла test.php состоит всего из двух символов "<?", за ними должен следовать маркер конца строки. Скрипт показывает, как выглядит этот маркер, то есть состоит ли он из одного или из двух символов.
Запускаем скрипт в Unix. Получаем две одинаковые строки:
3С 3F 0A
3C 3F 0A
Значит, в этой системе физический конец строки обозначается одним символом- кодом 0x0A или \n. Если запустить скрипт в Windows, получим:
3С 3F 0D 0A
3C 3F 0A
Бинарное и текстовое чтение дали разные результаты.
Не используйте обратные слэши в именах файлов. Если вы работаете в Windows, то эти слэши будут автоматически переведены в нормальные. Если вы просто не можете обойтись без обратного слэша, не забудьте удвоить его, так он воспринимается как спецсимвол.
Конструкция or die().
($f=fopen("/homa/user/file.txt","r")) or die ("error");
Если файл не открылся, то ошибка. Всё довольно просто. Стоит заметить, что or нельзя заменить на "|", потому что последний имеет более высокий приоритет.
Создание и удаление файла.
Если нужный вам файл еще не существует, его можно создать с помощью функции touch(). Получив строку с именем файла, эта функция создает пустой файл с заданным именем. Если такой уже существует, то функция не изменяет содержания, но изменяет дату модификации.
Существующий файл можно удалить, передав в качестве параметра имя файла, с помощью функции unlink().
Поверка существования файла.
file_exists(string filename);
Возвращает true, если файл, определенный в filename, существует; иначе - false.
Смотри также clearstatcache().

fileatime(string filename);
Возврвщает время последнего усешного обращения к файлу, или false в случае ошибки.

filectime(string filename);
Возвращается время последнего изменения файла, или false в случае ошибки.
filegroup(string filename);
Возврашает ID группы владельца файла, или false в случае ошибки.
fileowner(string filename);
Возвращает ID пользователя, владельца файла, или false в случае ошибки.
fileperms(string filename);
Возвращает разрешения, установленные для файла, или false в случае ошибки.

Безымянные временные файлы.
Довольно часто нам необходимо занести какую-то информацию во временное хранилище. Не скажу, что для реализации повседневных задач подойдёт способ создания временных файлов, но... Для этого разработчики PHP придумали функцию tmpfile(). Эта функция создает новый файл, доступный для чтения и записи, с уникальным именем. Далее можно будет работать только с файловым дескриптором, имя файла недоступно. Место, занимаемое временным файлом, освобождается сразу после закрытия файла или завершении работы сценария.
Закрытие файла.
После работы с файлом его желательно закрыть. Делается это функцией
fclose($f)
Эта функция закрывает файл, открытый функцией fopen() (или аналогичными функциями). Возвращает false, если закрыть файл не удалось. Вы ВСЕГДА должны закрывать FTP- и HTTP - соединения.
Рекомендуется вызывать в программе несколько раз функцию
fflash($f);
Записывает на диск все изменения, которые были произведены с открытым файлом. То есть сохраняет текущее состояние файла из буфера ввода/вывода на диск.
Блочные чтение/запись.
fread($f, $numberbytes);
Читает из файла $f $numberbytes символов и возвращает строку этих символов. Если $numberbytes больше чем чем можно считать, то возвращается, то что удалось.
Прочесть весь файл в одну строку можно с помощью такого оператотра:
$s=fread($f, filesize($f));
или
$s=join(“”, file($f));
Функция file($f) читает весь файл в список, каждый элемент которого равен строке, почитанной из файла. Функция join($s,$mas) возвращает строку, содержащую последовательно расположенные все элементы массива с указанным разделителем.

fwrite($f, $st);
Записывает в файл $f содержимое строки $st. В некоторых клинических случаях функции fread() и fwrite() можно использовать для копирования файлов.
Построчные чтение/запись.
fgets($f, $dlina);
Считывает из файла одну строку, заканчивающуюся символом новой строки \n. На первый взгляд это очень полезная функция. которая позволяет пройтись по строкам в файле. Но более рационально использовать функцию file().
fgetss($f) получает строку по указателю файла и вырезает HTML тэги
fgetc($f);
Возвращает строку, содержащую один символ, прочитанный по файловому указателю fp. При EOF возвращается false (as does feof()).

fputs($f, $st);
Аналогична функции fwrite().
Чтение CSV- файла.
Очень много людей использует такую замысловатую программу, как Microsoft Excel. Потому мудрые разработчики PHP придумали специальную функцию для работы с одним из видов файлов, в который может сохранять эта программа.
fgetcsv($f, $dlina, $delit=',');
Данная функция счтывает одну строку из файла $f, и разбивает её по символу $delit. Параметр $delit обязательно должен быть длиной в один символ. Параметр $dlina задаёт максимальную длину строки. Пустые строки не игнорируются, а возвращаются как список из одного элемента. fgetcsv() работает чуть пошустрее, чем fgets() и explode(). Пример:
$f= fopen("file.csv","r") or die("ошибка");
for ($i=0; $data=fgetcsv($f,1000, ";"); $i++)
{
$num= count($data);
if ($num==1 && $data[0]==="") continue;
echo "<h4> Строка номер $i ($num полей):</h3>";
for ($c=0; $c<$num; $c++)
print "[$c]: $data[$c]
";
}
fclose($f);
Положение указателя текущей позиции.
feof($f)
Возвращает true, если достигнут конец файла. Чаще всего эта функция используется так:
$f= fopen("my_file.txt","r");
while (!feof($f))
{
$st=fgets($f);

// обрабатываем очередную строку $st

}
fclose($f);
Если попадётся большой файл, эта функция будет довольно долго думать.
fseek($f, $offset, $whence=SEEK_SET)
Устанавливает указатель на байт со смещением $offset. Параметр $whence задаёт, с какого места отчитыватся смещение $offset.
? SEEK_SET- устанавливает позицию начиная с начала файла;
? SEEK_CUR- отсчитывает позицию относительно текущей позиции;
? SEEK_END- отсчитывает позицию относительно конца файла.
!! В случае успешного завершения функция возвращает 0, а в случае провала -1. ftell($f) Возвращает положение указателя файла.

Получение информации о файле.
array stat(string filename);
Собирает статистику о файле filename.
Возвращает массив статистической информации о файле со следующими элементами:
1. устройство
2. inode
3. номер ссылки
4. id пользователя или владельца
5. id группы владельца
6. device type if inode device *
7. размер в байтах
8. время последнего доступа
9. время последней модификации
10. время последнего изменения
11. размер блока для I/O файловой системы *
12. количество занатых блоков
* - только для систем, поддерживающих тип st_blksize -- в других системах (i.e. Windows) возвращается -1
Блокировка файла
Нужно быть готовым к тому, что к вашей программе могут обратиться несколько пользователей, причем практически одновременно. Информация в файле может разрушиться.
Существует специальная функция для предотвращения подобных ситуаций. Функция flock() блокирует файл, имеет два аргумента- указатель на файл и целое число, указывающее режим блокировки, которые вы можете применить к файлу.

  • 1 Частичная- разрешает другим процессам читать файл, но запрещает запись в него.
  • 2 Полная- запрещает другим процессам как чтение, так и запись в файл.
  • 3 Освобождение- снимает блокировку с файла.

Данную функцию нужно вызывать сразу после открытия файла, потом вызывать ее повторно для освобождения.
Методы передачи данных Get и POST
Передача данных пользователя в HTML реализуется с помощью форм. Алгоритм работы программы выглядит следующим образом:

  • Получить данные, переданные пользователем.
  • Обработать данные.
  • Вывести результат.
  • Завершить работу.

Метод передачи данных задается параметром method тэга <form>. Наглядно определить, какой метод используется можно следующим образом. Метод, при котором передаваемые параметры отображаются в строке браузера, является методом GET. Если вы не видите передаваемых параметров, значит используется метод POST. Параметр при пересылке присоединяется к URL-адресу через знак вопроса (?). Если параметров несколько, то они разделяются амперсантом (&).
Принципиальная особенность метода POST заключается в том, что сам блок пересылаемых данных находится после маркера окончания. При такой передаче данных сервер их никак не интерпретирует, а сразу передает сценарию. Этот метод обычно используется при передаче больших объемов данных или когда нужно скрыть значения параметров от глаз пользователя.
Экран загрузки файлов может быть создан с помощью специальной формы примерно так:

Пример. Форма для загрузки файлов
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

_URL_ должен указывать на PHP-файл. Скрытое поле MAX_FILE_SIZE обязано предшествовать полю ввода файла/file input field, и его значение это максимальный размер принимаемого файла. Значение в байтах.
Предупреждение!
MAX_FILE_SIZE является для браузера лишь уведомляющим. Легко обойти этот максимум. Поэтому не рассчитывайте, что браузер будет повиноваться вашим желаниям! Однако PHP-установки maximum-size обмануть нельзя.
Переменные, определяемые для загруженных файлов, зависят от версии PHP и конфигурации. Следующие переменные будут определены в скрипте назначения после успешного завершения загрузки. Если track_vars включена, инициализируется массив $HTTP_POST_FILES/$_FILES. Наконец, соответствующие переменные могут быть инициализированы как глобалы, если register_globals включена. Однако использовать глобалы больше не рекомендуется.
$HTTP_POST_FILES/$_FILES предоставлены для вмещения информации загруженных файлов.
Далее идёт содержимое $_FILES. Обратите внимание, что здесь предполагается использование имени 'userfile' для загружаемого файла, как в примере скрипта ранее:
$_FILES['userfile']['name']
Оригинальное имя файла на клиентской машине.
$_FILES['userfile']['type']
mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".
$_FILES['userfile']['size']
Размер загруженного файла в байтах.
$_FILES['userfile']['tmp_name']
Временное имя файла, под которым загруженный файл был сохранён на сервере.
Если register_globals включена в php.ini, то будут доступны нижеследующие переменные. Обратите внимание, что имена этих переменных предполагают использование имя файла для загрузки 'userfile', как в примере предыдущего скрипта:

  • $userfile - Временное имя файла, под которым загруженный файл был сохранён на сервере.
  • $userfile_name - Оригинальное имя или путь к файлу на системе отправителя.
  • $userfile_size - Размер загруженного файла в байтах.
  • $userfile_type - mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".

Заметьте, что часть "$userfile" этих переменных это имя, которое записано в поле <input> type="file" в форме загрузки. В предыдущем примере формы мы назвали её "userfile".
Примечание: register_globals = On не рекомендуется по соображениям производительности и обеспечения безопасности.
Файлы будут по умолчанию сохраняться во временной директории по умолчанию на сервере, если только не задано другое место директивой upload_tmp_dir в php.ini. Директория по умолчанию сервера может быть изменена через установку переменной окружения TMPDIR в среде, в которой работает PHP. Установка её с использованием putenv() из РНР-скрипта не будет работать. Эта переменная окружения может также использоваться для того, чтобы гарантировать, что другие операции также работают с загруженными файлами.

Пример . Проверка загрузки файлов
is_uploaded_file() и move_uploaded_file().
<?php
// В PHP ранее 4.1.0 должна использоваться $HTTP_POST_FILES вместо $_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];
}
/* ...или... */
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>

PHP-скрипт, который получает загружаемый файл, должен реализовывать логику, необходимую для определения того, что нужно сделать с загруженным файлом. Вы можете, например, использовать переменную $_FILES['userfile']['size'] для исключения файлов, которые слишком малы или велики. Вы можете использовать переменную $_FILES['userfile']['type'] для исключения файлов, которые не отвечают критериям определённого типа. При любой логике вы должны либо удалять, либо перемещать такие файлы из временной директории.
Файл будет удалён из временной директории по окончании запроса, если он (файл) не перемещён или не переименован.
Обычные ловушки
Элемент MAX_FILE_SIZE не может специфицировать размер файлов больше того размера файла, который может быть установлен в ini-установке upload_max_filesize. По умолчанию 2 Мегабайта.
Если включено ограничение памяти, может понадобиться увеличение memory_limit. Установите memory_limit достаточно большим.
Если max_execution_time установлено слишком маленькое, выполнение скрипта может превысить это значение. Установите max_execution_time достаточно большим.
Если post_max_size слишком мал, большие файлы нельзя будет загружать. Установите post_max_size достаточно большим.
Если не проверять с каким файлом вы работаете, то пользователи могут получить нежелательную информацию в других директориях.
Обратите внимание, что CERN httpd может отсечь всё, начиная с первого пробела в шапке content-type mime-типа, получаемой им с клиента. Если это именно такой случай, CERN httpd не будет поддерживать возможность загрузки файлов.
Загрузка нескольких файлов
Несколько файлов можно загружать при использовании разных name в input.
Можно также загружать одновременно несколько файлов и получать автоматически упорядоченную в массивы информацию. Для этого вам необходимо использовать тот же самый синтаксис отправки массива в HTML-форме, как и с несколькими элементами select и checkbox:
Примечание: поддержка загрузки нескольких файлов была введена в версии 3.0.10.
Пример . Загрузка нескольких файлов
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send these files:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Send files">
</form>

Если такая форма отправлена, массивы $_FILES['userfile'], $_FILES['userfile']['name'] и $_FILES['userfile']['size'] будут инициализированы (так же как с $HTTP_POST_FILES для версий PHP ранее 4.1.0). Когда register_globals включена, инициализируются также глобалы для загружаемых файлов). Каждый из них будет являться численно индексированным массивом соответствующих значений для отправляемых файлов.
К примеру, предположим, что отправлены файлы с именами /home/test/review.html и /home/test/xwp.out. В этом случае $_FILES['userfile']['name'][0] будет содержать значение review.html, а $_FILES['userfile']['name'][1] - значение xwp.out.
Аналогично, $_FILES['userfile']['size'][0] будет содержать значение размера файла review.html, и так далее.
$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] и $_FILES['userfile']['type'][0] также устанавливаются.
Использование удалённых/remote файлов
Если поддержка "URL fopen-оболочки/wrapper" включена при конфигурировании PHP (если вы только не передали явным образом флаг --disable-url-fopen-wrapper для конфигурирования (для версий, новее 4.0.3) или не установили allow_url_fopen в off в файле php.ini (для более новых версий)), вы можете использовать HTTP и FTP- URL'ы с большинством функций, которые принимают filename/имя файла в качестве параметра, в том числе - операторы require() и include().
Примечание: Windows-версия PHP в настоящее время не поддерживает удалённый доступ к файлам для следующих функций: include(), include_once(), require() require_once().
Например, вы можете использовать это для того, чтобы открыть файл на удалённом web-сервере, разобрать вывод данных, а затем использовать эти данные в запросе к БД или просто вывести их в стиле вашего web-сайта.


Пример. Получение названия/title удалённой страницы

<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* Это будет работать, только если title и его тэги расположены в одной строчке */
if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>

Вы можете также записывать в файлы по FTP, если соединены как пользователь с корректными правами доступа и если файл ещё не существует. Для соединения как любой пользователь, кроме 'anonymous', вам необходимо специфицировать username (и, возможно, password) в URL, как, например: 'ftp://user:password@ftp.example.com/path/to/file'. (Вы можете использовать тот же синтаксис для доступа к файлам по HTTP, если необходима Basic-аутентификация.)
Пример . Сохранение данных на удалённом сервере
<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
echo "<p>Unable to open remote file for writing.\n";
exit;
}
/* Здесь записываются данные. */
fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>

Примечание: из этого примера у вас может возникнуть идея использовать эту технику для записи в удалённый log, но, как указано выше, вы можете записывать только в новый файл с использованием оболочек URL fopen(). Для выполнения распределённого логинга, вроде этого, вы должны просмотретьsyslog().

Вложения файлов в РНР
Каждый, кто сделал хоть одну страничку в сети, сталкивался с проблемой изменения тех или иных данных на ней. Конечно, это не сложно когда страничек несколько или она одна :-), но если Вы сделали большой сайт, маленькое дополнение (например, в меню) в сотни файлов может превратиться в настоящий кошмар! РНР решает эту проблему в раз, позволяя вкладывать одну страницу в другую. Достигается это с помощью операторов REQUIRE и INCLUDE. После этих операторов в круглых скобках должен стоять путь к вкладываемому файлу. Например, INCLUDE ("text.phtml"). Различие между указанными операторами заключается в том, что REQUIRE подменяется содержимым указанного файла и может быть использован только один раз, а INCLUDE — вставляет и выполняет содержимое указанного файла, что позволяет применить его несколько раз, например в цикле. В любом случае, при исполнении файла интерпретатор РНР (правильно говорить — парсер) пребывает в состоянии HTML, и для его включения код надо заключить в конструкцию <?php … ?>. Вложения файлов могут происходить только внутри серверного пространства, доступного РНР. Другими словами, Вы не можете использовать в имени файла http://
Достаточно часто встречаются сайты, ссылки которых включают в себя специальные символы — &, ?, %. Все это может быть и результатом работы РНР. Дело в том, что если в конце ссылки добавить ?имя=значение, это значение будет доступно под этим же именем в файле, куда указывает ссылка. Если необходимо добавить несколько имен, они могут быть разделены знаком &. Теперь мы можем сделать сайт, который будет доступен с помощью только одной странички. А всю остальную информацию эта страничка будет выводить на основании полученных по ссылке данных. Вид такой ссылки будет примерно таким: http://имя.ru/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 вкладывается и исполняется. Таким образом, начало и конец остаются одинаковыми, а изменяется только середина. И какие-либо изменения уже не кажутся такими страшными, как раньше. Ведь сделать их надо только в одном файле, а отразится это на всем сайте.
Есть и другой путь. Его суть заключается в том, что у РНР есть доступ к так называемым переменным окружения сервера. Одна из этих переменных — запрашиваемый посетителем путь относительно адреса сайта. И этот путь становится нам доступен для использования. В этом случае ссылки у нас будут такого вида: http://имя.ru/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>


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


 


Случайный афоризм
Ностальгия - это результат сравнения наихудшего в настоящем с наилучшим в прошлом.  

 

Rambler's Top100

Использование любых материалов этого сайта, без разрешения автора, ЗАПРЕЩЕНО
Автор сайта Сазонов Д. О. (Подробнее) Форма обратной связи