![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля? 3 часть
Для большинства приложений сеанс связи открывается клиентом для каждого запроса и закрывается сервером после окончания ответа на запрос. HTTP-запрос Запрос это сообщение, посылаемое клиентом серверу. Первая строка называется строка статуса. Для совместимости с протоколом HTTP/0.9, существует два формата HTTP запроса: (Простой-Запрос | Полный-Запрос ) Простой-Запрос = Метод SP Запрашиваемый-URI CRLF Полный-Запрос = Метод SP URI-Запроса SP Версия-HTTP CRLF *(Общий-Заголовок | Заголовок-Запроса | Заголовок-Содержания ) CRLF [ Содержание-Запроса ] (SP-продел, CRLF – перевод строки, возврат каретки, расстановка символов CRLF и SP критична) Если HTTP/1.0 сервер получает Простой-Запрос, он должен отвечать Простым-Ответом HTTP/0.9. HTTP/1.0 клиент, способный обрабатывать Полный-Ответ, никогда не должен посылать Простой-Запрос. Метод В поле Метод указывается метод, который должен быть применен к ресурсу, идентифицируемому URI-Запроса. Названия методов чувствительны к регистру. Существующий список методов может быть расширен. Метод = "OPTIONS" | "GET" | "HEAD" | "PUT" | "POST" | "DELETE" | "LINK" | "UNLINK"| дополнительный-метод Если данный метод известен серверу, но не допускается для указанного ресурса, сервер должен вернуть код статуса "405 Method Not Allowed", и код статуса "501 Not Implemented", если метод не известен или не поддерживается данным сервером. Методы: OPTIONS - метод позволяет клиенту определять опции и/или требования, связанные с ресурсом, или возможностями сервера. GET -метод служит для получения любой информации, идентифицированной URI-Запроса. Если URI- Запроса ссылается на процесс, выдающий данные, в качестве ответа будут выступать данные, сгенерированные данным процессом. Метод GET изменяется на "условный GET", если сообщение запроса включает в себя поле заголовка "If-Modified-Since". В ответ на условный GET, тело запрашиваемого ресурса передается только, если он изменялся после даты, указанной в заголовке "If-Modified-Since". Алгоритм определения этого включает в себя следующие случаи: Если код статуса ответа на запрос будет отличаться от "200 OK", или дата, указанная в поле заголовка "If-Modified-Since" некорректна, ответ будет идентичен ответу на обычный запрос GET. Если после указанной даты ресурс изменялся, ответ будет также идентичен ответу на обычный запрос GET. Если ресурс не изменялся после указанной даты, сервер вернет код статуса "304 Not Modified". Использование метода условный GET направлено на разгрузку сети, так как он позволяет не передавать по сети избыточную информацию. HEAD -аналогичен методу GET, за исключением того, что в ответе сервер не возвращает Тело- Ответа. Данный метод может использоваться для получения метаинформации о ресурсе без передачи по сети самого ресурса. POST- используется для запроса сервера, чтобы тот принял информацию, включенную в запрос. Метод POST был разработан, чтобы была возможность использовать один общий метод для следующих функций: · Аннотация существующих ресурсов; · Добавления сообщений в группы новостей, почтовые списки или подобные группы статей; · Для доставки блоков данных процессам (передача данных форм) · Расширение баз данных через операцию добавления; Реальная функция, выполняемая методом POST, определяется сервером и обычно зависит от URI- Запроса. Добавляемая информация может рассматриваться как аргументы, параметры. PUT -метод запрашивает сервер о сохранении Тела-Запроса под URI, равным URI-Запроса. Если URI-Запроса ссылается на уже существующий ресурс, Тело-Запроса должно рассматриваться как модифицированная версия данного ресурса. Если ресурс, на который ссылается URI-Запроса не существует, и данный URI может рассматриваться как описание для нового ресурса, сервер может создать ресурс с данным URI. Если был создан новый ресурс, сервер должен информировать направившего запрос клиента через ответ с кодом статуса "201 Created". Если существующий ресурс был модифицирован, должен быть послан ответ "200 OK", для информирования клиента об успешном завершении операции. Если ресурс с указанным URI не может быть создан или модифицирован, должно быть послано соответствующее сообщение об ошибке. DELETE - метод используется для удаления ресурсов, идентифицированных с помощью URI-Запроса. LINK - метод устанавливает взаимосвязи между существующим ресурсом, указанным в URI-Запроса, и другими существующими ресурсами. Отличие метода LINK от остальных методов, допускающих установление ссылок между документами, заключается в том, что метод LINK не позволяет передавать в запросе Тела-Запроса, и том, что в результате работы данного метода не создаются новые ресурсы. UNLINK- метод удаляет одну или более ссылочных взаимосвязей для ресурса, указанного в URI- Запроса. Поля общего заголовока Применяются только к передаваемому сообщению. Cache-Control | Connection | Date | Pragma | Transfer-Encoding | Upgrade | Via Поля Заголовка-Запроса Поля Заголовка-Запроса позволяют клиенту передавать серверу дополнительную информацию о запросе и о самом клиенте. Заголовок-Запроса = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | From | If-Modified-Since | Pragma | Referer | User-Agent | extension-header Кроме того через механизм расширения могут быть определены дополнительные заголовки; приложения, которые их не распознают, должны трактовать эти заголовки, как Заголовки-Содержания. From - в случае присутствия поля From, оно должно содержать полный E-mail адрес пользователя, который управляет программой-агентом, например From: webmaster@WWW.org If-Modified-Since Поле заголовка If-Modified-Since используется с методом GET для того, чтобы сделать его условным: если запрашиваемый ресурс не изменялся со времени, указанного в этом поле, копия этого ресурса не будет возвращена сервером; вместо этого, будет возвращен ответ "304 Not Modified", несодержащий Тела- Ответа. Пример использования заголовка: If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT User-Agent Поле заголовка User-Agent содержит информацию о пользовательском агенте, пославшем запрос. Данное поле используется для статистики, прослеживания ошибок протокола, и автоматического распознавания пользовательских агентов. Пример: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 Поля Заголовка-содержания Поля заголовка объекта (Entity-header fields) определяют опциональную метаинформацию о теле объекта или, если тело не присутствует, относительно ресурса, идентифицированного запросом. entity-header = Allow | Content-Base | Content-Encoding | Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | ETag | Expires | Last-Modified | extension-header = message-header Allow - список методов, которые поддерживает ресурс, идентифицированный URI-Запроса. Назначение этого поля - точное информирование получателя о допустимых методах, ассоциированных с ресурсом; это поле должно присутствовать в ответе с кодом статуса "405 Method Not Allowed".
17.Протокол HTTP. Структура HTTP-ответа. HTTP - это протокол высокого уровня (а именно, уровня приложений), обеспечивающий необходимую скорость передачи данных, требующуюся для распределенных информационных систем гипермедиа. HTTP используется проектом World Wide Web с 1990 года. HTTP основывается на парадигме запросов/ответов. Запрашивающая программа (обычно она называется клиент) устанавливает связь с обслуживающей программой-получателем (обычно называется сервер) и посылает запрос серверу в следующей форме: метод запроса, URI(Universal Resource Identifier - URI), версия протокола, за которой следует MIME-подобное сообщение (Multipurpose Internet Mail Extensions (MIME-Многоцелевое Расширение Почты Internet), содержащее управляющую информацию запроса, информацию о клиенте и, может быть, тело сообщения. Сервер отвечает сообщением, содержащем строку статуса (включая версию протокола и код статуса - успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа. Следует отметить, что одна программа может быть одновременно и клиентом и сервером. Использование этих терминов в данном тексте относится только к роли, выполняемой программой в течение данного конкретного сеанса связи, а не к общим функциям программы. Для большинства приложений сеанс связи открывается клиентом для каждого запроса и закрывается сервером после окончания ответа на запрос. HTTP-ответ После получения и интерпретации запроса, сервер посылает ответ в соответствии со следующей формой: Ответ = Простой-Ответ | Полный-Ответ Простой-Ответ = [ Содержание-Ответа ] Полный-Ответ = Строка-Статуса=Версия-HTTP SP Статус-Код SP Фраза-Объяснение *( Общий-Заголовок | Заголовок-Ответа | Заголовок-Содержания) CRLF [ Содержание-Ответа ] Статус-код и пояснение к нему Элемент Статус-Код представляет собой 3-х цифровой целый код, идентифицирующий результат попытки интерпретации и удовлетворения запроса. Фраза-Объяснение, следующая за ним, предназначена для краткого текстового описания Статус-Кода. Статус-Код нацелен на то, чтобы его использовала машина, а Фраза-Объяснение предназначена для человека. Статус-Кода: 1xx: Информационный - не используется, но зарезервирован 2xх: Успех - Запрос был полностью получен, понят, и принят к обработке. 3xx: Перенаправление - Клиенту следует предпринять дальнейшие действия для успешного выполнения запроса. 4xx: Ошибка клиента - Запрос, содержащий неправильные синтаксические конструкции, не может быть успешно выполнен. 5xx: Ошибка Сервера - Сервер не смог дать ответ на корректно поставленный запрос. В этих случаях Код-Статуса = "200" ; OK | "201" ; Created | "202" ; Accepted | "203" ; Provisional Information | "204" ; No Content | "300" ; Multiple Choices | "301" ; Moved Permanently | "302" ; Moved Temporarily | "303" ; See Other | "304" ; Not Modified | "304" ; Use Proxy | "400" ; Bad Request | "401" ; Unauthorized | "402" ; Payment Required | "403" ; Forbidden | "404" ; Not Found | "405" ; Method Not Allowed | "406" ; None Acceptable | "407" ; Proxy Authentication Required | "408" ; Request Timeout | "409" ; Conflict | "410" ; Gone | "500" ; Internal Server Error | "501" ; Not Implemented | "502" ; Bad Gateway | "503" ; Service Unavailable | "504" ; Gateway Timeout |
От HTTP приложений не требуется понимание всех Кодов-Статуса, достаточно распознавания классов кодов статуса (идентифицирующихся первой цифрой). Поля Заголовка-Ответа Поля заголовка ответа позволяют серверу передать дополнительную информацию об ответе, которая не может быть внесена в Строку-Статуса. Там может быть информация собственно о сервере. Заголовок-Ответа= Age | Location | Proxy-Authenticate | Public | Retry-After | Server | Vary | Warning | WWW-Authenticate
18.Сервер Apache. Общие сведения, установка, конфигурирование, обслуживание. Apache - самый распространенный Web-сервер в мире. Является бесплатной открытой программой, под различные операционные системы. Обладает большими функциональным возможностям, надежен, имеет очень гибкое конфигурирование. Существуют локализации сервера для различных языков, в том числе и для русского. Установка: Unix: tar xvzf apache_2.0.43.tar.gz # cd apache_1.7.1.tar.gz # ./configure (или с параметрами) # make (root) # make install (root) Windows: Запустить скаченный дистрибутив, выбрать размещение. Для конфигурирование используются 3 файла: httpd.conf, access.conf и srm.conf в каталоге - /usr/local/apache/conf. Также в каждом каталоге могут находится файлы .htaccess. httpd.conf --Конфигурационный файл httpd.conf является основным и содержит настройки, связанные с работой Web-сервера, виртуальных серверов, а также всех его программных модулей. Для установки параметров нужно их раскоментировать (убрать символ # в начале строки) Установите поле ServerName следующим образом: Port ServerName localhost В поле DocumentRoot укажите ту директорию, в которой будут храниться ваши html-файлы. Мы ранее договорились, что это будет Z:\home\localhost\www): DocumentRoot "z:/home/localhost/www" User www Group www ErrorLog ScriptAlias /cgi-bin/ "z:/home/localhost/cgi/" ScriptAlias /cgi/ "z:/home/localhost/cgi/" Установки для CGI-директории. AddType text/html .shtml AddHandler server-parsed .shtml .html .htm Этим Вы заставляете Apache обрабатывать файлы с указанными расширениями процессором SSI. Файл access.conf В access.conf содержатся директивы, описывающие права доступа к каталогам и файлам Web-сервера. Директивы имеют форму: <Directory /www/98soft> # директивы, относящиеся ко всем документам, хранящимся в каталоге /www/rmt.ru и вложенных в него </Directory> <Location /cgi-bin> # директивы, относящиеся ко всем документам, доступным по адресу http://<имя_сервера>/cgi-bin/ <путь_к_файлу> </Location> <Files /www/98soft/form.html> # директивы, относящиеся к файлу form.html из каталога /www/98soft </Files> Различие между секциями Directory и Location состоит в том, что первая относится к каталогам на диске, вторая - к виртуальному пути (URL), который браузер запрашивает у Web-сервера. И в той, и в другой могут присутствовать директивы order, allow и deny, которые позволяют ограничить доступ к каталогу или URL с различных машин. Следующие две директивы относятся к секции <Directory>. Options [options ...] Возможные значения параметров: ExecCGI - разрешить выполнение CGI-сценариев в данном каталоге и его поддереве; FollowSymLinks - разрешить переходы по символическим ссылкам Includes - разрешить SSI (Server Side Includes); Indexes - разрешить выдачу листинга каталога, если в нем нет файла индекса (index.html) MultiViews - разрешить поддержку многих языков; All - установить сразу все перечисленные режимы кроме MultiViews. AllowOverride [options ...] Директива определяет набор директив, допустимых в файлах .htaccess. Параметры могут быть указаны следующие: AuthConfig - разрешить установку авторизации по имени пользователя и паролю; FileInfo - разрешить директивы, отвечающие за типы документов; Indexes - разрешить директивы, связанные с листингом каталогов; Limit - разрешить команды allow и deny, которые ограничивают доступ к файлам в зависимости от адреса клиентского компьютера; Options - разрешить описанную выше директиву Options. Подобный блок может встречаться и в файле httpd.conf и задавать настройки по умолчанию для всех каталогов <Directory z:/> Options Includes DirectoryIndex index.htm index.html AllowOverride AuthConfig Limit Allow from all </Directory> Таким образом, в этом блоке будут храниться установки для всех директорий по умолчанию (т.к. это - корневая директория) srm.conf --Содержит директивы, связанные с общими настройками структуры каталогов сервера. Как правило, в нем достаточно изменить лишь несколько строк. DocumentRoot <первый каталог сервера> -- Чтобы включить на сервере поддержку CGI-сценариев, следует убрать знак комментария перед директивами ScriptAlias и AddHandler cgi-script .cgi. Первая задает каталог на диске, в котором будут храниться исполняемые программы, а вторая определяет, что все файлы с расширением .cgi должны обрабатываться как сценарии. Директива ErrorDocument позволяет заменять стандартные сообщения сервера об ошибках на свои. Например, ErrorDocument 404 /missing.html и т.д. 19.Log-файл web-сервера, его настройка, использование информации log-файла. access.log — файл, использующийся веб-серверами (Apache, nginx, lighthttpd, boa, прокси-сервером squid и т.д.) для записи обращений к сайту. Является текстовым файлом, на каждой строчке которого записывается одно обращение к серверу. Используется для сбора статистики сайта (для этого используются специальные аналитические инструменты, например, WebAlizer) и для обнаружения возможных злоупотреблений на сайте. Наиболее часто используемым форматом access.log является combined, при котором данные записываются в следующем виде: %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" В котором: · %h — хост/IP-адрес, с которого произведён запрос к серверу; · %t — время запроса к серверу и часовой пояс сервера; · %r — тип запроса, его содержимое и версия; · %s — код состояния HTTP; · %b — количество отданных сервером байт; · %{Referer} — URL-источник запроса; · %{User-Agent} — HTTP-заголовок, содержащий информацию о запросе (клиентское приложение, язык и т.д.); · %{Host} - имя Virtual Host, к которому идет обращение. Настройка логов Одним из кусков пазла веб-сайта являются его логи. Для большинства сайтов анализ трафика является одной из главных задач, а удобство и, в конечном итоге, результаты такого анализа зависят от того, как вы настроили свои логи. Стандартный файл httpd.conf должен иметь раздел логов с подробными комментариями для каждой директивы. Каталог логов по умолчанию находится в /etc/httpd/logs. Позже мы покажем, как изменить этот путь. Теперь давайте рассмотрим раздел настройки логов: ErrorLog logs/error_log LogLevel warn LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog logs/access_log combined лог ошибок (Error Log) Лог ошибок содержит сообщения, поступающие от Apache (ошибки, уведомления и т.п.). Этот лог очень полезен для поиска и устранения проблем, возникающих на стороне сервера. Теперь давайте посмотрим на директиву настройки лога ошибок в httpd.conf: ErrorLog logs/error_log Если вы хотите сохранять всю информацию об ошибках в один лог, этой директивы хватит (даже для множества доменов). Однако вы можете специфицировать файл лога ошибок для каждого домена. Это делается в секциях <VirtualHost> примерно следующим образом: <VirtualHost 10.0.0.2> DocumentRoot "/home/sites/domain1/html/" ServerName domain1.com ErrorLog /home/sites/domain1/logs/error.log </VirtualHost> Уровень ошибок, попадающих в лог, устанавливается следующим образом: LogLevel warn В Apache определены следующие уровни ошибок: - emerg - экстренный – система не функционирует; - alert - ошибку необходимо немедленно исправить; - crit - критическая ошибка; - error – ошибка; - warn – предупреждение; - notice - уведомление (нормальное функционирование); - info - информационное сообщение; - debug - сообщение отладки. Имейте в виду, что все последующие уровни включают предыдущие. Ротация логов В завершении мы хотим рассмотреть механизм ротации логов. Сайты с большим трафиком генерируют большие лог-файлы, которые быстро заполняют свободное место на дисках серверов. Для управления этим процессом можно использовать ротацию логов. Есть много вариантов, как организовать ротацию логов и множество сторонних инструментов для этого. А так как мы рассматриваем стандартную конфигурацию Apache, будем использовать простую схему ротации логов. Этот метод использует простой shell-скрипт для перемещения текущего веб-лога в архивный лог, сжатия архивного лога и хранения архивов за 12 месяцев. После этого производится перезапуск Apache с паузой для переключения лог-файлов.
20.Стандарты взаимодействия прикладного программного обеспечения с сервером. Статические, динамические web-узлы. Общая спецификация обмена данными (Common Gateway Interface, Fast Common Gateway Interface). WWW сервер - это такая часть глобальной или внутрикорпоративной сети, которая дает возможность пользователям сети получать доступ к гипертекстовым документам, расположенным на данном сервере. Для взаимодействия с WWW сервером пользователь сети должен использовать специализированное программное обеспечение - браузер (от англ. browser), другое название - программа просмотра. Схема работы Пользователь сети запускает браузером, в функции которого входит Установление связи с сервером Получение требуемого документа Отображение полученного документа WWW сервер ищет запрашиваемый документ и возвращает результаты браузеру Адрес документа указывается в виде специальной строки, называемой URL. Для протокола HTTP, используемого при взаимодействии WWW клиента и WWW сервера, URL состоит из следующих компонент: Наименование протокола, по которому работает сервер (http). Имя машины - сервера в Internet или ее IP - номер. Порт TCP, обращение к которому обрабатывает сервер. Место (путь) документа на машине - сервере. Из общей схемы работы видно, что функции WWW сервера заключаются в следующем: Установление соединения с клиентским ПО по протоколу tcp. Принятие запроса на документ по протоколу http. Возврат результатов запроса по протоколу http. В общем случае, Web - сервером будем называть программно - аппаратный комплекс, предназначенный для выполнения вышеперечисленных действий. Сервер как правило возвращает HTML-документ (текстовый файл содержащий элементы разметки, скриптовые сценарии, внедренные объекты, элементы мультимедиа). HTML – исключительно язык разметки гипертекста, он не является языком программирования. Статические Web-страницы создаются вручную, сохраняются на Web-сервере и загружаются на сайт. Статические страницы создаются при помощи простейших языков html и CSS. Довольно часто используются Java-скрипты. Чаще всего это главные страницы сайтов или маленькие сайты с ограниченным объемом информации. В сущности, это и не языки программирования, а способ разметки текста: шрифт, фон, колонки. Скрипты – это уже маленькие программы, которые выполняются при наведении мыши на определенный объект (выпадающее меню, к примеру). Все эти языки понимает браузер компьютера, они не требуют никакого специального программного обеспечения. Но и возможности их невелики. Динамические Web-страницы генерируются сервером всякий раз при получении запроса от клиента. Могут быть наполнены информацией из БД, других внешних источников? Страницы могут быть персонализированы. Как правило документы создаются с использованием программ на языках высокого уровня. Схема работы таких языков проста. На веб-сервере размещаются базы данных, там же – программы (сценарии или скрипты) для обработки этих данных по запросам пользователей. Запрос с компьютера передается на сервер, где данные обрабатываются соответствующей программой. В результате формируется веб-страница, которая передается обратно на компьютер пользователя. Все это осуществляется с помощью протокола CGI - Common Gateway Interface (что по-русски звучит как "общий шлюзовый интерфейс"). CGI - это набор правил, по которым сервер передает запрос программе. CGI (Common Gateway Interface) — протокол, механизм, или формальное соглашение между Web-сервером и отдельной программой. Сервер кодирует входные данные, например HTML-формы, а программа CGI декодирует их и генерирует поток выходных данных. Усовершенствованный вариант - FastCGI (mod_fastcgi). В начале своей работы Web-сервер активирует CGI-программу и оставляет эту программу и несколько ее копий работающими в фоновом режиме. Любые запросы к программе будут просто переданы уже активным копиям, что избавит сервер от дополнительной нагрузки, связанной с повторной активацией процесса. 21.Технология PHP. Общие концепции, переменные, структуры данных, управляющие конструкции. PHP – язык разработки для Интренет. Разработан независимым разработчиком Расмусом Ледорфом. Полная информация о языке и синтаксисе на сайте www.php.net/. PHP можно установить в двух вариантах: как отдельный интерпретатор, работающий через интерфейс CGI, или как модуль веб-сервера, встроенный в сам сервер. В последнем случае становятся актуальными все преимущества PHP. Программа на языке PHP, как правило, не живет сама по себе, а применяется для обработки запросов пользователя. Даже если интерпретатор PHP встроен в сервер как модуль, с точки зрения самой пользовательской программы, она работает через CGI. Ближайшим аналогом PHP является ASP, но технология ASP не реализована в среде Unix/Apache, где PHP постепенно завоевывает лидирующие позиции. PHP является процедурным языком, его можно разделить на собственно язык и библиотеку функций. Существует большое количество инструментальных средств, библиотек для PHP, интерфейсы ко всем популярным СУБД, почтовым протоколам, к разделяемой памяти, графическим файлам, архивам и множество других инструментов. Основы языка PHP Скрипт на PHP представляет собой файл, как правило, с суффиксом .phtml, .php3 или .php, который внутри выглядит как обычная страница на HTML. Отличие проявляется только в виде тега <?php ?>, содержащего скриптовые программы. Часто применяют сокращенную форму <? ?> или, для совместимости с визуальными средствами формирования страниц, <% %>. Внутри этих тегов располагается код на языке PHP. Вот тривиальный пример страницы: <? include('header.html' ?> <h1>Hello WEB!</h1> <? echo something?> <? include('footer.html') ?> Посетителю будет показан документ составленный из заголовка – файла header.html и завершения - footer.html, между ними будет просто включены в тот документ, что отдается сервером посетителю страницы. Таким образом можно отделить оформление страницы от ее наполнения. Текст скрипта выполняется сверху вниз и справа налево, последовательно. Эта последовательность может быть изменена операторами цикла и условными операторами. Для в стандартный выходной поток используются функции: echo something; print(something) Переменные Переменные в PHP отличаются наличием символа $ (доллар) перед именем самой переменной. Объявлять переменные не надо, они создаются автоматически при присвоении им значения и удаляются при выходе из области действия. Переменные бывают типа строка, число, массив и объект: int (integer) real, double, float string object array Эти ключевые слова используются для приведения типа Тип переменной определяется в момент присваивания и может быть изменен другим присваиванием. Интерпретатор сам производит приведение типов и это может вызывать некоторые неясности (например при сравнении переменно типа число со строкой) Пример определения переменных: <? $b='6b'; // Строка $c=$b.$a; // Строка: '6b5' $d="$a$b"; // Строка: '56b' $e=$a+$b; // Число: 11
![]() |