text: PHP ( — «PHP: препроцессор гипертекста»; первоначально PHP/FI (Personal Home Page / Form Interpreter), а позже названный — «Инструменты для создания персональных веб-страниц») — C-подобный скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов. Язык и его интерпретатор (Zend Engine) разрабатываются группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL. Область применения В области веб-программирования, в частности, серверной части, PHP — один из популярных сценарных языков (наряду с JSP, Perl и языками, используемыми в ASP.NET). Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств и дополнительных модулей для разработки веб-приложений. Основные из них: Автоматическое извлечение POST- и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы; Взаимодействие с большим количеством различных систем управления базами данных через дополнительные модули (MySQL, MySQLi, SQLite, PostgreSQL, Oracle Database (OCI8), Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird и InterBase, Paradox File Access, MaxDB, интерфейс PDO, Redis); Автоматизированная отправка HTTP-заголовков; Работа с HTTP-авторизацией; Работа с cookies и сессиями; Работа с локальными и удалёнными файлами, сокетами; Обработка файлов, загружаемых на сервер; Работа с XForms. Создание и работа с API Создание приложение с графическим интерфейсом пользователя при использовании фреймворка Qt Designer Создание консольных приложений По состоянию на 2022 год используется сотнями тысяч разработчиков; согласно рейтингу корпорации TIOBE, базирующемуся на данных поисковых систем, в декабре 2022 года PHP находился на 10 месте по популярности среди языков программирования. Входит в LAMP — распространённый набор ПО для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP), а также LEMP - не менее распространённый набор ПО (Linux, Nginx, MySql, PHP). Среди сайтов, использующих PHP — Facebook, Wikipedia, Yahoo!, Baidu. Дополнительные возможности Язык автоматически поддерживает HTTP Cookies в соответствии со стандартами Netscape. Это позволяет проводить установку и чтение небольших сегментов данных на стороне клиента. Работа с Cookies организована посредством сеансов (сессий). У сессий есть срок действия (после его истечения данные удаляются), в сессиях можно хранить и редактировать разные типы данных, в том числе сериализованные — пропущенные через serialize (процесс происходит автоматически), PHP-объекты. Создание GUI-приложений PHP не ориентирован на создание десктопных приложений, но есть потребность в создании интерфейсов для настройки серверов, беспрерывного выполнения, отладки скриптов (сценариев), управления локальными и тестовыми серверами, и т. п. Из-за этого и возникли решения данной проблемы. Расширения Основное использование расширений — надстройки библиотек интерфейсов пользователя (UI-библиотек). Расширения условно делятся на три группы: расширения PHP: WxPHP (Windows, Linux, macOS), Winbinder (Windows); обёртки, использующие системные функции средствами интерфейса внешних функций: Win32Std, Tk; обёртки для использования интерфейса командной строки: PHP-UI, PHP-XCB. Разработаны расширения, такие, как двусторонняя обёртка для использования других языков при написании расширений PHP, и наоборот. Например, PSV Component Library, — проект, состоящий из трёх подпроектов: PHP4Delphi реализует соединения PHP с программами, написанными на Delphi средствами WinAPI; разрабатывался с 1999 года, но не обновлялся с 2009 года, из-за чего появились ответвления; PHP extensions development framework — средство создания расширений PHP, VCL-компоненты — неотъемлемая часть PHP4Delphi, базовые компоненты которой нужны для создания приложений; php4 Applications — расширение для использования PHP в других языках, базирующееся на PHP4Delphi, дающее доступ к макросам и упрощающее использование PHP, избавляя от создания обёртки. Среды разработки (IDE) Есть место и полноценным средам разработки для GUI PHP: Dev PHP Первопроходцем в этой категории является студия Dev PHP-IDE, которая использовала Kylix (Delphi) в качестве основы интерфейса и php-cli для создания пользовательских программ. Она включала в себя редактор кода, несколько инструментов и визуальный просмотр HTML-страниц. Впервые была представлена в 2002 году, сейчас имеет 3 стабильные версии, но разработка не продолжается — остановилась из-за гибели главного разработчика в автокатастрофе. CodeGear Rad Studio (Расширение) После DevPHP IDE появилось расширение — набор компонентов для CodeGear Rad Studio 2009 на базе php4delphi с некоторыми улучшениями (веб-элементы, инспектор, отладчик), поддержка её длилась в течение четырёх версий, вторая из которых вошла в платное расширение Rad Studio 2010: была возможность использовать скрипты, задавать стиль веб-компонентам, просматривать стили и веб-страницы до сборки программы, запускать локальный сервер, собирать программу, как отдельное приложение и отлаживать код. С выходом Delphi XE расширение получило название RADPHP Xe. Далее сама студия стала называться Embarcadero Delphi, и работа над данным расширением была приостановлена на неопределённый срок. DevelStudio (RAD) В 2009 году на базе php4delphi началась разработка среды для создания графических PHP-приложений, к разработке которой позже присоединился Ростислав Романов. Среда получила название PHP DevelStudio, первой опубликованной версией стала 0.1.7. DevelStudio имела небольшое количество компонентов в наборе инструментов и работала на устаревшем PHP 4. Во второй версии DevelStudio получила поддержку PHP 5. Были добавлены потоки, произведены множественные изменения и улучшения. Код сборки программ стал закрытым, предыдущие версии программы и сообщения на форуме были удалены с целью воспрепятствования злоумышленникам. Вторая версия DevelStudio так же получила набор компонентов AlphaControls, вследствие чего её стали использовать для создания вредоносных программ в силу её простоты и понятности. Популярные на то время антивирусы (MacAffee, AVG, Avira) стали распознавать любые скомпилированные в DevelStudio программы как вирусы. Через некоторое время автор AlphaControls обратился с жалобой к разработчикам DevelStudio, и набор компонентов был полностью удалён из среды, однако сохранился в уже существовавшей версии, удалить которую с форума в этот раз не представлялось возможным. На момент 2012 года вышла последняя версия среды — 3.0.2, где появился новый набор компонентов, в том числе браузер Chromium вместо IE, что привлекло внимание веб-разработчиков и пользователей среды «Алгоритм». На тот момент компиляция программ в «Алгоритме» была платной, поэтому DevelStudio как новая и бесплатная среда разработки переманила на себя бо́льшую часть аудитории. В 2014 году начались первые попытки по восстановлению среды, в этот раз со стороны сообщества. В конце 2018 года исходный код был восстановлен и доступен в GitHub. В 2019 году сообщество обратилось к создателю DevelStudio с целью изменения политики распространения среды, вследствие чего она стала доступной для обновления и редактирования. Из-за жалоб на отсутствие ссылок на использованные библиотеки (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) форум был удалён, а одна из страниц с описанием среды была перенаправлена на главную страницу сайта. С этого момента DevelStudio официально принадлежит сообществу. DevelNext (DN) Параллельно с этим главный разработчик DevelStudio начал создавать «реинкарнацию» предыдущей среды. Он взял за основу графическую библиотеку JavaFX, в результате вышла полностью новая среда, с поддержкой CSS, но без полной поддержки библиотеки Zend PHP — проект был основан на собственном языке jPHP. Его особенностью является, работа на JVM, JIT-компилятор, поддержка юникода, многопоточность и объектно-ориентированная стандартная библиотека. В 16-й версии среда DevelNext получила поддержку php 7, а параллельно с этим jPHP был расширен энтузиастом для разработки под ОС Android. На данный момент автор и энтузиасты трудятся над 2020 версией (ранее 17-я). PHPQt В 2015 году Александр Казанцев начал изучать алгоритмы разработки интерфейсов и создал расширение php_qml, что давало возможность использовать виджеты из библиотеки QT, но работало оно только под Windows. С этого началась разработка PHPQt, первые версии не обратили особого внимания со стороны веб-разработчиков, поэтому автор начал углублённо улучшать расширение. 28 июля 2015 года был опубликован первый вариант компилятора проектов, на тот момент это был простой исполнитель скриптов(сценариев), который прикреплял php-код к стабу (подобно DevelStudio), и имел зависимость от Windows API, на этой стадии поддерживались уже почти все виджеты и многопоточность, была лёгкая оптимизация php-кода. С этого момента движок стали называть PQEngine, 3 августа 2016 года вышла пятая версия компилятора приложений (PqBuilder), что перешёл на базу PlastiQ и имел поддержку уже новейшего, на тот момент, php 7, проекты получили более полноценный компилятор и уже не требовали наличия PqEngine.dll вблизи с исполняемым файлом, вместо этого визуальные библиотеки стали добавляться динамично — как файлы, а не вшиваться в PQEngine.dll. Такой шаг был предпринят для совместимости с другими системами и оригинальными библиотеками Qt. С появлением шестой версии проект стал дополнением для среды Qt Creator, а компилятор стал всего-навсего оптимизатором кода перед конечной сборкой программы. Появился полноценный редактор интерфейса, подсказки в редакторе кода и начала создаваться документация. С этого момента сделали анонс про создание среды PqStudio, но её разработка не зашла далеко. WinForms PHP В 2018 году появился проект, объединяющий возможности Windows Forms (.NET Framework) и PHP 7. Его разработка медленными темпами ведётся и сейчас. На текущий момент в движке доступны практически все функции для ООП. Среда находится на стадии приватной разработки. К исполняемому файлу по умолчанию прилагается php7ts.dll. Подключение PHP к проекту Также существуют расширения и для противоположного применения — подключения PHP к проекту на другом языке программирования: Phalanger (C#, php с 5.4 по 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++, php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6) История В 1994 году датский программист Расмус Лердорф разработал на C набор CGI-скриптов для учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page Tools (Инструменты для личной домашней страницы). Вскоре функциональности перестало хватать, и Лердорф разработал новый интерпретатор шаблонов PHP/FI ( — «персональная домашняя страница / интерпретатор форм»). 8 июня 1995 года вышел Personal Home Page (PHP Tools) version 1.0 — первый публичный релиз. В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C — PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира. Версия PHP 3.0 подверглась значительной переработке, определившей современный облик и стиль языка программирования. В 1997 году два израильских программиста, Энди Гутманс и Зеев Сураски, полностью переписали код интерпретатора. PHP 3.0 был официально выпущен в июне 1998 года. Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра дополнительными модулями. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Большое количество разработчиков привело к быстрому развитию языка и стремительному росту его популярности. С этой версии акроним php расшифровывается как «PHP: hypertext Preprocessor», вместо устаревшего «Personal Home Page». К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зеев Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Новый движок, названный Zend Engine, успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций. Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0. Шестая версия PHP разрабатывалась с октября 2006 года. Было сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini. Одним из основных новшеств должна была стать поддержка Юникода. Однако в марте 2010 года разработка PHP6 была признана бесперспективной из-за сложностей с поддержкой Юникода. Исходный код PHP6 перемещён на ветвь, а основной линией разработки стала версия 5.4. PHP 7 В 2014 году было проведено голосование, по результатам которого следующая версия получила название PHP 7. Выход новой версии планировался в середине октября 2015 года. В марте 2015 года Zend представили инфографику, в которой описаны основные нововведения PHP 7. 3 декабря 2015 года было объявлено о выходе PHP версии 7.0.0. Новая версия основывается на экспериментальной ветви PHP, которая изначально называлась phpng ( «следующее поколение»), и разрабатывалась с упором на увеличение производительности и уменьшение потребления памяти. В новой версии добавлена возможность указывать тип возвращаемых из функции данных, добавлен контроль передаваемых типов для данных, а также новые операторы. 13 июня 2019 вышла версия PHP 7.4. В ядро были добавлены типизированные свойства и стрелочные функции, а также ограниченная ковариантность возвращаемого типа и контравариантность типа аргумента. PHP 8 PHP версии 8.0 была выпущена 26 ноября 2020-го. Главными нововведениями стали: поддержка union-типов, JIT-компиляция и атрибуты (также известны как аннотации), также «конструкция» switch была заменена на «выражение» match и был добавлен новый оператор Nullsafe. 9 июля 2020 года Дэйл Хирт (), менеджер проекта PHP в Microsoft, в рассылке php.internals выпустил сообщение о том, что после выпуска версии PHP 8.0 Microsoft прекратит поддержку разработки этого языка программирования для Windows. Специалисты Microsoft занимались компиляцией бинарных версий интерпретатора для ОС Windows и тестированием их безопасности. В сообществе разработчиков PHP сообщили, что примут все необходимые меры, чтобы найти в ближайшее время альтернативный вариант для организации поддержки PHP 8.0 и выше для Windows, например, своими силами. Синтаксис Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl. Лексический анализ PHP осуществляется посредством утилиты re2c, утилита генерирует быстрые и легко встраиваемые лексеры. Для написания простейшего скрипта не требуется описывать какие-либо переменные, используемые модули и т. п. Любой скрипт может начинаться непосредственно с оператора <?php, а заканчиваться оператором ?>. Закрывающий оператор не обязателен и его рекомендуется опускать, чтобы избежать проблем с отправкой лишних символов в поток вывода после выполнения основного кода. Простейшая программа Hello world на PHP выглядит следующим образом: <?php echo 'Hello, world!'; Также возможен более короткий вариант вывода строки: <?='Hello, world!'?> Открывающий тег вида <?= используется для сокращённой записи конструкций, используемых для вывода строки. Стоит обратить внимание, что хоть <?= и является сокращённой формой <?php echo, однако не является «сокращённым тегом» (таким как <?). Сокращённые теги были помечены устаревшими и их использование крайне не рекомендуется, в отличие от <?=, использование которого не будет вызывать проблем с совместимостью и переносимостью кода. PHP исполняет код, находящийся внутри ограничителей, таких как <?php ?>. Всё, что находится вне ограничителей, выводится без изменений. В основном это используется для вставки PHP-кода в HTML-документ, например, так: <html> <head> <title> Тестируем PHP </title> </head> <body> <?php echo 'Привет, мир!'; ?> </body> </html> До версии 7.0 допускалось использование ограничителей языка программирования ASP <% %> и . Работа сокращённых конструкций определяется в конфигурационном файле php.ini. Имена переменных начинаются с символа $, тип переменной объявлять не нужно. Имена переменных и констант чувствительны к регистру символов. Имена классов, методов классов и функций к регистру символов не чувствительны. Переменные обрабатываются в строках, заключённых в двойные кавычки, и heredoc-строках (строках, созданных при помощи оператора <<<). Переменные в строках, заключённых в одинарные кавычки и nowdoc не обрабатываются. Инструкции разделяются с помощью точки с запятой (;), за исключением некоторых случаев, после объявления конструкции if/else и циклов. Переменные в функцию можно передавать как по значению, так и по ссылке (используется знак &). PHP поддерживает три типа комментариев: в стиле языка Си (ограниченные /* */), C++ (начинающиеся с // и идущие до конца строки) и оболочки UNIX (с # до конца строки). Типы данных PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных, равно как и самого объявления переменных. К скалярным типам данных относятся: целочисленный тип (int) число с плавающей точкой (float) логический тип (bool) строковый тип (string) К нескалярным типам относятся: массив (array) объект (object) внешний ресурс (resource) неопределённое значение (null) Диапазон целых чисел (int) в PHP зависит от платформы (для 32-битной архитектуры диапазон числа не превышает 32 бита, то есть, от −2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. Диапазон вещественных чисел (float) также зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7×10−308 до ±1.7×10+308). PHP предоставляет разработчикам логический тип (bool), способный принимать только два значения true («истина») и false («ложь»). При преобразовании в логический тип число 0, пустая строка, ноль в строке «0», null и пустой массив считаются равными false. Все остальные значения автоматически преобразуются в true. Специальный тип null предназначен для переменных без определённого значения. Единственным значением данного типа является литерал null. Тип null принимают неинициализированные переменные, переменные инициализированные константой null, а также переменные, удалённые при помощи конструкции unset(). Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п. По мере развития языка стандартная библиотека постепенно дорабатывается и ресурсы заменяются объектами. Таким образом планируется полностью избавиться от этого типа. Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, на самом деле это, скорее всего, упорядоченный хеш. Возможно неожиданное поведение при использовании цикла for со счётчиком вместо foreach. Так, например, при сортировке массива с численными индексами функциями из стандартной библиотеки, сортируются и ключи тоже. Типизация Язык допускает типизацию аргументов, возвращаемых значений функций и методов классов, а также, начиная с версии 7.4 типизацию полей классов. Включение строгого режима отключает неявные преобразования типов в данных участках кода, что приближает поведение языка к языкам со строгой типизацией. Типы int, string, float, bool, array, object и некоторые другие являются допустимыми определениями типа аргумента, поля класса или возвращаемого значения. Также допускается использовать имена классов, либо интерфейсов для определения конкретной реализации. Использованиеresource для определения типа не допускается. Современный PHP реализует базовую поддержку алгебраических типов данных и позволяет использовать как конъюнкцию, так и дизъюнкцию при определении типа. Язык не позволяет использовать псевдонимы типов, однако предоставляет несколько встроенных реализаций, которые в рамках PHP именуются «псевдотипами». Подобный термин в языке применяется к любому определению типа, который не является самостоятельным, применимым к значению, а реализован лишь как инструкция проверки типа в Zend VM (иногда применяется устоявшийся англицизм «тайп-хинт»). // Для функции определён «псевдотип» mixed function example(): mixed { return 42; } $result = example(); var_dump($result); // int(42) // Однако фактический тип у переменной $result — это int К «псевдотипам» относятся: mixed любой тип iterable (array или любой объект, реализующий интерфейс итератора). callable (анонимная функция, string или массив) void возвращаемый тип, означающий отсутствие возврата из функции never возвращаемый тип, означающий прерывание работы приложения self тип, требующий соответствие классу в рамках которого данный тип был определён. parent тип, требующий соответствие родительскому классу. static возвращаемый тип, требующий соответствие классу любого потомка. false и true типы (часть bool). Помимо проверок на соответствие типам встроенные «псевдотипы» могут реализовывать дополнительную логику проверок. Например, callable должен соответствовать (одному из): анонимной функции; строкой, которая должна содержать имя функции; массивом где нулевой и первый элемент — строки (интерпретируется как название статической функции класса); массивом где нулевой элемент — объект, а первый — строка (интерпретируется как метод у объекта). Функции PHP поддерживает как объявление именованных функций, так и анонимных функций первого класса, например:// Объявление именованной функции function get_hello_world(): string { return 'Hello World!'; } // Объявление анонимной функции $getHelloWorld = function(): string { return 'Hello World!'; }; // Короткий синтаксис $getHelloWorld = fn(): string => 'Hello World!';Стоит обратить внимание, что в случае анонимных функций различие состоит не только в визуальных отличиях, но и в способе захвата переменных внешнего контекста. Любая «короткая» форма записи является замыканием, в то же время длинная запись для реализации замыкания требует явного указания переменных внутри оператора use из внешнего контекста для их захвата:$variable = 'Hello World!'; // Использование оператора use function() use ($variable): string { return $variable; }; // Альтернативный вариант, используя короткий синтаксис fn(): string => $variable; Обращение к переменным и функциям Обращение к переменным осуществляется с помощью символа $, за которым следует имя переменной. Данная конструкция может быть применена также для создания динамических переменных и функций. Например: $a = 'I am a'; // Запись значения в переменную $a echo $a; // Вывод переменной $а $b = 'a'; echo $$b; // Вывод переменной $а (дополнительный $ перед переменной $b) echo ${'a'}; // Вывод переменной $a function_name(); // Вызов функции function_name $c = 'function_name'; $c(); //Вызов функции function_name $d = 'ClassName'; $obj = new ClassName(); // Создание объекта класса ClassName $obj = new $d(); // Создание объекта класса ClassName $obj->b; // Обращение к свойству b объекта $obj->c(); // Вызов метода c() объекта $obj->$b; // Обращение к свойству "a" объекта, так как $b = 'a' $obj->$c(); // Вызов метода function_name() объекта, так как $c = 'function_name' В PHP echo и print хоть и выглядят похоже на функции, однако первое является оператором, а второе выражением (то есть print возвращает значение, в отличие от echo). При их использовании можно опустить скобки. $array = [1, 2, 3]; array_walk($array, fn (int $value) => print $value); // Напечатает: 123 array_walk($array, fn (int $value) => echo $value); // Ошибка: Syntax error, unexpected token "echo" // Так как тело коротких анонимных функций допускает только выражения. Суперглобальные массивы Суперглобальными массивами () в PHP называются предопределённые массивы, имеющие глобальную область видимости без использования директивы global. Большая часть этих массивов содержит входные данные запроса пользователя (параметры GET-запроса, поля форм при посылке методом POST, куки и т. п.). Все суперглобальные массивы, кроме $GLOBALS и $_REQUEST, имеют устаревшие аналоги с длинными именами, которые доступны вплоть до версии 5.3. х (начиная с 5.4.0 были удалены). Таким образом, обращения $_GET['year'] и $HTTP_GET_VARS['year'] идентичны (за исключением области видимости: массивы с «длинными» именами не являются суперглобальными). $GLOBALS Массив всех глобальных переменных (в том числе и пользовательских). $_SERVER (аналог для устаревшего — $HTTP_SERVER_VARS) Содержит переменные окружения, которые операционная система передаёт серверу. $_ENV (уст. $HTTP_ENV_VARS) Текущие переменные среды (). Их набор специфичен для платформы, на которой выполняется скрипт. $_GET (уст. $HTTP_GET_VARS) Содержит параметры GET-запроса, переданные в URI после знака вопроса «?». $_POST (уст. $HTTP_POST_VARS) Ассоциативный массив значений полей HTML-формы при отправке методом POST. Индексы элементов соответствуют значению свойства name объектов (кнопки, формы, радиокнопки, флажки и т. д.) HTML-формы. $_FILES (уст. $HTTP_POST_FILES) Ассоциативный массив со сведениями об отправленных методом POST файлах. Каждый элемент имеет индекс, идентичный значению атрибута «name» в форме, и, в свою очередь, также является массивом со следующими элементами: ['name'] — исходное имя файла на компьютере пользователя. ['type'] — указанный агентом пользователя MIME-тип файла. PHP не проверяет его, и поэтому нет никаких гарантий, что указанный тип соответствует действительности. ['size'] — размер файла в байтах. ['tmp_name'] — полный путь к файлу во временной папке. Файл необходимо переместить оттуда функцией move_uploaded_file. Загруженные файлы из временной папки PHP удаляет самостоятельно. ['error'] — код ошибки. Если файл удачно загрузился, то этот элемент будет равен 0 (UPLOAD_ERR_OK). $_COOKIE (уст. $HTTP_COOKIE_VARS) Ассоциативный массив с переданными агентом пользователя значениями куки. $_REQUEST Содержит элементы из массивов $_GET, $_POST, $_COOKIE. С версии PHP 4.1 включает $_FILES. $_SESSION (уст. $HTTP_SESSION_VARS) Содержит данные сессии. Объектно-ориентированное программирование Ключевое слово class было зарезервировано ещё в третьей версии языка. В четвёртой версии стало возможно создавать классы и объекты на их основе. Однако принципы ООП поддерживались лишь частично, так например, все члены (переменные и методы) были открыты. К тому же создание объектов было дорогой операцией и работало медленно. Начиная с пятой версии PHP обладает полной поддержкой ООП. Работа с классами была оптимизирована и теперь такой код работает достаточно быстро. Класс в PHP объявляется с помощью ключевого слова class. Методы и свойства класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, полиморфизм подтипов и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent. Начиная с версии 5.4.0 множественное наследование может быть реализовано с помощью механизма особенностей (). Особенности похожи на примеси (), за исключением того что для них нельзя напрямую создать экземпляр. Повторное использование кода заключено в использовании кода особенности в нескольких классах. Допускается использовать в одном классе несколько особенностей. Механизм особенностей имеет средства разрешения конфликтов имён. При запуске программы код особенности будет «вкомпилирован» в код содержащего его класса. Классы в PHP имеют ряд «магических» методов (), начинающихся с двух символов подчёркивания — конструктор (__construct(), в версиях до 5.0 конструктором служил метод, одноимённый с классом) и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) и развёртывания (__wakeup()), клонирования (__clone()) и др. Эти методы являются достаточно гибким инструментом: переопределяя их, можно добиться существенного изменения поведения объекта. Все функции-члены реализованы виртуальными и потому все они являются методами. Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием оператора ->. Для доступа к членам класса из его методов используется переменная $this. class C1 extends C2 implements I1, I2 { private int $a; protected int $b; public function __construct(int $a, int $b) { parent::__construct($a, $b); $this->a = $a; $this->b = $b; } public function plus(): int { return $this->a + $this->b; } /* ............... */ } $d = new C1(1, 2); echo $d->plus(); // 3 Начиная с пятой версии PHP объекты передаются по указателю: class A { public string $color = 'red'; } $a = new A(); echo $a->color; // red $b = $a; $b->color = 'blue'; echo $a->color; // blue Иногда также можно встретить упоминание, что объекты передаются по ссылке, однако это не так. Так как в PHP отсутствует понятие «указателя», то может применяться терминология «передачи по ссылке» в контексте передачи объектов в качестве аргументов функций или методов из-за схожести поведения. Отличия между передачей объектов по ссылке и по указателю выглядят следующим образом: class A {} function by_pointer(A $object): void { $object = 42; } function by_reference(A &$object): void { $object = 42; } $object = new A(); // Передача по указателю by_pointer($object); var_dump($object); // object(A) {} // Передача по ссылке by_reference($object); var_dump($object); // int(42) «Paamayim Nekudotayim» (иврит: פעמיים נקודתיים) или просто «двойное двоеточие». Используя эту лексему, программист может обращаться к константам, статическим или перегруженным свойствам или методам класса. При обращении к этим элементам извне класса программист должен использовать имя этого класса. «Paamayim Nekudotayim» на первый взгляд может показаться странным словосочетанием для обозначения двойного двоеточия. Однако во время создания Zend Engine версии 0.5 (который входил в PHP3), Andi и Zeev выбрали именно это обозначение. «Paamayim Nekudotayim» действительно значит «двойное двоеточие» (дословно: «два раза двоеточие») на иврите. Это обозначение не менялось ни разу в течение всего времени разработки PHP. class MyClass { public const CONST_VALUE = 'Значение константы'; } // Использование :: вне объявления класса echo MyClass::CONST_VALUE; Особенности интерпретатора PHP-скрипты обычно обрабатываются интерпретатором в порядке, обеспечивающем кроссплатформенность разработанного приложения: лексический анализ исходного кода и генерация лексем, синтаксический анализ полученных лексем, генерация опкода для виртуальной машины (разновидность байт-кода), оптимизация (например DCE), выполнение опкода интерпретатором (без создания исполняемого файла), либо JIT-компиляция результата с последующим выполнением (для включения JIT требуется специальный флаг в настройках интерпретатора). Раньше, для увеличения быстродействия приложений было возможно использование специального программного обеспечения, так называемых акселераторов. Принцип их работы заключается в кэшировании однажды сгенерированного байт-кода в памяти и/или на диске, таким образом, из процесса работы приложения исключаются этапы 1—3, что в общем случае ведёт к значительному ускорению работы. Начиная с версии 5.5 одна из разновидностей акселераторов, opcache, была встроена в ядро, поэтому сторонние решения больше не пользуются популярностью. Важной особенностью является то, что разработчику нет необходимости заботиться о распределении и освобождении памяти. Ядро PHP реализует средства для автоматического управления памятью; вся выделенная память возвращается системе после завершения работы скрипта. Расширения Интерпретатор состоит из ядра и подключаемых модулей, «расширений», представляющих собой динамические библиотеки. Расширения позволяют дополнить базовые возможности языка, предоставляя возможности для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и тому подобным. Любой желающий может разработать своё собственное расширение и подключить его. Существует огромное количество расширений, как стандартных, так и созданных сторонними компаниями и энтузиастами, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Множество расширений доступно в репозитории PECL. Начиная с версии 7.4.0 в PHP была добавлена поддержка интерфейса внешних функций (FFI), что в значительной степени упростило взаимодействие с библиотеками, написанными на любом другом языке (включая API, предоставляемое операционной системой). Этот новый функционал, в свою очередь, предоставил альтернативу написанию расширений. Таким образом, используя FFI можно писать код на языке PHP и взаимодействовать с любыми библиотеками в системе, которые предоставляют cdecl, fastcall или stdcall ABI. Параметры настройки Интерпретатор PHP имеет специальный конфигурационный файл — php.ini, содержащий множество настроек, изменение которых влияет на поведение интерпретатора. Имеется возможность отключить использование ряда функций, изменить ограничения на используемую скриптом оперативную память, время выполнения, объём загружаемых файлов, настроить журналирование ошибок, работу с сессиями и почтовыми сервисами, подключить дополнительные расширения, а также многое другое. Возможно дробление большого конфигурационного файла на части. Например, широко распространена практика вынесения настроек расширений в отдельные файлы. Параметры интерпретатора могут быть переопределены в файлах конфигурации HTTP-сервера (например, .htaccess в Apache) или в самом скрипте во время выполнения при помощи команды ini_set. Режимы запуска интерпретатора (SAPI) SAPI — это внешний уровень абстракции, предназначенный для встраивания интерпретатора в другие приложения и отвечает за его работу (запуск, остановка, передача скриптов на исполнение, доступ к внешним данным). Существует несколько основных SAPI, определяющих способы запуска и использования PHP: В качестве модуля к веб-серверу (например, для Apache модуль mod_php). В этом случае интерпретатор PHP выполняется в окружении процесса веб-сервера. Веб-сервер управляет количеством запущенных процессов PHP и сообщает им, какие скрипты требуется исполнить. CGI SAPI. Использование CGI подразумевает запуск нового процесса для обработки каждого запроса. Для исполнения PHP-скрипта веб-сервер запускает ./php-cgi /path/to/script.php . Сам принцип такого использования подразумевает, что интерпретатор PHP исполняет только один скрипт, после чего заканчивает свою работу. Затраты на запуск процесса интерпретатора и его инициализацию очень часто сопоставимы или даже превышают затраты на исполнение PHP-скрипта. Для решения этой проблемы в CGI SAPI был введён режим FastCGI. В этом режиме PHP-интерпретатор запускается как независимый сервер, обрабатывающий входящие запросы на исполнение PHP-скриптов по протоколу FastCGI, что позволяет ему работать с любым веб-сервером, поддерживающим этот протокол. FPM SAPI, известный как php-fpm — это другая реализация протокола FastCGI. Создан изначально Андреем Нигматулиным как отдельный патч для использования в социальной сети Badoo. Данная реализация решала ряд проблем, которые мешали использованию CGI/FastCGI SAPI. В частности, появилась возможность перезапуска пула интерпретаторов PHP без потери запросов, запуск нескольких пулов под разными пользователями, аварийный перезапуск интерпретаторов в случае проблем с ними и ещё несколько приятных дополнений. В дальнейшем над патчем работали несколько человек, был добавлен режим динамического управления числом запущенных процессов PHP (по принципу управления числом процессов в веб-сервере Apache), и начиная с версии PHP 5.3.3 php-fpm был включён в PHP как отдельное SAPI. В качестве скрипта командной строки (CLI SAPI), являющегося исполняемым файлом, который вызывается пользователем из командной строки; скрипт выполняется в окружении вызвавшего пользователя. В этом случае возможно использование PHP для создания клиентских GUI-приложений и решения административных задач в операционных системах UNIX, Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако в таком качестве он не получил распространения, отдавая пальму первенства Perl, Python и VBScript. Начиная с версии PHP 5.4.0 в CLI SAPI появилась возможность запуска PHP как отдельного HTTP-сервера. Однако этот режим предназначен исключительно для разработки, так как запускает только один процесс интерпретатора и выполняет все запросы исключительно последовательно. Пасхальные яйца PHP имеет несколько пасхальных яиц (шуток). Передача специальных GET-параметров любому php-скрипту приводит к выводу различных изображений. Например: любой_сценарий.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 при вводе этого значения в адресную строку браузера можно увидеть различные изображения, в зависимости от версии интерпретатора: фотография Thies Arntzen (версии 4.1.2, 4.2.2) фотография таксы (владелец Stig Bakken) (версии 4.3.2, 4.3.3, 4.3.8 — 4.3.10) фотография чёрного терьера (владелец Zeev Suraski) (версии 4.3.11, 4.4.0 — 4.4.4, 5.1.0, 5.1.2) фотография кролика (версии 4.3.1, 5.0.0, 5.0.3) искажённый логотип PHP (версии 5.1.3 — 5.2.13) фотография игрушечного синего слона с надписью PHP (начиная с версии 5.3.0) Следующие два значения позволят увидеть стандартный логотип PHP и ZEND, соответственно: любой_сценарий.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 любой_сценарий.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 Эти значения можно получить и непосредственно в PHP-скрипте с помощью функций php_logo_guid и zend_logo_guid для логотипа Zend. Также имеется специальное значение для отображения списка всех авторов PHP (4,5): любой_сценарий.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 Альтернативные реализации В силу популярности языка PHP и желания увеличить быстродействие основанных на нём веб-приложений создано несколько альтернативных компиляторов, близких к PHP-языку. Так в феврале 2010 года компания Facebook открыла свой компилятор PHP — HipHop (HPHP, Hyper-PHP) генерирующий код на C++, с последующей компиляцией в машинный код с помощью gcc. В июле 2013 года российская компания ВКонтакте анонсировала похожий продукт — KPHP. В таблице представлен список существующих на сегодняшний момент альтернативных реализаций. На сайте phpclasses.org доступен сравнительный анализ некоторых компиляторов. Лицензирование Экосистема Фреймворки Системы управления содержимым Язык PHP является самым популярным языком для разработки систем управления содержимым (Content management system, CMS). Средства для разработки PHP-приложений Стандартные рекомендации PHP Стандартные рекомендации PHP (, сокр. ) — это спецификация PHP, которая разрабатывается, принимается и публикуется группой авторитетных PHP проектов в том числе CakePHP, Composer, Joomla, PEAR, Phalcon, phpDocumentor, TYPO3, Yii framework. Спецификация служит стандартизацией концепций программирования на языке PHP и основана на реальном опыте, а также на исследованиях и экспериментах. Цель рекомендаций состоит в том, чтобы обеспечить совместимость компонентов веб-приложений разработанных разными разработчиками. Критика Сторонники языка PHP в качестве основных его преимуществ называют широкую распространённость, востребованность PHP-разработчиков на рынке труда и простоту изучения. К достоинствам языка относится и его достаточно быстрая эволюция. Отсутствие поддержки многобайтовых кодировок в ядре языка Поддержка строк с многобайтовыми кодировками (такими как UTF-8) реализуется через отдельные расширения mbstring и iconv, на уровне ядра поддержка отсутствует, однако с версии PHP 4.2.0 есть возможность переопределять стандартные функции работы со строками, подменяя их на аналоги из mbstring. Поддержка многобайтовых кодировок во всех строковых функциях стала доступна с версии 5.4.0 (март 2012 года). Отсутствие поддержки многопоточности В языке не предусмотрена возможность создания многопоточных приложений и отсутствует поддержка синхронизированного доступа к ресурсам, однако реализуема при помощи расширения PCNTL (от ), но оно не подходит для решения специфических задач. Хотя есть возможность установить расширение pthreads для «честных» потоков, но для этого интерпретатор должен быть скомпилирован с флагом thread safety, а само расширение признано устаревшим в пользу parallel (от того же автора). В качестве более современной альтернативы возможно использование расширения Swoole. См. также Стандартная библиотека PHP PHP-Qt PHP-GTK Акселератор PHP PHP-инъекция Selenium Регулярные выражения Примечания Литература Ссылки Официальный сайт PHP Руководство по PHP (включая FAQ) Книги по PHP (включая английскую литературу) Конференции PHP DesignPatternsPHP Блог, посвящённый PHP PHP-fig стандарты PSR Презентация о стандартах PSR Скриптовые языки Языки веб-программирования Свободные компиляторы и интерпретаторы Статьи с примерами кода PHP Гипертекст Высокоуровневые языки программирования Языки с динамической типизацией


source: wikipedia

text: POP3 ( — протокол почтового отделения, версия 3) — стандартный интернет-протокол прикладного уровня, используемый клиентами электронной почты для получения почты с удалённого сервера по TCP-соединению. POP и IMAP (Internet Message Access Protocol) — наиболее распространённые интернет-протоколы для извлечения почты. Практически все современные клиенты и серверы электронной почты поддерживают оба стандарта. Протокол POP был разработан в нескольких версиях, нынешним стандартом является третья версия (POP3). Большинство поставщиков услуг электронной почты (такие как Hotmail, Gmail и Yahoo! Mail) также поддерживает IMAP и POP3. Предыдущие версии протокола (POP, POP2) устарели. Альтернативным протоколом для сбора сообщений с почтового сервера является IMAP. Общие сведения POP поддерживает простые требования «загрузи-и-удали» для доступа к электронным почтовым ящикам. Хотя большая часть POP-клиентов предоставляет возможность оставить почту на сервере после загрузки, использующие POP клиенты обычно соединяются, извлекают все письма, сохраняют их на пользовательском компьютере как новые сообщения, удаляют их с сервера, после чего разъединяются. Другие протоколы, в частности IMAP, предоставляют более полный и комплексный удалённый доступ к типичным операциям с почтовым ящиком. Многие клиенты электронной почты поддерживают как POP, так и IMAP; однако, гораздо меньше интернет-провайдеров поддерживают IMAP. POP3-сервер прослушивает общеизвестный порт 110. Шифрование связи для POP3 запрашивается после запуска протокола с помощью либо команды STLS (если она поддерживается), либо POP3S, которая соединяется с сервером, используя TLS или SSL по TCP-порту 995. Доступные сообщения клиента фиксируются при открытии почтового ящика POP-сессией и определяются количеством сообщений для сессии или, по желанию, с помощью уникального идентификатора, присваиваемого сообщению POP-сервером. Этот уникальный идентификатор является постоянным и уникальным для почтового ящика и позволяет клиенту получить доступ к одному и тому же сообщению в разных POP-сессиях. Почта извлекается и помечается для удаления с помощью номера сообщения. При выходе клиента из сессии помеченные сообщения удаляются из почтового ящика. История POP (POP1) определён в RFC 918 (1984), POP2 в RFC 937 (1985). Первоначальная спецификация POP3 была представлена в RFC 1081 (1988). Нынешняя же описана в RFC 1939, обновлена механизмом расширения (RFC 2449) и механизмом аутентификации (RFC 1734). Версии POP2 был назначен порт 109. Изначальная спецификация POP3 поддерживала только незашифрованный механизм входа в систему USER/PASS или управление доступом .rhosts. На данный момент POP3 поддерживает различные методы аутентификации для предоставления разных уровней защиты от незаконного доступа к пользовательской почте. Большинство из них предоставлено механизмами расширения POP3. Клиенты POP3 поддерживают методы SASL через расширение AUTH. В рамках проекта Массачусетского технологического института «Афина» также был введён метод на основе Кербероса. RFC 1460 ввёл APOP в основной протокол. APOP — протокол вида «запрос/ответ», использующий функцию хеширования MD5. Среди клиентов, реализующих APOP, можно выделить Mozilla Thunderbird, Opera Mail, Eudora, Windows Live Mail, PowerMail, Apple Mail, и т. д. Было высказано неофициальное предложение для спецификации «POP4» с рабочей реализацией сервера. Это предложение добавило основные функции управления папками, поддержку составных сообщений, а также управление флагами сообщений. Однако, никакого прогресса «POP4» не наблюдается с 2003 г. Расширения Механизм расширений был предложен в RFC 2449 для размещения новых расширений, а также организованного объявления о поддержке опциональных команд, таких как TOP и UIDL. RFC не намеревались поощрять расширения и подтвердили, что роль POP3 заключается в предоставлении простой поддержки в основном для требования «загрузи-и-удали». Расширения выводятся списком командой CAPA. За исключением APOP, все опциональные команды были включены в изначальный набор возможностей. Как и в стандарте ESMTP (RFC 5321), возможности, начинающиеся с "X", являются локальными. STARTTLS Расширение STARTTLS позволяет использовать TLS (Transport Layer Security) или SSL (Secure Sockets Layer) для связи с помощью команды STLS, по стандартному POP3-порту. Некоторые клиенты и серверы используют метод альтернативного порта, работающий с TCP-портом 995 (POP3S). SDPS Британский провайдер Demon Internet ввёл расширение POP3, позволяющее иметь несколько учётных записей для каждого домена и ставшее известным как SDPS (Standard Dial-up POP3 Service). Для доступа к каждой учётной записи имя пользователя включает в себя имя хоста, например, john@hostname или john+hostname. Google Apps используют тот же метод. Сравнение с IMAP Клиенты, которые оставляют почту на серверах, обыкновенно используют команду UIDL для получения текущего соответствия между количеством сообщений и сообщением, определяемым его уникальным идентификатором. Идентификатор произволен и может повторяться, если на ящике есть идентичные сообщения. Напротив, IMAP использует 32-битный уникальный идентификатор (UID), присваиваемый сообщениям по возрастанию (но не обязательно подряд) по мере их получения. При извлечении новых сообщений IMAP-клиенты запрашивают UID больший, чем наивысшее значение UID среди всех ранее извлечённых сообщений, в то время как POP-клиент должен выбирать из всей карты UIDL. Для больших почтовых ящиков это может потребовать значительной обработки. MIME служит в качестве стандарта для вложений и не-ASCII текста в электронных сообщениях. Хотя ни POP3, ни SMTP не требуют MIME-отформатированного сообщения, по существу, все не-ASCII сообщения идут в формате MIME, поэтому POP-клиенты должны также «понимать» и использовать MIME. IMAP, по определению, принимает MIME-форматированные сообщения. Состояния сеанса В протоколе POP3 предусмотрено 3 состояния сеанса: Авторизация Клиент проходит процедуру Аутентификации. Транзакция Клиент получает информацию о состоянии почтового ящика, принимает и удаляет почту. Обновление Сервер удаляет выбранные письма и закрывает соединение. Команды протокола APOP Команда служит для передачи серверу имени пользователя и хэша пароля (digest). [имя] — строка, указывающая имя почтового ящика.[digest] — хеш-сумма временной метки, конкатенированной с паролем пользователя, вычисленная по алгоритму MD5. В случае поддержки этой команды временная метка получается при соединении с сервером. USER Передаёт серверу имя пользователя. [имя] — строка, указывающая имя почтового ящика. PASS Передаёт серверу пароль почтового ящика. [пароль] — пароль для почтового ящика. DELE Сервер помечает указанное сообщение для удаления. Сообщения, помеченные на удаление, реально удаляются только после закрытия транзакции (закрытие транзакций происходит обычно после посыла команды QUIT, кроме этого, например, на серверах закрытие транзакций может происходить по истечении определённого времени, установленного сервером). [сообщение] — номер сообщения. LIST Если был передан аргумент, то сервер выдаёт информацию об указанном сообщении. Если аргумент не был передан, то сервер выдаёт информацию обо всех сообщениях, находящихся в почтовом ящике. Сообщения, помеченные для удаления, не перечисляются. [сообщение] — номер сообщения (необязательный аргумент). NOOP Сервер ничего не делает, всегда отвечает положительно. RETR сообщение Сервер передаёт сообщение с указанным номером. [сообщение] — номер сообщения. RSET Этой командой производится откат транзакций внутри сессии. Например, если пользователь случайно пометил на удаление какие-либо сообщения, он может убрать эти пометки, отправив эту команду. STAT Сервер возвращает количество сообщений в почтовом ящике и размер почтового ящика в октетах. Сообщения, помеченные как удалённые, при этом не учитываются. TOP Сервер возвращает заголовки указанного сообщения, пустую строку и указанное количество первых строк тела сообщения. [сообщение] — номер сообщения.[количество строк] — сколько строк нужно вывести. Пример сессии Это пример сессии с поддержкой зашифрованных паролей (APOP, RFC 1939): S: <Сервер ожидает входящие соединения на порту 110> C: <подключается к серверу> S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> C: APOP mrose c4c9334bac560ecc979e58001b3e22fb S: +OK mrose's maildrop has 2 messages (320 octets) C: STAT S: +OK 2 320 C: LIST S: +OK 2 messages (320 octets) S: 1 120 S: 2 200 S: . C: RETR 1 S: +OK 120 octets S: <сервер передаёт сообщение 1> S: . C: DELE 1 S: +OK message 1 deleted C: RETR 2 S: +OK 200 octets S: <сервер передаёт сообщение 2> S: . C: DELE 2 S: +OK message 2 deleted C: QUIT S: +OK dewey POP3 server signing off (maildrop empty) C: <закрывает соединение> S: <продолжает ждать входящие соединения> Вариант начала сессии, при котором пароль передается открытым текстом: C: USER mrose S +OK User accepted C: PASS mrosepassword S +OK Pass accepted Примечания Ссылки Описание протокола РОРЗ Список UNIX-демонов Протокол POP3 на примерах Ссылки на упоминавшиеся RFC RFC 918 — POST OFFICE PROTOCOL RFC 937 — POST OFFICE PROTOCOL — VERSION 2 RFC 1081 — Post Office Protocol — Version 3 RFC 1939 — Post Office Protocol — Version 3 (STD 53) RFC 1957 — Some Observations on Implementations of the Post Office Protocol (POP3) RFC 2195 — IMAP/POP AUTHorize Extension for Simple Challenge/Response RFC 2384 — POP URL Scheme RFC 2449 — POP3 Extension Mechanism RFC 2595 — Using TLS with IMAP, POP3 and ACAP RFC 3206 — The SYS and AUTH POP Response Codes RFC 5034 — The Post Office Protocol (POP3) Simple Authentication and Security Layer (SASL) Authentication Mechanism Литература Электронная почта Протоколы прикладного уровня


text: The SCO Group — американская компания, разрабатывающая системное и прикладное программное обеспечение. Ранее была известна как Caldera Systems и занималась разработкой и внедрением своего дистрибутива Linux. В 2000 компания купила у права на операционные системы UnixWare и OpenServer. Новое название компания получила в 2002 и на данный момент, несмотря на совпадающие аббревиатуры, не имеет никакого отношения к Santa Cruz Operation. Компания стала известной из‐за нескольких исков против корпораций, поддерживающих свободную операционную систему GNU/Linux, в незаконном использовании кода системы UNIX. Наиболее громким из них был процесс против IBM в 2003. SCO обвинила IBM в том, что она незаконно внесла в ядро Linux часть кода, принадлежащего SCO. 2007-08-11 стало известно, по постановлению суда Novell обладает правами (copyright) на UNIX и UnixWare, и претензии со стороны SCO безосновательны. Сайт представляет собой своеобразный центр противостояния SCO. Хотя ресурс существует уже давно, только в феврале 2007 года компания SCO попыталась вызвать его создателя в суд. 1 сентября 2007 было объявлено, что Сбербанк России выбрал продукцию этой компании в качестве обновления для своих серверов. Судебные иски против Linux Серия правовых и общественных споров между компанией-производителем программного обеспечения SCO Group (SCO) и пользователями и корпорациями, поддерживающими свободную операционную систему GNU/Linux. SCO Group утверждает, что лицензионное соглашение с IBM означает, что исходный код, который был написан IBM и включён в состав Linux, нарушает право SCO, установленное этим договором. Участники сообщества Linux не согласны с притязаниями SCO, а компании IBM, Novell и Red Hat подали встречные иски. В 2003 году SCO заключила выгодные сделки с Microsoft — основным конкурентом разработчиков GNU/Linux. 10 августа 2007 года федеральный окружной судья в противостоянии SCO против Novell вынес определение, что компания Novell, а не SCO Group, является полноправным владельцем прав (copyright), относящихся к операционной системе Unix. Суд также постановил, что «SCO, по требованию Novell, обязана отказаться от претензий к IBM и Sequent». После вынесения вердикта компания Novell объявила, что не заинтересована в судебных тяжбах на почве Unix, и подчеркнула: «Мы не считаем, что внутри Linux есть Unix» (We don’t believe there is Unix in Linux). Предпосылки В начале 2003 года компания SCO заявила, что имело место «ошибочное включение кода её системы UNIX System V в Linux». Однако компания отказалась указать конкретные участки кода, заявив, что доказательства будут представлены только суду. Было сказано, что такой код может быть найден в модулях SMP, RCU и некоторых других частях ядра Linux. Позднее компания объявила о подаче иска к компании IBM на 1 млрд долларов, утверждая, что компания IBM включила элементы, составляющие коммерческую тайну SCO, в Linux. Затем сумма претензий увеличилась до 3 млрд долларов, а затем и до 5 миллиардов. Эксперты замечают, что дело USL v. BSDi показало, что право (copyright) на Unix размытое, и не может служить основанием для возбуждения иска. На июль 2007 торговая марка UNIX не принадлежала SCO. Таким образом, претензии сводились только к нарушению коммерческой тайны, а после некоторого противостояния такое дело тяжело было развить дальше установления факта нарушения контракта компанией IBM, и, следовательно, в ответчиках оставалась только компания IBM. Компания SCO разыскивала более весомый повод для претензий к сообществу Linux, и явным образом исключила все претензии по поводу коммерческой тайны из иска. Банкротство по Chapter 11 15 сентября 2007 года SCO объявили себя временным банкротом в целях защиты от кредиторов. 14 февраля 2008 года SCO подала заявление на финансирование в размере 100 миллионов долларов США от Stephen Norris Capital Partners, чтобы выйти из банкротства и стать частной компанией. SNCP разработала для SCO новый бизнес‐план, предполагающий выпуск новых продуктов, и затрагивающий её судебное разбирательство. По вступлении в силу плана реорганизации должен был уволиться CEO Дарл Макбрайд. 9 марта 2009 года SCO Group направила апелляцию на решение суда, отклонившего все претензии SCO выдвинутые против компании Novell, связанные с интеллектуальными правами на Unix. Первые слушания по рассмотрению апелляции были намечены на 6 мая 2009 года. 24 августа 2009 года апелляционный суд аннулировал решение, согласно которому права на Unix и UnixWare принадлежат компании Novell. Как отметили судьи, то решение было ошибочным, и поэтому необходимо провести дополнительное расследование с целью установления истинного владельца прав на спорный программный код. 30 марта 2010 года окружной суд штата Юта вынес вердикт: Novell владеет авторскими правами на Unix. Активы SCO были выставлены на аукцион, который состоялся 25 октября 2010 года. Примечания Ссылки sco.com Groklaw Unix Производители программного обеспечения США


text: SMS (МФА: , сокращение от — «служба коротких сообщений») — технология приёма и передачи коротких текстовых сообщений с помощью мобильного телефона. Входит в стандарты сотовой связи. Технология SMS, как правило, доставляются в течение не более 10 секунд. Отправитель может получать уведомление о доставке сообщения. Можно отправить сообщение на выключенный или находящийся вне зоны действия сети телефон. Как только адресат появится в сети, он получит сообщение. Если отправитель получает уведомления о доставке, то таким образом можно зафиксировать момент появления в сети получателя. Можно отправить сообщение абоненту, который в данный момент занят разговором. С помощью расширенного варианта SMS, называемого EMS, можно отправлять и получать мелодии звонков, пиктограммы и многое другое. Подобная функция есть в телефонах Nokia, но такие изображения можно увидеть только на аппаратах этого же бренда. Особенность технологии такова, что передача SMS почти никак не нагружает сотовую сеть. Технология SMS поддерживается основными сотовыми сетями (GSM, NMT, D-AMPS, CDMA, UMTS). Также SMS на телефоны можно отправлять из Интернета и из других сетей (пейджинговых, Фидонет, x.25 и др.) используя специальные программы, универсальные SMS-формы, а также непосредственно SMS-шлюзы мобильных операторов. История SMS была создана как составная часть стандарта GSM Phase 1. Впервые идея осуществления сервиса возникла в 1984 году и была затем реализована группой инженеров, среди которых были: Фридхельм Хиллебранд (Friedhelm Hillebrand, род. 1940, Deutsche Telekom), (Bernard Ghillebaert, род. 1952, PTT), Финн Тросбю (Finn Trosby, род. 1946, Telenor), Кевин Холли (Kevin Holley, род. 1963, Cellnet), Иэн Харрис (Ian Harris, род. 1945, Vodafone) к 1989 году. Впервые система рассылки коротких сообщений была опробована в декабре 1992 года в Великобритании для передачи текста с персонального компьютера на мобильный телефон в сети GSM компании Vodafone, спустя год после появления стандарта GSM на европейском рынке. 3 декабря 1992 года программист Нил Папуорт отправил директору Vodafone Ричарду Джарвису первое в истории SMS-сообщение с текстом «Счастливого Рождества!» (). В России Вплоть до 2002 года обмен SMS-сообщениями между двумя разными московскими операторами был невозможен. В других регионах SMS-сообщениями обменивались с 2000 года. Длина сообщения Текст может состоять из алфавитно-цифровых символов. Максимальный размер сообщения в стандарте GSM — 140 байт (1120 бит). Таким образом, при использовании 7-битной кодировки (латинский алфавит и цифры) можно отправлять сообщения длиной до 160 символов. При использовании 8-битной кодировки (немецкий, французский язык) можно отправлять сообщения длиной до 140 символов. Для поддержки других национальных алфавитов (китайского, арабского, русского и др.) используется 2-байтовая (16-битная) кодировка UCS-2. Таким образом, SMS, написанное кириллицей, не может превышать 70 знаков. Существуют и поддерживаются частью телефонов и восьмибитные кодировки кириллицы — так называемая локальная российская кодировка KOI8-R и Windows-1251. Но при использовании таких кодировок возникают проблемы с совместимостью: как телефон отправителя, так и телефон получателя сообщения должны быть заранее настроены на «сокращённый набор символов», при такой настройке невозможна отправка сообщений с использованием других алфавитов, кроме кириллицы и латиницы. К тому же поддержка кодировки телефонами несовершенна: в случае переключения телефона на UCS-2 (Юникод) сообщения, сохранённые в восьмибитной кодировке, могут быть испорчены так, что не восстанавливаются даже при обратном переключении. Поэтому даже телефоны, поддерживающие восьмибитную кириллическую кодировку, по умолчанию (то есть без изменения настройки) используют UCS-2. В стандарте также предусмотрена возможность отправлять сегментированные сообщения. В таких сообщениях в заголовке пользовательских данных (UDH) помещается информация о номере сегмента сообщения и общем количестве сегментов. Максимальная длина сегмента при этом уменьшается за счёт этого заголовка. Как правило, каждый сегмент тарифицируется как отдельное сообщение. Сегментирование поддерживают почти все современные телефоны, но часто в телефонах вводится ограничение на количество сегментов в сообщении. Телефон, который не поддерживает сегментирование, отображает каждый сегмент как отдельное сообщение. SMS и транслит Некоторые абоненты сотовых сетей предпочитают писать SMS на родном языке, используя латинские буквы (см.: транслит). Первоначально это было обусловлено отсутствием поддержки кириллицы и других национальных алфавитов телефонными аппаратами; а с широким распространением русифицированных телефонов — привычкой, а также тем, что на латинице можно писать более длинные SMS (140 или 160 вместо 70 символов на кириллице) за те же деньги. Например: Ura! Ya prochital pro SMS v Wikipedii. При этом фактическая экономия меньше, чем 160/70, так как те буквы кириллицы, у которых отсутствуют аналоги в латинице, приходится заменять буквосочетаниями не менее чем из двух букв. SMS-жаргон В англоязычных странах для экономии символов в SMS часто используют аббревиатуры, пропуски гласных, а также обозначают слова и слоги схожими по звучанию цифрами и буквами. Примеры: "C u l8r" вместо "See you later". "link k b8ris 2gzer" вместо "link car batteries together". "4 u" вместо "for you" Со временем у пользователей сложился целый определённый , имеющий варианты у носителей разных национальных языков и письменностей. Тарификация В России В России, как правило, оплачивается отправка SMS (на начало 2010 года у московских операторов стоимость в большинстве тарифов составляет 0,5—2,0 рубля), входящие SMS бесплатны. Стоимость отправки и получения SMS в роуминге зависит от роумингового соглашения и может меняться в зависимости от сети пребывания абонента. В последние годы почти все российские операторы мобильной связи ввели разную стоимость отправки SMS: внутри домашнего региона и на все внутрисетевые страны, за пределы домашнего региона внутри страны, за рубеж. Отправка сообщений через официальные сайты сотовых операторов, как правило, бесплатна. Кроме того, операторы предоставляют возможность приобрести пакеты смс вне зависимости от основного тарифа. Другие страны SMS и мобильные телефоны Большинство современных мобильных телефонов всех стандартов позволяет использовать SMS в полном объёме. Для того, чтобы телефон мог отправлять SMS, необходимо указать номер SMS-центра (SMSC) оператора мобильной связи. В подавляющем большинстве случаев этот номер уже записан на SIM-карте, и настраивать его вручную не нужно. Входящие SMS сохраняются в списке входящих сообщений, где они могут быть просмотрены. Некоторые модели телефонов хранят этот список на SIM-карте, и потому имеют ограничения на количество хранящихся сообщений (несколько десятков). Современные модели хранят список сообщений в памяти телефона, и количество сообщений ограничено только объёмом памяти телефона. Отправленные сообщения сохраняются в списке отправленных сообщений, также существуют отдельные списки для неотправленных сообщений и для черновиков. В смартфонах и коммуникаторах SMS иногда хранятся в общем почтовом ящике, там же, где сообщения электронной почты и MMS. Для набора SMS на мобильном телефоне, как правило, используется цифровая клавиатура телефона. Набор осуществляется либо путём последовательных нажатий для выбора нужной буквы, либо при помощи какой-либо системы предиктивного набора типа T9 или iTAP. Некоторые модели телефонов имеют алфавитно-цифровую клавиатуру, что существенно облегчает набор. В смартфонах и коммуникаторах также может использоваться экранная клавиатура. Flash-SMS Flash-SMS — это SMS-сообщение, сразу отображаемое при получении на экране телефона, в разных моделях телефонов по-разному. Обычно Flash-SMS не сохраняются в памяти телефона или на SIM-карте, однако на некоторых телефонах возможно сохранение. В стандарте GSM Flash-SMS принадлежит к Class 0. Не все сети GSM и не все мобильные телефоны поддерживают Flash-SMS. Некоторые телефоны поддерживают приём «мигающих сообщений» (Blinking Messages), в том числе Flash-SMS. Мигающим может быть как всё сообщение, так и его часть. Для передачи Flash-SMS сообщения в соответствии со стандартом GSM используются следующие Data Coding Scheme (DCS): 0х10 SMS GSM 7-bit default alphabet flash-сообщение 0х18 SMS UCS2 (16 bit) flash-сообщение Для латиницы возможно также использование DCS = 0xF0 (GSM 7 bit) SMS и служебные приложения SIM-карт SMS также используются в приложениях STK, например, в SIM-меню. Такие сообщения принимаются и отправляются незаметно для пользователя и не попадают в общий список принятых и отправленных сообщений. SMS и городские телефоны Некоторые операторы связи предоставляют абонентам услугу sms для обычных городских телефонов. Данная услуга позволяет c телефона отправлять/принимать SMS на фиксированные телефоны и мобильные телефоны. Для отправки / приёма SMS необходим телефонный аппарат, поддерживающий функцию SMS. В Московском регионе услугу SMS для городских телефонов предоставлял МГТС. Применение SMS-рассылки Рассылки SMS с курсом валют, погодой, изречениями святых и т. п. Услуга «мобильный банк». С её помощью банки оповещают владельцев банковских карт о действиях, производимых с банковским счётом/картой/личным кабинетом онлайн-банка. Оповещение о скидках, распродажах, акциях. Проверка существования мобильного номера при регистрации на некоторых онлайн-ресурсах. Интеграция SMS-рассылок в интернет-магазины. Для идентификации пользователя (например, для восстановления утерянного пароля). Мобильный маркетинг. Смишинг За счёт SMS-рассылки многие мошенники выманивают у пользователей сотовой связи деньги или важную конфиденциальную информацию. Данная область мошенничества называется смишинг ( — от «SMS» и «фишинг»). Мобильный маркетинг В настоящий момент особую популярность получает мобильный маркетинг, представленный на рынке компаниями, осуществляющими рассылки SMS по предварительному согласию с получателями. Например, фирма хочет проинформировать своих клиентов о новинках, акциях или скидках, которые она предоставляет. Идеальным каналом для такого взаимодействия становится SMS. Служба Chief Marketer провела исследование, согласно которому, около половины опрошенных представителей поколения миллениалов предпочитает получать определённую информацию в виде sms-сообщений на свой мобильный телефон. Другие исследования показывают, что существует большое количество сообщений, которые люди предпочитают получать в виде текста. Речь о таких сообщениях, как: информирование о скидках, техническая информация о проведённых операциях и состоянии счёта, специальные предложения и срочные уведомления. SMS особенно удобны для проведения простейших транзакций, например, проверки баланса или пополнения счёта . Рассылка таких сообщений без предварительного согласия получателя запрещена во многих странах, например, в России, — согласно ст. 18 Федерального Закона о рекламе, Украине, — согласно Статье 363—1 (Раздел XVI, Уголовного Кодекса Украины). По этой причине маркетинговые компании предлагают бесплатные услуги взамен на согласие получать рекламу по SMS. Также отдельным направлением мобильного маркетинга является работа с короткими номерами. Цель использования коротких номеров — прибыль от входящих SMS, при этом большую часть стоимости забирает себе оператор сотовой связи, предоставляющий этот номер, а около 45 % получает организатор акции. Применяются также и федеральные номера для получения SMS. Этот вид сервиса обычно организовывается при отсутствии финансовой заинтересованности (получение мнения о товаре, «жалобная книга», подписка на новости). Двусторонний обмен SMS и номер для приёма SMS Технология двустороннего обмена СМС позволяет наладить коммуникацию с клиентом, при этом взаимодействие происходит по инициативе пользователя. Данная технология предполагает использование номера для приёма СМС как канала связи с клиентом, обеспечивающего быструю обратную связь и потенциально повышающего лояльность. Использование номера для приёма СМС позволяет компаниям проводить опросы, розыгрыши, а также автоматизировать смену паролей или проверку баланса. От пользователя требуется лишь отправить СМС с ключевым словом/цифрой на мобильный номер. Для большей эффективности номер для приёма СМС часто интегрируют в комплекс маркетинговых услуг и синхронизируют с другими каналами коммуникации, такими как электронная почта, голосовые сообщения, мессенджеры и т. д. В России Правомерность массовой рассылки SMS-сообщений операторами связи без подписки абонента в конце мая 2009 года подтвердил Высший арбитражный суд России. Premium-SMS Существует отдельно тарифицируемый тип SMS, используемый для получения каких-либо платных услуг. Сообщение при этом отправляется на один из специальных коротких номеров, и, как правило, содержит в себе данные, необходимые для получения услуги (код услуги, дополнительную информацию). Сообщение оплачивается по специальному тарифу при отправлении (обычно существенно дороже стоимости стандартного SMS, так как в стоимость включена стоимость самой услуги). После отправки и списания средств с лицевого счёта абонент, как правило, получает доступ к услуге, например, в виде SMS со ссылкой на WAP-страницу с мелодией, картинкой или игрой. Premium-SMS используются в различных сервисах мобильной коммерции, например, при продаже мобильного контента. Иногда Premium-SMS используются и для сервисов, не имеющих прямого отношения к мобильной связи, например, для оплаты в Интернет-ресурсах, для различных голосований. Из-за простоты перевода денег путём платных SMS данный путь используется и различными мошенниками. См. также MMS Rich Communication Services (RCS) SMPP СМС-подписка СМС-рассылка Дополнительные виды обслуживания Ссылки 30 лет назад было отправлено первое СМС-сообщение // РГ, 3.12.2022 Литература Примечания Сотовая связь Мобильная коммерция