PHP
PHP — это общего назначения, язык сценариев предназначенный для веб-разработки . [ 8 ] Первоначально он был создан датско-канадским программистом Расмусом Лердорфом в 1993 году и выпущен в 1995 году. [ 9 ] [ 10 ] PHP Эталонная реализация теперь производится PHP Group. [ 11 ] Изначально PHP был аббревиатурой Personal Home Page . [ 12 ] [ 13 ] но теперь это означает рекурсивный инициализм PHP: Hypertext Preprocessor . [ 14 ]
Код PHP обычно обрабатывается на веб-сервере PHP, интерпретатором реализованным в виде модуля , демона или исполняемого файла Common Gateway Interface (CGI). На веб-сервере результат интерпретированного и выполненного PHP-кода, который может быть любым типом данных, например, сгенерированными данными HTML или двоичными изображениями, будет формировать весь или часть HTTP- ответа. Существуют различные системы веб-шаблонов , системы управления веб-контентом и веб-фреймворки , которые можно использовать для организации или облегчения генерации такого ответа. Кроме того, PHP можно использовать для многих задач программирования вне веб-контекста, например для создания автономных графических приложений. [ 15 ] и дроном . управление [ 16 ] PHP-код также может быть выполнен непосредственно из командной строки .
Стандартный интерпретатор PHP, работающий на базе Zend Engine , является бесплатным программным обеспечением, распространяемым по лицензии PHP . PHP широко портирован и может быть развернут на большинстве веб-серверов в различных операционных системах и платформах . [ 17 ]
Язык PHP развивался без письменной формальной спецификации или стандарта, при этом исходная реализация выступала в качестве стандарта де-факто , которому стремились следовать другие реализации.
W3Techs сообщает, что по состоянию на 23 мая 2024 г. [update] (через шесть месяцев после выпуска PHP 8.3) PHP используется на 76,2% всех веб-сайтов, язык программирования которых можно определить, а 55,1% из них используют PHP 7, который устарел и известен как небезопасный. [ 18 ] [ 19 ]
История
[ редактировать ]Ранняя история
[ редактировать ]Разработка PHP началась в 1993 году. [ 9 ] когда Расмус Лердорф написал несколько программ Common Gateway Interface (CGI) на C , [ 20 ] [ 21 ] который он использовал для поддержания своей личной домашней страницы . Он расширил их для работы с веб-формами и взаимодействия с базами данных и назвал эту реализацию «персональной домашней страницей/интерпретатором форм» или PHP/FI.
Пример раннего синтаксиса PHP : [ 22 ]
<!--include /text/header.html-->
<!--getenv HTTP_USER_AGENT-->
<!--if substr $exec_result Mozilla-->
Hey, you are using Netscape!<p>
<!--endif-->
<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
Sorry, that record does not exist<p>
<!--endif exit-->
Welcome <!--$user-->!<p>
You have <!--$index:0--> credits left in your account.<p>
<!--include /text/footer.html-->
PHP/FI можно использовать для создания простых динамических веб-приложений . Чтобы ускорить отчеты об ошибках и улучшить код, Лердорф первоначально объявил о выпуске PHP/FI как «Инструменты личной домашней страницы (PHP Tools) версии 1.0» на Usenet дискуссионной группе comp.infosystems.www.authoring.cgi 8 июня 1995 года. [ 1 ] [ 23 ] Этот выпуск включал базовые функции, такие как Perl-подобные переменные , обработку форм и возможность встраивания HTML . К этому моменту синтаксис изменился и стал напоминать синтаксис Perl , но стал более простым, более ограниченным и менее последовательным. [ 12 ] [ 11 ]
Ранний PHP никогда не задумывался как новый язык программирования ; скорее, он разрастался органично, и Лердорф, оглядываясь назад, заметил: «Я не знаю, как это остановить [...] никогда не было никакого намерения писать язык программирования [...] Я совершенно понятия не имею, как писать язык программирования [...] Я просто продолжал добавлять следующий логический шаг на пути». [ 24 ] Команда разработчиков начала формироваться и после нескольких месяцев работы и бета- тестирования официально выпустила PHP/FI 2 в ноябре 1997 года. [ 25 ]
Тот факт, что PHP изначально не был спроектирован, а был разработан органично, привел к противоречивым именам функций и непоследовательному порядку их параметров. [ 26 ] В некоторых случаях имена функций выбирались так, чтобы они соответствовали библиотекам нижнего уровня, которые PHP «обертывал». [ 27 ] в то время как в некоторых очень ранних версиях PHP длина имен функций использовалась внутри как хеш-функция , поэтому имена были выбраны для улучшения распределения хеш-значений . [ 28 ]
PHP 3 и 4
[ редактировать ]Зеев Сураски и Энди Гутманс переписали парсер в 1997 году и легли в основу PHP 3, изменив название языка на рекурсивную аббревиатуру PHP: Hypertext Preprocessor . [ 11 ] [ 29 ] После этого началось публичное тестирование PHP 3, а официальный запуск состоялся в июне 1998 года. Затем Сураски и Гутманс начали новую переработку ядра PHP, выпустив Zend Engine в 1999 году. [ 30 ] Они также основали компанию Zend Technologies в Рамат-Гане , Израиль . [ 11 ]
22 мая 2000 года был выпущен PHP 4 на базе Zend Engine 1.0. [ 11 ] К августу 2008 года эта ветка достигла версии 4.4.9. PHP 4 больше не находится в разработке, и выпуск каких-либо обновлений безопасности не планируется. [ 31 ] [ 32 ]
PHP 5
[ редактировать ]1 июля 2004 года был выпущен PHP 5 на базе нового Zend Engine II. [ 11 ] PHP 5 включал новые функции, такие как улучшенная поддержка объектно-ориентированного программирования , расширение PHP Data Objects (PDO) (которое определяет легкий и согласованный интерфейс для доступа к базам данных), а также многочисленные улучшения производительности. [ 33 ] В 2008 году PHP 5 стал единственной разрабатываемой стабильной версией. Позднее статическое связывание отсутствовало в предыдущих версиях PHP и было добавлено в версии 5.3. [ 34 ] [ 35 ]
Многие громкие проекты с открытым исходным кодом прекратили поддержку PHP 4 в новом коде с 5 февраля 2008 года из-за инициативы GoPHP5. [ 36 ] предоставлен консорциумом разработчиков PHP, продвигающим переход с PHP 4 на PHP 5. [ 37 ] [ 38 ]
Со временем интерпретаторы PHP стали доступны в большинстве существующих 32- и 64-битных операционных систем либо путем их создания из исходного кода PHP, либо с использованием предварительно созданных двоичных файлов. [ 39 ] Для версий PHP 5.3 и 5.4 единственными доступными двоичными дистрибутивами Microsoft Windows были 32-битные сборки IA-32 . [ 40 ] [ 41 ] требуется режим совместимости с 32-разрядной версией Windows при использовании служб IIS на 64-разрядной платформе Windows. PHP версии 5.5 сделал 64-битные сборки x86-64 доступными для Microsoft Windows. [ 42 ]
Официальная поддержка безопасности PHP 5.6 закончилась 31 декабря 2018 г. [ 43 ]
PHP 6 и Юникод
[ редактировать ]PHP получил неоднозначные отзывы из-за отсутствия встроенной поддержки Unicode на уровне ядра языка. [ 44 ] [ 45 ] В 2005 году под руководством Андрея Змиевского был инициирован проект по внедрению встроенной поддержки Unicode в PHP путем внедрения библиотеки International Components for Unicode (ICU) и внутреннего представления текстовых строк в формате UTF-16 . [ 46 ] Поскольку это привело бы к серьезным изменениям как во внутреннем устройстве языка, так и в пользовательском коде, планировалось выпустить его как версию 6.0 языка вместе с другими основными функциями, которые тогда находились в разработке. [ 47 ]
Однако нехватка разработчиков, которые поняли необходимые изменения, а также проблемы с производительностью, возникающие из-за преобразования в UTF-16, который редко используется в веб-контексте, привели к задержкам в реализации проекта. [ 48 ] В результате в 2009 году была создана версия PHP 5.3, в которой многие функции, не относящиеся к Unicode, были перенесены из PHP 6, в частности пространства имен. В марте 2010 года проект в его нынешнем виде был официально закрыт, и была подготовлена версия PHP 5.4, которая будет содержать большинство оставшихся не-Unicode функций PHP 6, таких как признаки и повторное связывание замыканий. [ 49 ] Первоначальные надежды заключались в том, что будет разработан новый план интеграции Unicode, но к 2014 году он так и не был принят. [ нужна ссылка ]
PHP 7
[ редактировать ]В 2014 и 2015 годах была разработана новая основная версия PHP — PHP 7. Нумерация этой версии вызвала некоторые споры среди внутренних разработчиков. [ 50 ] Хотя эксперименты PHP 6 с Unicode никогда не публиковались, в нескольких статьях и названиях книг упоминались имена PHP 6, что могло бы вызвать путаницу, если бы в новой версии это имя использовалось повторно. [ 51 ] После голосования было выбрано название PHP 7. [ 52 ]
Основой PHP 7 является ветвь PHP , которая изначально называлась PHP следующего поколения ( phpng ). Его авторы Дмитрий Стогов, Синьчэнь Хуэй и Никита Попов. [ 53 ] и направлен на оптимизацию производительности PHP путем рефакторинга Zend Engine, сохраняя при этом почти полную языковую совместимость. [ 54 ] К 14 июля 2014 года тесты на базе WordPress , которые служили основным набором тестов для проекта phpng, показали почти 100% увеличение производительности. Изменения в phpng упрощают повышение производительности в будущих версиях, поскольку более компактные структуры данных и другие изменения считаются более подходящими для успешного перехода на JIT -компилятор. [ 55 ] Из-за существенных изменений переработанный Zend Engine получил название Zend Engine 3 , придя на смену Zend Engine 2, использовавшемуся в PHP 5. [ 56 ]
Из-за серьезных внутренних изменений в phpng он должен получить новый основной номер версии PHP, а не второстепенный выпуск PHP 5, в соответствии с процессом выпуска PHP. [ 57 ] В основных версиях PHP разрешено нарушать обратную совместимость кода, и поэтому PHP 7 предоставил возможность для других улучшений, помимо phpng, которые требуют нарушений обратной совместимости. [ нужна ссылка ] В частности, это коснулось следующих изменений:
- Многие устаревшие механизмы ошибок PHP на фатальном или восстанавливаемом уровне были заменены современными объектно-ориентированными исключениями . [ 58 ]
- Синтаксис разыменования переменных был переработан, чтобы стать более последовательным и полным, что позволяет использовать операторы
->
,[]
,()
,{}
, и::
, с произвольными значимыми левыми выражениями. [ 59 ] - Поддержка устаревших методов конструктора в стиле PHP 4 прекращена. [ 60 ]
- Поведение
foreach
заявление было изменено, чтобы быть более предсказуемым. [ 61 ] - Конструкторы для нескольких встроенных в PHP классов, которые возвращали значение null в случае сбоя, были изменены и теперь вместо этого вызывают исключение для обеспечения единообразия. [ 62 ]
- Несколько неподдерживаемых или устаревших интерфейсов и расширений серверного прикладного программирования (SAPI) были удалены из ядра PHP, в первую очередь устаревшие версии.
mysql
расширение. [ 63 ] - Поведение
list()
Оператор был изменен, чтобы удалить поддержку строк. [ 64 ] - Была удалена поддержка устаревших разделителей в стиле ASP.
<%
и%>
и<script language="php"> ... </script>
. [ 65 ] - Ошибка, позволяющая оператору переключения иметь несколько
default
положения были исправлены. [ 66 ] - Поддержка шестнадцатеричных чисел в некоторых неявных преобразованиях строк в числовые типы была удалена. [ 67 ]
- Операторы левого и правого сдвига были изменены, чтобы обеспечить более единообразное поведение на разных платформах. [ 68 ]
- Преобразования между числами с плавающей запятой и целыми числами были изменены (например, бесконечность изменена на преобразование в ноль) и реализованы более последовательно на разных платформах. [ 68 ] [ 69 ]
PHP 7 также включает новые возможности языка. В частности, он представил объявления возвращаемого типа для функций. [ 70 ] которые дополняют существующие объявления типов параметров и поддерживают скалярные типы (целое число, число с плавающей точкой, строка и логическое значение) в объявлениях параметров и возвращаемых типов. [ 71 ]
PHP 8
[ редактировать ]PHP 8 был выпущен 26 ноября 2020 года и в настоящее время является второй по популярности основной версией PHP. PHP 8 является основной версией и содержит существенные изменения по сравнению с предыдущими версиями. [ 72 ] [ 73 ] Новые функции и заметные изменения включают в себя:
Компиляция точно в срок
[ редактировать ]компиляция «точно в срок» . В PHP 8 поддерживается [ 74 ]
PHP 8 JIT-компилятор может обеспечить существенное повышение производительности в некоторых случаях использования. [ 75 ] [ 76 ] в то время как PHP-разработчик Никита Попов заявил, что повышение производительности большинства веб-сайтов будет менее существенным, чем при обновлении с PHP 5 на PHP 7. [ 77 ] Существенные улучшения ожидаются больше для операций математического типа, чем для обычных случаев использования в веб-разработке. [ 77 ] Кроме того, JIT-компилятор предоставляет в будущем возможность перенести часть кода с C на PHP благодаря повышению производительности в некоторых случаях использования. [ 78 ]
Добавление выражения соответствия
[ редактировать ]PHP 8 представил match
выражение. [ 79 ] Выражение соответствия концептуально похоже на выражение switch
и является более компактным для некоторых случаев использования. [ 80 ] Потому что match
является выражением, его результат может быть присвоен переменной или возвращен функцией. [ 81 ]
Типовые изменения и дополнения
[ редактировать ]В PHP 8 появились типы объединения, новый static
тип возвращаемого значения и новый mixed
тип. [ 72 ]
«Атрибуты», часто называемые «аннотациями» на других языках программирования, были добавлены в PHP 8, что позволяет добавлять метаданные в классы. [ 72 ]
throw
из утверждения превратился в выражение. [ 82 ] Это позволяет создавать исключения в местах, которые ранее были невозможны. [ 72 ]
Изменения и дополнения синтаксиса
[ редактировать ]PHP 8 включает изменения, позволяющие использовать альтернативный, более краткий или более согласованный синтаксис в ряде сценариев. Например, оператор nullsafe аналогичен оператору объединения нулей. ??
, но используется при вызове методов. [ 83 ] Следующий фрагмент кода не выдаст ошибку, если getBirthday()
возвращает ноль:
$human_readable_date = $user->getBirthday()?->diffForHumans();
Продвижение свойств конструктора было добавлено как « синтаксический сахар », позволяющее автоматически устанавливать свойства класса при передаче параметров в конструктор класса . [ 72 ] Это уменьшает количество шаблонного кода , который необходимо написать. [ 84 ]
Другие незначительные изменения включают поддержку использования ::class
на объектах, что служит альтернативой использованию get_class()
; [ 72 ] незахватывающие уловы в блоках try-catch; настройки синтаксиса переменных для устранения несоответствий; поддержка именованных аргументов; и поддержка завершающих запятых в списках параметров, что повышает согласованность с поддержкой завершающих запятых в других контекстах, например в массивах. [ 73 ]
Изменения и дополнения стандартной библиотеки
[ редактировать ]- Слабые карты были добавлены в PHP 8.
WeakMap
содержит ссылки на объекты, но эти ссылки не препятствуют сбору мусора таких объектов . [ 85 ] Это может обеспечить повышение производительности в сценариях, где данные кэшируются ; это имеет особое значение для объектно-реляционных отображений (ORM). [ 72 ] - Различные корректировки интерфейсов, например добавление поддержки создания
DateTime
объекты из интерфейсов и добавлениеStringable
интерфейс, который можно использовать для подсказки типов. [ 72 ] - Различные новые функции, включая
str_contains()
,str_starts_with()
, иstr_ends_with()
; [ 86 ]fdiv()
;get_debug_type()
; иget_resource_id()
[ 72 ] - Объектная реализация
token_get_all()
[ 72 ]
Дополнительные изменения
[ редактировать ]- Аннотации типов были также добавлены в сам исходный код PHP C, чтобы позволить внутренним функциям и методам иметь «полную информацию о типе в отражении». [ 87 ]
- Наследование с помощью частных методов [ 72 ]
- Абстрактные методы улучшения характеристик [ 72 ]
PHP 8.1
[ редактировать ]PHP 8.1 был выпущен 25 ноября 2021 года. [ 88 ] Добавлена поддержка перечислений (также называемых «перечислениями»), объявляющих свойства как readonly
(что предотвращает изменение свойства после инициализации) и распаковку массива с помощью строковых ключей. Новый тип Never можно использовать для указания того, что функция не возвращает результат. [ 89 ]
PHP 8.2
[ редактировать ]PHP 8.2 был выпущен 8 декабря 2022 года. [ 90 ] Новое в этом выпуске: readonly
классы (свойства экземпляров которых неявно доступны только для чтения), типы дизъюнктивной нормальной формы (DNF) и random
расширение, предоставляющее генератор псевдослучайных чисел с объектно-ориентированным API , [ 91 ] Редактирование значений чувствительных параметров и множество других функций.
История выпусков
[ редактировать ]Версия | Дата выпуска | Поддерживается до [ 92 ] | Примечания |
---|---|---|---|
1.0. | 8 июня 1995 г. | Официально называется «Инструменты личной домашней страницы (PHP Tools)». Это первое использование имени «PHP». [ 11 ] | |
2.0. | 1 ноября 1997 г. | Официально называется «PHP/FI 2.0». Это первый релиз, который можно охарактеризовать как PHP, поскольку он представляет собой отдельный язык со многими функциями, сохранившимися до наших дней. | |
3.0. | 6 июня 1998 г. | 20 октября 2000 г. [ 92 ] | Разработка переходит от одного человека к нескольким разработчикам. Зеев Сураски и Энди Гутманс переписали основу этой версии. [ 11 ] |
4.0. | 22 мая 2000 г. [ 93 ] | 23 июня 2001 г. [ 92 ] | Добавлена более продвинутая двухэтапная система анализа/выполнения тегов, называемая движком Zend. [ 94 ] |
4.1. | 10 декабря 2001 г. [ 95 ] | 12 марта 2002 г. [ 92 ] | Введены «суперглобальные переменные» ( $_GET , $_POST , $_SESSION , и т. д.) [ 94 ]
|
4.2. | 22 апреля 2002 г. [ 96 ] | 6 сентября 2002 г. [ 92 ] | Неполноценный register_globals по умолчанию. Данные, полученные по сети, больше не вставляются напрямую в глобальное пространство имен, закрывая возможные дыры в безопасности приложений. [ 94 ]
|
4.3. | 27 декабря 2002 г. [ 97 ] | 31 марта 2005 г. [ 92 ] | Введен интерфейс командной строки (CLI) в дополнение к CGI. [ 94 ] [ 98 ] |
4.4. | 11 июля 2005 г. [ 99 ] | 7 августа 2008 г. [ 92 ] | Исправлена ошибка повреждения памяти, из-за которой требовалось нарушение двоичной совместимости с расширениями, скомпилированными для PHP версии 4.3.x. [ 100 ] |
5.0. | 13 июля 2004 г. [ 101 ] | 5 сентября 2005 г. [ 92 ] | Zend Engine II с новой объектной моделью. [ 102 ] |
5.1. | 24 ноября 2005 г. [ 103 ] | 24 августа 2006 г. [ 92 ] | Улучшение производительности за счет введения переменных компилятора в обновленный PHP Engine. [ 102 ] Добавлены объекты данных PHP (PDO) в качестве согласованного интерфейса для доступа к базам данных. [ 104 ] |
5.2. | 2 ноября 2006 г. [ 105 ] | 6 января 2011 г. [ 92 ] | Расширение фильтра включено по умолчанию. Встроенная поддержка JSON . [ 102 ] |
5.3. | 30 июня 2009 г. [ 106 ] | 14 августа 2014 г. [ 92 ] | Поддержка пространств имен ; поздние статические привязки , метка перехода (ограниченный переход ), анонимные функции , замыкания , PHP-архивы (phar), сборка мусора для циклических ссылок, улучшенная поддержка Windows , sqlite3, mysqlnd в качестве замены libmysql в качестве базовой библиотеки для расширений, которые работают с MySQL , fileinfo в качестве замены mime_magic для лучшей поддержки MIME , расширения интернационализации и прекращения поддержки расширения ereg. |
5.4. | 1 марта 2012 г. [ 107 ] | 3 сентября 2015 г. [ 92 ] | Поддержка особенностей , поддержка синтаксиса коротких массивов. Удалены элементы: register_globals , safe_mode , allow_call_time_pass_reference , session_register() , session_unregister() и session_is_registered() . Встроенный веб-сервер. [ 108 ] Несколько улучшений существующих функций, производительности и снижение требований к памяти.
|
5.5. | 20 июня 2013 г. [ 109 ] | 10 июля 2016 г. [ 110 ] | Поддержка генераторов , finally блоки обработки исключений, OpCache (на базе Zend Optimizer+), входящий в официальный дистрибутив. [ 111 ]
|
5.6. | 28 августа 2014 г. [ 112 ] | 31 декабря 2018 г. [ 110 ] | Постоянные скалярные выражения, вариативные функции , распаковка аргументов, новый оператор возведения в степень, расширения use оператор для функций и констант, новое phpdbg отладчик как модуль SAPI и другие мелкие улучшения. [ 113 ]
|
6.х | Не выпущено | — | Заброшенная версия PHP, в которой планировалось включить встроенную поддержку Unicode. [ 114 ] [ 115 ] |
7.0. | 3 декабря 2015 г. [ 116 ] | 10 января 2019 г. [ 57 ] | Zend Engine 3 (улучшение производительности) [ 55 ] и поддержка 64-битных целых чисел в Windows [ 117 ] ), единый синтаксис переменных, [ 59 ] AST , Процесс компиляции на основе [ 118 ] добавлен Closure::call() , [ 119 ] согласованность побитового сдвига на разных платформах, [ 120 ] ?? ( нулевой оператор объединения), [ 121 ] Unicode -кода Синтаксис escape , [ 122 ] объявления возвращаемого типа, [ 70 ] объявления скалярного типа (целое число, число с плавающей запятой, строка и логическое значение), [ 71 ] <=> «космический корабль» оператор трехстороннего сравнения , [ 123 ] генератора , делегирование [ 124 ] анонимные занятия , [ 125 ] более простой и более доступный CSPRNG API, [ 126 ] замена многих оставшихся внутренних «ошибок» PHP более современными исключениями , [ 58 ] и сокращенный синтаксис для импорта нескольких элементов из пространства имен. [ 127 ]
|
7.1. | 1 декабря 2016 г. | 1 декабря 2019 г. [ 110 ] | iterable тип, [ 128 ] обнуляемые типы, [ 129 ] void тип возвращаемого значения , [ 130 ] констант класса модификаторы видимости , [ 131 ] синтаксис короткого списка, [ 132 ] многократный улов [ 133 ]
|
7.2. | 30 ноября 2017 г. | 30 ноября 2020 г. [ 110 ] | Параметр объекта и объявление типа возвращаемого значения, [ 134 ] расширение libsodium, [ 135 ] переопределение абстрактного метода, [ 136 ] расширение типа параметра [ 137 ] |
7.3. | 6 декабря 2018 г. [ 138 ] | 6 декабря 2021 г. | Гибкий синтаксис Heredoc и Nowdoc, [ 139 ] поддержка присвоения ссылок и деконструкции массива с помощью list() , [ 140 ] поддержка PCRE2, [ 141 ] hrtime функция [ 142 ]
|
7.4. | 28 ноября 2019 г. [ 143 ] | 28 ноября 2022 г. | Типизированные свойства 2.0, [ 144 ] предварительная загрузка, [ 145 ] оператор присваивания, объединяющий нулевые значения, [ 146 ] улучшать openssl_random_pseudo_bytes , [ 147 ] слабые ссылки, [ 85 ] интерфейс внешней функции (FFI) , [ 148 ] всегда доступное расширение хеша, [ 149 ] реестр хэшей паролей, [ 150 ] разделение многобайтовых строк, [ 151 ] отражение для ссылок, [ 152 ] разделить ext/wddx, [ 153 ] новый механизм сериализации пользовательских объектов [ 154 ]
|
8.0. | 26 ноября 2020 г. [ 155 ] | 26 ноября 2023 г. | JIT-компиляция , [ 74 ] массивы, начинающиеся с отрицательного индекса, [ 156 ] более строгая/более разумная семантика языка (проверка абстрактных методов признаков), [ 157 ] более разумное сравнение строк и чисел, [ 158 ] более разумные числовые строки, [ 159 ] TypeError о недопустимых арифметических/побитовых операторах, [ 160 ] переклассификация различных ошибок двигателя, [ 161 ] постоянные ошибки типов для внутренних функций, [ 162 ] фатальная ошибка из-за несовместимых сигнатур методов [ 163 ] ), независимое от локали преобразование числа с плавающей запятой в строку, [ 164 ] настройки синтаксиса переменных, [ 165 ] атрибуты, [ 166 ] [ 167 ] [ 168 ] [ 169 ] именованные аргументы, [ 170 ] выражение соответствия, [ 171 ] продвижение недвижимости застройщика, [ 172 ] типы объединений, [ 173 ] mixed тип, [ 174 ] статический тип возвращаемого значения, [ 175 ] нулевой безопасный оператор, [ 83 ] незахватывающие уловы, [ 176 ] throw выражение, [ 82 ] Расширение JSON всегда доступно. [ 177 ]
|
8.1. | 25 ноября 2021 г. [ 178 ] | 31 декабря 2025 г. | Явное обозначение восьмеричного целого числа, [ 179 ] перечисления, [ 180 ] свойства только для чтения, [ 181 ] первоклассный вызываемый синтаксис, [ 182 ] new в инициализаторах, [ 183 ] чистые типы пересечений, [ 184 ] never тип возвращаемого значения, [ 185 ] final ограничения класса, [ 186 ] волокна [ 187 ]
|
8.2. | 8 декабря 2022 г. [ 188 ] | 31 декабря 2026 г. | Классы только для чтения, [ 189 ] null , false , и true как отдельные типы, [ 190 ] [ 191 ] преобразование регистра независимо от локали, [ 192 ] типы дизъюнктивной нормальной формы, [ 193 ] константы в чертах [ 194 ]
|
8.3. | 23 ноября 2023 г. [ 195 ] | 31 декабря 2027 г. | Типизированные константы класса, [ 196 ] выборка констант динамического класса, [ 197 ] #[\Override] атрибут, [ 198 ] глубокое клонирование свойств, доступных только для чтения, [ 199 ] новый json_validate функция, [ 200 ] дополнения рандомайзера, [ 201 ] линтер командной строки поддерживает несколько файлов
|
8.4 | 21 ноября 2024 г. [ 202 ] | 31 декабря 2028 г. | |
Легенда: Старая версия Старая версия, все еще поддерживается Последняя версия Будущий выпуск |
Начиная с 28 июня 2011 года группа разработчиков PHP установила график выпуска новых версий PHP. [ 57 ] Согласно этой системе, по крайней мере, один выпуск должен происходить каждый месяц. Раз в год должен выпускаться минорный выпуск, который может включать новые функции. Каждый второстепенный выпуск должен поддерживаться как минимум в течение двух лет с исправлениями безопасности и ошибок, а затем как минимум один год только с исправлениями безопасности, что в общей сложности составляет трехлетний процесс выпуска для каждого второстепенного выпуска. Никакие новые функции, за исключением небольших и автономных, не могут быть добавлены в второстепенную версию в течение трехлетнего процесса выпуска.
Талисман
[ редактировать ]Талисманом проекта PHP является elePHPant , синий слон с логотипом PHP на боку, разработанный Винсентом Понтье. [ 203 ] в 1998 году. [ 204 ] «Буквы (PHP) имели форму слона, если смотреть под углом сбоку». [ 205 ] elePHPant иногда имеет другой цвет, когда он находится в форме плюшевой игрушки . [ 206 ]
За прошедшие годы было создано множество вариаций этого талисмана. Только elePHPants, созданные по оригинальному дизайну Винсента Понтье, считаются официальными сообществом. [ 207 ] Они являются коллекционными, и некоторые из них чрезвычайно редки. [ 208 ]
Синтаксис
[ редактировать ]Следующий «Привет, мир!» Программа написана на PHP-коде, встроенном в HTML- документ:
<!DOCTYPE html>
<html>
<head>
<title>PHP "Hello, World!" program</title>
</head>
<body>
<p><?= 'Hello, World!' ?></p>
</body>
</html>
Однако, поскольку не требуется встраивание PHP-кода в HTML, простейшая версия Hello, World! можно написать так, с закрывающим тегом ?>
по желанию опускается в файлах, содержащих чистый код PHP. [ 209 ]
<?php echo 'Hello, World!';
Интерпретатор PHP выполняет код PHP только внутри своих разделителей . Все, что находится за пределами разделителей, не обрабатывается PHP, хотя текст, отличный от PHP, по-прежнему подчиняется структурам управления, описанным в коде PHP. Наиболее распространенными разделителями являются <?php
открыть и ?>
закрыть разделы PHP. Сокращенная форма <?
также существует. Этот короткий разделитель делает файлы сценариев менее переносимыми, поскольку их поддержка может быть отключена в локальной конфигурации PHP и поэтому не рекомендуется. [ 210 ] [ 211 ] И наоборот, нет никаких рекомендаций против короткого тега echo. <?=
. [ 212 ] До PHP 5.4.0 этот короткий синтаксис для echo
работает только с short_open_tag
настройка конфигурации включена, а для PHP 5.4.0 и более поздних версий она всегда доступна. [ 213 ] [ 214 ] [ 210 ] Целью всех этих разделителей является отделение кода PHP от содержимого, не относящегося к PHP, такого как код JavaScript или разметка HTML. [ 215 ] Итак, самое короткое «Hello, World!» программа, написанная на PHP:
<?='Hello, World!';
Первая форма разделителей, <?php
и ?>
, в XHTML и других XML создает правильно сформированные инструкции обработки XML. документах [ 216 ] Это означает, что результирующая смесь PHP-кода и другой разметки в серверном файле сама по себе является правильно сформированным XML.
Переменные начинаются с символа доллара , и тип не нужно указывать заранее. В PHP 5 появились объявления типов , которые позволяют функциям заставлять свои параметры быть объектами определенного класса, массивами, интерфейсами или функциями обратного вызова . Однако до PHP 7 объявления типов нельзя было использовать со скалярными типами, такими как целые числа или строки. [ 71 ]
Ниже приведен пример объявления и инициализации переменных PHP.
<?php
$name = 'John'; // variable of string type being declared and initialized
$age = 18; // variable of integer type being declared and initialized
$height = 5.3; // variable of double type being declared and initialized
echo $name . ' is ' . $height . "m tall\n"; // concatenating variables and strings
echo "$name is $age years old."; // interpolating variables to string
?>
В отличие от имен функций и классов, имена переменных чувствительны к регистру. Как строки в двойных кавычках (""), так и строки Heredoc предоставляют возможность интерполировать значение переменной в строку. [ 217 ] PHP воспринимает новую строку как пробел, как в языке свободной формы , а операторы завершаются точкой с запятой. [ 218 ] PHP имеет три типа синтаксиса комментариев : /* */
отмечает блокированные и встроенные комментарии; //
или #
используются для однострочных комментариев. [ 219 ] echo
Оператор — это одно из нескольких средств, предоставляемых PHP для вывода текста. [ нужна ссылка ]
С точки зрения ключевых слов и синтаксиса языка PHP похож на синтаксис в стиле C. if
условия, for
и while
Циклы и возвраты функций по синтаксису аналогичны синтаксису таких языков, как C, C++, C#, Java и Perl. [ нужна ссылка ]
Типы данных
[ редактировать ]PHP свободно типизирован . Он хранит целые числа в диапазоне, зависящем от платформы, в виде 32-, 64- или 128-битного со знаком, числа эквивалентного длинному типу языка C. целого Целые числа без знака в определенных ситуациях преобразуются в значения со знаком, что отличается от поведения многих других языков программирования. [ 220 ] Целочисленным переменным можно присваивать десятичные (положительные и отрицательные), восьмеричные , шестнадцатеричные и двоичные обозначения. [ нужна ссылка ]
Числа с плавающей запятой также хранятся в диапазоне, зависящем от платформы. Их можно указать с помощью записи с плавающей запятой или двух форм научной записи . [ 221 ] PHP имеет собственный логический тип, похожий на собственные логические типы в Java и C++ . Используя правила преобразования логических типов, ненулевые значения интерпретируются как истинные, а нули — как ложные, как в Perl и C++. [ 221 ]
Тип данных null представляет собой переменную, не имеющую значения; NULL
— единственное разрешенное значение для этого типа данных. [ 221 ]
Переменные типа «ресурс» представляют собой ссылки на ресурсы из внешних источников. Обычно они создаются функциями из определенного расширения и могут обрабатываться только функциями из того же расширения; примеры включают ресурсы файлов, изображений и баз данных. [ 221 ]
Массивы могут содержать элементы любого типа, который может обрабатывать PHP, включая ресурсы, объекты и даже другие массивы. Порядок сохраняется в списках значений и хэшах как с ключами, так и со значениями, и их можно смешивать. [ 221 ] PHP также поддерживает строки , которые можно использовать с одинарными и двойными кавычками, nowdoc или heredoc . синтаксисом [ 222 ]
Стандартная библиотека PHP (SPL) пытается решить стандартные проблемы и реализует эффективные интерфейсы и классы доступа к данным. [ 223 ]
Функции
[ редактировать ]PHP определяет большой набор функций на основном языке, и многие из них также доступны в различных расширениях; эти функции хорошо документированы в онлайн- документации PHP . [ 224 ] Однако встроенная библиотека имеет множество соглашений об именах и связанных с ними несоответствий, как описано выше в истории .
Пользовательские функции могут быть определены разработчиком:
function myAge(int $birthYear): string
{
// calculate the age by subtracting the birth year from the current year.
$yearsOld = date('Y') - $birthYear;
// return the age in a descriptive string.
return $yearsOld . ($yearsOld == 1 ? ' year' : ' years');
}
echo 'I am currently ' . myAge(1995) . ' old.';
По состоянию на 2024 год результат приведенной выше примерной программы будет следующим: «Мне сейчас 29 лет».
Вместо указателей на функции на функции в PHP можно ссылаться по строке, содержащей их имя. Таким образом, можно использовать обычные функции PHP, например, в качестве обратных вызовов или в таблицах функций . [ 225 ] Пользовательские функции могут быть созданы в любое время без прототипирования . [ 224 ] [ 225 ] Функции могут быть определены внутри блоков кода, что позволяет во время выполнения принимать решение о том, следует ли определять функцию. Существует function_exists
функция, которая определяет, была ли уже определена функция с данным именем. Вызовы функций должны использовать круглые скобки, за исключением функций конструктора класса с нулевым аргументом, вызываемых с помощью оператора PHP. new
, в этом случае круглые скобки необязательны. [ нужна ссылка ]
Начиная с PHP 4.0.1 create_function()
, тонкая обертка вокруг eval()
, позволял создавать обычные функции PHP во время выполнения программы; он устарел в PHP 7.2 и удален в PHP 8.0. [ 226 ] в пользу синтаксиса анонимных функций или « замыканий » [ 227 ] который может захватывать переменные из окружающей области видимости, что было добавлено в PHP 5.3. Синтаксис сокращенной стрелки был добавлен в PHP 7.4: [ 228 ]
function getAdder($x) {
return fn($y) => $x + $y;
}
$adder = getAdder(8);
echo $adder(2); // prints "10"
В приведенном выше примере getAdder()
функция создает замыкание, используя переданный аргумент $x
, который принимает дополнительный аргумент $y
и возвращает созданное замыкание вызывающему объекту. Такая функция является объектом первого класса, то есть ее можно хранить в переменной, передавать в качестве параметра другим функциям и т. д. [ 229 ]
Что необычно для динамически типизированного языка, PHP поддерживает объявления типов для параметров функции, которые применяются во время выполнения. Это поддерживается для классов и интерфейсов с PHP 5.0, для массивов с PHP 5.1, для «вызываемых объектов» с PHP 5.4 и скалярных типов (целочисленных, плавающих, строковых и логических) с PHP 7.0. [ 71 ] В PHP 7.0 также есть объявления типов для типов возвращаемых функций, выраженные путем размещения имени типа после списка параметров, которому предшествует двоеточие. [ 70 ] Например, getAdder
Функция из предыдущего примера может быть аннотирована такими типами в PHP 7:
function getAdder(int $x): Closure
{
return fn(int $y): int => $x + $y;
}
$adder = getAdder(8);
echo $adder(2); // prints "10"
echo $adder(null); // throws an exception because an incorrect type was passed
$adder = getAdder([]); // would also throw an exception
По умолчанию объявления скалярных типов следуют принципам слабой типизации. Так, например, если тип параметра int
, PHP позволял бы передавать в эту функцию не только целые числа, но и преобразуемые числовые строки, числа с плавающей запятой или логические значения и преобразовывать их. [ 71 ] Однако в PHP 7 есть режим «строгой типизации», который при использовании запрещает такие преобразования для вызовов функций и возвратов данных внутри файла. [ 71 ]
PHP-объекты
[ редактировать ]Базовые функции объектно-ориентированного программирования были добавлены в PHP 3 и улучшены в PHP 4. [ 11 ] Это позволило PHP получить дополнительную абстракцию, упростив творческие задачи для программистов, использующих этот язык. Обработка объектов была полностью переписана для PHP 5, что расширило набор функций и повысило производительность. [ 230 ] В предыдущих версиях PHP объекты обрабатывались как типы значений . [ 230 ] Недостаток этого метода заключался в том, что коду приходилось интенсивно использовать «ссылочные» переменные PHP, если он хотел изменить переданный объект, а не создавать его копию. В новом подходе на объекты ссылаются по дескриптору , а не по значению. [ нужна ссылка ]
В PHP 5 появились частные и защищенные переменные-члены и методы, а также абстрактные классы , финальные классы , абстрактные методы и финальные методы . Он также представил стандартный способ объявления конструкторов и деструкторов , аналогичный тому, который используется в других объектно-ориентированных языках, таких как C++ , и стандартную модель обработки исключений . Кроме того, в PHP 5 добавлены интерфейсы и разрешена реализация нескольких интерфейсов. Существуют специальные интерфейсы, которые позволяют объектам взаимодействовать с системой времени выполнения. Объекты, реализующие ArrayAccess, можно использовать с синтаксисом массива , а объекты, реализующие Iterator или IteratorAggregate, можно использовать с синтаксисом массива. foreach
языковая конструкция . нет функции виртуальных таблиц В движке , поэтому во время компиляции статические переменные связываются с именем, а не ссылкой. [ 231 ]
Если разработчик создает копию объекта, используя зарезервированное слово clone
, движок Zend проверит, __clone()
метод определен. Если нет, он вызовет значение по умолчанию __clone()
который скопирует свойства объекта. Если __clone()
метод определен, то он будет отвечать за установку необходимых свойств в созданном объекте. Для удобства движок предоставляет функцию, которая импортирует свойства исходного объекта, поэтому программист может начать с реплики исходного объекта по значению и переопределять только те свойства, которые необходимо изменить. [ 232 ]
Видимость ключевых свойств и методов PHP определяется с помощью слов public
, private
, и protected
. По умолчанию используется public, если только var ; используется var
является синонимом public
. Заявленные товары public
можно получить доступ повсюду. protected
ограничивает доступ к унаследованным классам (и к классу, определяющему элемент). private
ограничивает видимость только классом, который определяет элемент. [ 233 ] Объекты одного типа имеют доступ к частным и защищенным членам друг друга, даже если они не являются одним и тем же экземпляром. [ нужна ссылка ]
Пример
[ редактировать ]Ниже приведен базовый пример объектно-ориентированного программирования в PHP 8:
<?php
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
Эта программа выводит следующее:
Students: Hello, my name is Alice, I learn Computer Science Hello, my name is Bob, I learn Computer Science Hello, my name is Charlie, I learn Business Studies Teachers: Hello, my name is Dan, I teach Computer Science, Information Security Hello, my name is Erin, I teach Computer Science, 3D Graphics Programming Hello, my name is Frankie, I teach Online Marketing, Business Studies, E-commerce
Реализации
[ редактировать ]Единственной полной реализацией PHP является оригинал, известный просто как PHP. Он наиболее широко используется и работает на Zend Engine . Чтобы отличить его от других реализаций, его иногда неофициально называют «Zend PHP». Zend Engine компилирует PHP исходный код на лету во внутренний формат, который он может выполнять, таким образом, он работает как интерпретатор . [ 234 ] [ 235 ] Это также «эталонная реализация» PHP, поскольку PHP не имеет формальной спецификации, и поэтому семантика Zend PHP определяет семантику PHP. Из-за сложной и тонкой семантики PHP, определяемой тем, как работает Zend, конкурирующим реализациям сложно обеспечить полную совместимость. [ нужна ссылка ]
Модель PHP с одним запросом на выполнение сценария и тот факт, что Zend Engine является интерпретатором, приводят к неэффективности; в результате были разработаны различные продукты, помогающие улучшить производительность PHP. Чтобы ускорить время выполнения и не компилировать исходный код PHP каждый раз при доступе к веб-странице, сценарии PHP также можно развертывать во внутреннем формате движка PHP с помощью кэша опкодов , который работает путем кэширования скомпилированной формы PHP-скрипт (коды операций) в общей памяти, чтобы избежать накладных расходов на анализ и компиляцию кода при каждом запуске сценария. Кэш опкодов Zend Opcache встроен в PHP начиная с версии 5.5. [ 236 ] Другим примером широко используемого кэша кодов операций является альтернативный кэш PHP (APC), который доступен как расширение PECL . [ 237 ]
Хотя Zend PHP по-прежнему остается самой популярной реализацией, было разработано несколько других реализаций. Некоторые из них являются компиляторами или поддерживают JIT-компиляцию и, следовательно, предлагают преимущества в производительности по сравнению с Zend PHP за счет отсутствия полной совместимости с PHP. [ нужна ссылка ] Альтернативные реализации включают следующее:
- HHVM (виртуальная машина HipHop) – разработанная в Facebook и доступная с открытым исходным кодом, она преобразует код PHP в байт-код высокого уровня (широко известный как промежуточный язык ), который затем динамически преобразуется в машинный код x86-64 во время выполнения с помощью JIT -компилятор, что приводит к повышению производительности до 6 раз. [ 238 ] Однако, поскольку версия 7.2 Zend превзошла HHVM, [ 239 ] и HHVM 3.24 — последняя версия, официально поддерживающая PHP. [ 240 ]
- HipHop – разработанный в Facebook и доступный с открытым исходным кодом, он преобразует сценарии PHP в код C++ , а затем компилирует полученный код, снижая нагрузку на сервер до 50%. В начале 2013 года Facebook отказался от него в пользу HHVM по множеству причин, включая трудности с развертыванием и отсутствие поддержки всего языка PHP, включая
create_function()
иeval()
конструкции. [ 241 ]
- HipHop – разработанный в Facebook и доступный с открытым исходным кодом, он преобразует сценарии PHP в код C++ , а затем компилирует полученный код, снижая нагрузку на сервер до 50%. В начале 2013 года Facebook отказался от него в пользу HHVM по множеству причин, включая трудности с развертыванием и отсутствие поддержки всего языка PHP, включая
- Parrot – виртуальная машина, предназначенная для эффективной работы с динамическими языками; кросс-транслятор Pipp преобразует исходный код PHP в промежуточное представление Parrot , которое затем транслируется в байт-код Parrot и выполняется виртуальной машиной.
- PeachPie — компилятор второго поколения для . NET Common Intermediate Language (CIL) байт-код, построенный на платформе Roslyn ; преемник Фалангера, имеющий несколько архитектурных компонентов
- Phalanger — компилирует PHP в байт-код .Net Common Intermediate Language; предшественник PeachPie
- Quercus — компилирует PHP в байт-код Java.
Лицензирование
[ редактировать ]PHP — это бесплатное программное обеспечение , распространяемое по лицензии PHP , которая предусматривает, что: [ 242 ]
Продукты, полученные на основе этого программного обеспечения, не могут называться «PHP», а «PHP» не может появляться в их названии без предварительного письменного разрешения от [email protected] . Вы можете указать, что ваше программное обеспечение работает совместно с PHP, сказав « Foo for PHP» вместо того, чтобы называть его «PHP Foo» или «phpfoo».
Это ограничение на использование «PHP» делает лицензию PHP несовместимой с GNU General Public License (GPL), в то время как лицензия Zend несовместима из-за пункта о рекламе, аналогичного положению исходной лицензии BSD . [ 243 ]
Развитие и сообщество
[ редактировать ]PHP включает в свой дистрибутив исходного кода различные бесплатные библиотеки с открытым исходным кодом или использует их в результирующих двоичных сборках PHP. PHP — это, по сути, Интернет -система со встроенными модулями для доступа к серверам протокола передачи файлов (FTP) и многим серверам баз данных, включая PostgreSQL , MySQL , Microsoft SQL Server и SQLite (встроенная база данных), серверы LDAP и другие. . Многочисленные функции, знакомые программистам на языке C, например функции семейства stdio , доступны в стандартных сборках PHP. [ 244 ]
PHP позволяет разработчикам писать расширения на языке C , добавляющие функциональность языку PHP. Расширения PHP могут быть скомпилированы статически в PHP или загружены динамически во время выполнения. Было написано множество расширений для добавления поддержки Windows API , управления процессами в Unix-подобных операционных системах , многобайтовых строк ( Unicode ), cURL и нескольких популярных форматов сжатия . Другие функции PHP, доступные через расширения, включают интеграцию с Internet Relay Chat (IRC), динамическое создание изображений и содержимого Adobe Flash , объекты данных PHP (PDO) в качестве уровня абстракции, используемого для доступа к базам данных. [ 245 ] [ 246 ] [ 247 ] [ 248 ] [ 249 ] [ 250 ] [ 251 ] и даже синтез речи . Некоторые основные функции языка, например, работающие со строками и массивами, также реализованы как расширения. [ 252 ] Проект библиотеки расширений PHP (PECL) представляет собой хранилище расширений языка PHP. [ 253 ]
Некоторые другие проекты, такие как Zephir , предоставляют возможность создавать расширения PHP на языке высокого уровня и компилировать их в собственные расширения PHP. Такой подход вместо написания расширений PHP непосредственно на C упрощает разработку расширений и сокращает время, необходимое для программирования и тестирования. [ 254 ]
К декабрю 2018 года PHP Group состояла из десяти человек: Тис К. Арнтцен , Стиг Баккен , Шейн Каравео , Энди Гутманс , Расмус Лердорф , Сэм Руби , Саша Шуман , Зеев Сураски , Джим Уинстед и Андрей Змиевски . [ 255 ]
Zend Technologies предоставляет сертификацию PHP на основе PHP 7. [ 256 ] экзамен (ранее основанный на PHP 5.5) для программистов, желающих стать сертифицированными разработчиками PHP.
Фонд PHP
[ редактировать ]Формирование | 22 ноября 2021 г |
---|---|
Основатель | Automattic , Laravel , Acquia , Zend , Частный упаковщик, Symfony , Craft CMS, Tideways, PrestaShop , JetBrains [ 257 ] |
Веб-сайт | https://thephp.foundation |
26 ноября 2021 года блог JetBrains объявил о создании The PHP Foundation, который будет спонсировать проектирование и разработку PHP. [ 258 ]
Год | фиксирует | Отзывы | RFC |
---|---|---|---|
2022 [ 259 ] | 683 | 283 | 8 |
2023 [ 260 ] | 784 | 702 | 17 |
Фонд нанимает «Основных разработчиков» для работы над основным репозиторием языка PHP. Член правления фонда Роман Пронский заявил, что они намерены платить застройщикам "рыночные зарплаты". [ 261 ]
Реакция на фонд в основном была положительной: фонд хвалили за лучшую поддержку языка и помощь в прекращении падения популярности языка. [ 262 ] [ 263 ] Однако его также критиковали за добавление критических изменений в второстепенные версии PHP, например, в PHP 8.2, где инициализация членов класса вне исходной области действия класса приводила к ошибкам обесценивания. [ 264 ] эти изменения повлияли на ряд проектов с открытым исходным кодом, включая WordPress . [ 265 ]
Германии Суверенный технологический фонд выделил более 200 000 евро на поддержку PHP Foundation. [ 266 ]
Установка и настройка
[ редактировать ]Существует два основных способа добавить поддержку PHP на веб-сервер — в виде собственного модуля веб-сервера или в виде исполняемого файла CGI. PHP имеет прямой интерфейс модуля, называемый интерфейсом программирования серверных приложений (SAPI), который поддерживается многими веб-серверами, включая HTTP-сервер Apache , Microsoft IIS и веб-сервер iPlanet . Некоторые другие веб-серверы, такие как OmniHTTPd, поддерживают интерфейс программирования приложений интернет-сервера (ISAPI), который представляет собой интерфейс модуля веб-сервера Microsoft . Если PHP не поддерживает модули веб-сервера, его всегда можно использовать в качестве процессора Common Gateway Interface (CGI) или FastCGI ; в этом случае веб-сервер настроен на использование исполняемого файла CGI PHP для обработки всех запросов к файлам PHP. [ 267 ]
PHP-FPM (FastCGI Process Manager) — это альтернативная реализация FastCGI для PHP, входящая в состав официального дистрибутива PHP, начиная с версии 5.3.3. [ 268 ] По сравнению со старой реализацией FastCGI, она содержит некоторые дополнительные функции, в основном полезные для сильно нагруженных веб-серверов. [ 269 ]
При использовании PHP для сценариев командной строки интерфейса командной строки необходим исполняемый файл CLI (CLI) PHP. PHP поддерживает интерфейс программирования приложений сервера (SAPI), начиная с PHP 4.3.0. [ 270 ] Основное внимание в этом SAPI уделяется разработке оболочки приложений с использованием PHP. Между CLI SAPI и другими SAPI существует немало различий, хотя во многом они имеют одинаковое поведение. [ 271 ]
PHP имеет прямой интерфейс модуля под названием SAPI для различных веб-серверов; [ 272 ] в случае PHP 5 и Apache 2.0 в Windows он предоставляется в виде файла DLL с именем php5apache2.dll , [ 273 ] это модуль, который, помимо других функций, обеспечивает интерфейс между PHP и веб-сервером, реализованный в форме, понятной серверу. Эта форма известна как SAPI. [ нужна ссылка ]
Существуют разные типы SAPI для различных расширений веб-сервера. Например, в дополнение к перечисленным выше, другие SAPI для языка PHP включают интерфейс Common Gateway и интерфейс командной строки. [ 272 ] [ 274 ]
PHP также можно использовать для написания настольных приложений с графическим пользовательским интерфейсом (GUI) с помощью расширения PHP-GTK . PHP-GTK не включен в официальный дистрибутив PHP. [ 267 ] и как расширение его можно использовать только с версиями PHP 5.1.0 и новее. Самый распространенный способ установки PHP-GTK — это его компиляция из исходного кода. [ 275 ]
Когда PHP устанавливается и используется в облачных средах, комплекты разработки программного обеспечения (SDK) для использования функций, специфичных для облака. предоставляются [ нужна ссылка ] Например:
- Amazon Web Services предоставляет AWS SDK для PHP [ 276 ]
- Microsoft Azure можно использовать с Windows Azure SDK для PHP. [ 277 ]
Поддерживаются многочисленные параметры конфигурации, влияющие как на основные функции PHP, так и на расширения. [ 278 ] [ 279 ] Конфигурационный файл php.ini
ищется в разных местах, в зависимости от способа использования PHP. [ 280 ] Файл конфигурации разделен на различные разделы, [ 281 ] хотя некоторые параметры конфигурации также можно установить в конфигурации веб-сервера. [ 282 ]
Использовать
[ редактировать ]PHP — это язык сценариев общего назначения, который особенно подходит для на стороне сервера веб-разработки , и в этом случае PHP обычно запускается на веб-сервере . Любой код PHP в запрошенном файле выполняется средой выполнения PHP, обычно для создания динамического содержимого веб-страницы или динамических изображений, используемых на веб-сайтах или в других местах. [ 283 ] Его также можно использовать для сценариев командной строки и (GUI) на стороне клиента с графическим интерфейсом пользователя приложений . PHP можно развернуть на большинстве веб-серверов, во многих операционных системах и платформах , а также использовать со многими системами управления реляционными базами данных (СУБД). Большинство провайдеров веб-хостинга поддерживают PHP для использования своими клиентами. Он доступен бесплатно, и PHP Group предоставляет пользователям полный исходный код для создания, настройки и расширения для собственного использования. [ 17 ]
Первоначально разработанный для создания динамических веб-страниц , PHP теперь фокусируется в основном на написании сценариев на стороне сервера . [ 284 ] и он похож на другие серверные языки сценариев, которые передают динамический контент от веб-сервера клиенту , такие как Python , Microsoft от ASP.NET , Sun Microsystems от JavaServer Pages , [ 285 ] и mod_perl
. PHP также привлек внимание к разработке множества программных платформ , которые предоставляют строительные блоки и структуру проектирования для ускорения разработки приложений (RAD). [ нужна ссылка ] Некоторые из них включают PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon и Laminas , предлагающие функции, аналогичные другим веб-фреймворкам .
Архитектура LAMP стала популярной в веб-индустрии как способ развертывания веб-приложений. [ 286 ] PHP обычно используется как P в этом пакете наряду с Linux , Apache и MySQL , хотя P может также относиться к Python , Perl или их смеси. Аналогичные пакеты WAMP и MAMP также доступны для Windows и macOS , где первая буква обозначает соответствующую операционную систему. Хотя и PHP, и Apache включены в базовую установку macOS, пользователям этих пакетов нужен более простой механизм установки, который легче поддерживать в актуальном состоянии. [ нужна ссылка ]
Для конкретных и более сложных сценариев использования PHP предлагает четко определенный и документированный способ написания пользовательских расширений на C или C++ . [ 287 ] [ 288 ] [ 289 ] [ 290 ] [ 291 ] [ 292 ] [ 293 ] [ нужен неосновной источник ] Помимо расширения самого языка в виде дополнительных библиотек , расширения предоставляют возможность повысить скорость выполнения там, где это критично, и есть возможности для улучшений за счет использования настоящего компилируемого языка . [ 294 ] [ 295 ] PHP также предлагает четко определенные способы встраивания в другие программные проекты. Таким образом, PHP можно легко использовать в качестве внутреннего языка сценариев проекта для другого проекта, а также обеспечить тесное взаимодействие с конкретными внутренними структурами данных . [ 296 ]
PHP получил неоднозначные отзывы из-за отсутствия поддержки многопоточности на уровне ядра языка. [ 297 ] хотя использование потоков стало возможным благодаря расширению PECL «pthreads» . [ 298 ] [ 299 ]
интерфейс командной строки, php-cli и два скриптовых механизма ActiveX Windows Script Host для PHP. Были созданы [ нужна ссылка ]
Статистика популярности и использования
[ редактировать ]PHP используется для систем управления веб-контентом, включая MediaWiki , [ 300 ] WordPress , [ 301 ] Джумла , [ 302 ] Друпал , [ 303 ] Мудл , [ 304 ] eZ Publish , eZ Platform и SilverStripe . [ 305 ]
По состоянию на январь 2013 г. [update]PHP использовался на более чем 240 миллионах веб-сайтов (39% из выборки) и был установлен на 2,1 миллиона веб-серверов . [ 306 ]
По состоянию на 23 июля 2024 г. [update] (через восемь месяцев после выпуска PHP 8.3) PHP используется в качестве серверного языка программирования на 76,1% веб-сайтов, язык которых можно определить; PHP 7 является наиболее используемой версией языка: 53% веб-сайтов, использующих PHP, используют эту версию, 32,5% используют PHP 8, 14,3% используют PHP 5 и 0,2% используют PHP 4. [ 19 ]
32.5%
53%
14.3%
0.2%
|
Безопасность
[ редактировать ]В 2019 году 11% всех уязвимостей, перечисленных в Национальной базе данных уязвимостей, были связаны с PHP; [ 311 ] исторически около 30% всех уязвимостей, перечисленных в этой базе данных с 1996 года, связаны с PHP. Технические недостатки безопасности самого языка или его основных библиотек встречаются нечасто (22 в 2009 году, около 1% от общего числа, хотя PHP применим примерно к 20% перечисленных программ). [ 312 ] Признавая, что программисты допускают ошибки, некоторые языки включают проверку на наличие ошибок , чтобы автоматически обнаруживать отсутствие проверки ввода , что вызывает множество проблем. Такая функция разрабатывается для PHP, [ 313 ] но в прошлом его включение в релиз несколько раз отклонялось. [ 314 ] [ 315 ]
Существуют исправления расширенной защиты, такие как Suhosin и Hardening -Patch, специально разработанные для сред веб-хостинга. [ 316 ]
Исторически сложилось так, что старые версии PHP имели некоторые параметры конфигурации и значения по умолчанию для таких настроек времени выполнения, что делало некоторые приложения PHP уязвимыми к проблемам с безопасностью. Среди них magic_quotes_gpc
и register_globals
[ 317 ] директивы конфигурации были наиболее известны; последний превратил любые параметры URL-адреса в переменные PHP, открывая путь для серьезных уязвимостей безопасности, позволяя злоумышленнику устанавливать значение любой неинициализированной глобальной переменной и мешать выполнению PHP-скрипта. Поддержка настроек « волшебных кавычек » и «регистрации глобальных переменных» устарела, начиная с PHP 5.3.0, и удалена из PHP 5.4.0. [ 318 ]
Другой пример потенциальной уязвимости в настройках времени выполнения — невозможность отключить выполнение PHP (например, с помощью engine
директива конфигурации) [ 319 ] для каталога, в котором хранятся загруженные файлы; его включение может привести к выполнению вредоносного кода, встроенного в загруженные файлы. [ 320 ] [ 321 ] [ 322 ] Лучше всего либо найти каталог изображений за пределами корня документа, доступного веб-серверу, и обслуживать его через промежуточный скрипт, либо отключить выполнение PHP для каталога, в котором хранятся загруженные файлы. [ нужна ссылка ]
Кроме того, включение динамической загрузки расширений PHP (через enable_dl
директива конфигурации) [ 323 ] в среде общего веб-хостинга может привести к проблемам с безопасностью. [ 324 ] [ 325 ]
Неявные преобразования типов , в результате которых разные значения рассматриваются как равные, иногда вопреки намерениям программиста, могут привести к проблемам безопасности. Например, результат сравнения '0e1234' == '0'
является true
, поскольку строки, которые можно анализировать как числа, преобразуются в числа; в этом случае первое сравниваемое значение рассматривается как экспоненциальное обозначение, имеющее значение ( 0 × 10 1234 ), что равно нулю. Подобные ошибки приводили к уязвимостям аутентификации на форуме Simple Machines , [ 326 ] Опечатка3 [ 327 ] и phpBB [ 328 ] при MD5 хешей паролей сравнении . Рекомендуемый способ — использовать hash_equals()
(для безопасности атаки по времени ), strcmp
или оператор идентификации ( ===
), как '0e1234' === '0'
приводит к false
. [ нужна ссылка ]
В анализе более 170 000 дефейсов веб-сайтов , опубликованном Zone-H в 2013 году , наиболее часто (53%) используемым методом была эксплуатация уязвимости включения файлов , в основном связанная с небезопасным использованием конструкций языка PHP. include
, require
, и allow_url_fopen
. [ 329 ] [ 330 ]
Настоятельно рекомендуется перейти на PHP 8.1 или более позднюю версию и использовать random_int()
[ 331 ] вместо rand()
[ 332 ] или mt_rand()
, [ 333 ] поскольку последние функции не являются криптографически безопасными. Существует две атаки, которые можно осуществить на источники энтропии PHP: «начальная атака» и «атака восстановления состояния». [ нужна ссылка ] стоимостью 250 долларов По состоянию на 2012 год графический процессор может выполнять до 2 30 Вычисления MD5 в секунду, а графический процессор стоимостью 750 долларов может выполнять в четыре раза больше вычислений одновременно. [ 334 ] В сочетании с « атакой дня рождения » это может привести к серьезным уязвимостям безопасности. [ нужна ссылка ]
По состоянию на 23 июля 2024 г. [update] (через 8 месяцев после выпуска PHP 8.3) W3Techs сообщает, что 77,4% веб-сайтов, использующих PHP, используют версии 8.0 или старше (которые больше не поддерживаются командой разработчиков PHP). [ 335 ] PHP версии 5 по-прежнему используется на 14,3% всех веб-сайтов. [ 308 ]
Zend предлагает платную активную долгосрочную поддержку PHP (PHP LTS), которая включает исправления безопасности:
- опционально платно за поддерживаемые версии PHP;
- платится только за устаревшие ветки PHP, включая:
- 8.0 до конца 2025 года;
- 7.4, 7.3 и 7.2 до конца 2026 года.
Срок платной поддержки каждой ветки, начиная с выпуска исходной стабильной версии, составляет не менее 5 лет. [ 336 ]
■ 8.1
22.62%
Поддерживаемые версии PHP [ 337 ]
■ 7.4 ■ 7.3 ■ 7.2
58.75%
Неподдерживаемые ветки (доступен PHP LTS) [ 338 ]
■ 5.x ■ 4.x
18.70%
Неподдерживаемые ветки [ 18 ]
|
См. также
[ редактировать ]- Сравнение языков программирования
- Список пакетов Apache – MySQL – PHP
- Список ускорителей PHP
- Список редакторов PHP
- PEAR (репозиторий расширений и приложений PHP)
- PHP-ускоритель
- Процессор шаблонов
- XAMPP (бесплатный пакет кроссплатформенных веб-серверных решений с открытым исходным кодом)
- Zend-сервер
Ссылки
[ редактировать ]- ^ Jump up to: а б Лердорф, Расмус (8 июня 1995 г.). «Анонс: инструменты личной домашней страницы (инструменты PHP)» . Проверено 7 июня 2011 г.
- ^ Jump up to: а б Лердорф, Расмус (26 апреля 2007 г.). «PHP на гормонах - история презентации PHP Расмусом Лердорфом на конференции MySQL в Санта-Кларе, Калифорния» . Сеть разговоров. Архивировано из оригинала 6 января 2019 г. Проверено 11 декабря 2009 г.
- ^ «PHP: Архив новостей — 2024» . www.php.net .
- ^ «PHP: Аргументы функции – Руководство» . Secure.php.net .
- ^ «PHP: Архивы релизов (музей)» . музей.php.net .
- ^ «PHP: Предисловие – Руководство» .
- ^ Стогов, Дмитрий [@dstogov] (04.12.2015). «Не секрет, что некоторые идеи по оптимизации #PHP7 пришли из HHVM, LuaJIT и V8. Спасибо @HipHopVM @SaraMG. #php7thankyou» ( твит ) – через Twitter .
- ^ «PHP: препроцессор гипертекста» . www.php.net . Проверено 12 февраля 2020 г.
- ^ Jump up to: а б Крил, Пол (18 ноября 2013 г.). «Верьте шумихе: основатель PHP поддерживает технологию Facebook HipHop» . Инфомир . Проверено 13 октября 2022 г.
- ^ «Анонс: инструменты личной домашней страницы (инструменты PHP)» . groups.google.com . Проверено 3 ноября 2022 г.
- ^ Jump up to: а б с д и ж г час я «История PHP и связанных с ним проектов» . Группа PHP . Проверено 25 февраля 2008 г.
- ^ Jump up to: а б «История PHP» . php.net .
- ^ Олссон, Микаэль (04 сентября 2013 г.). Краткое руководство по написанию сценариев PHP . Апресс. ISBN 978-1-4302-6284-8 .
- ^ Руководство по PHP: Предисловие , www.php.net.
- ^ «Введение: что может PHP?» . Руководство по PHP . Проверено 5 марта 2009 г.
- ^ вертолет: порт node-ar-drone, который позволяет пользователю управлять дроном Parrot AR через PHP: jolicode/php-ar-drone , JoliCode, 11 января 2019 г. , получено 23 февраля 2019 г.
- ^ Jump up to: а б «Встраивание PHP в HTML» . О'Рейли. 3 мая 2001 г. Архивировано из оригинала 19 февраля 2008 г. Проверено 25 февраля 2008 г.
- ^ Jump up to: а б «PHP: неподдерживаемые ветки» . www.php.net .
- ^ Jump up to: а б с «Статистика использования PHP для веб-сайтов» . W3Techs – Обзоры технологий Всемирной паутины . W3Techs . Проверено 23 июля 2024 г.
- ^ Лердорф, Расмус (20 июля 2012 г.). «Интересно, почему люди продолжают писать, что PHP когда-либо был написан на Perl. Это никогда не было. #php» . Твиттер . Проверено 4 сентября 2014 г.
- ^ Лердорф, Расмус (26 апреля 2007 г.). «ПГП на гормонах» . Сеть разговоров. Архивировано из оригинала (mp3) 6 января 2019 г. Проверено 22 июня 2009 г.
- ^ Лердорф, Расмус (2007). «Слайд 3» . слайды к докладу «PHP о гормонах» . Группа PHP . Проверено 22 июня 2009 г.
- ^ Лердорф, Расмус (8 июня 1995 г.). «Анонс: инструменты личной домашней страницы (инструменты PHP)» . Группа новостей : comp.infosystems.www.authoring.cgi . Проверено 17 сентября 2006 г.
- ^ «Расмус Лердорф, старший технический специалист Yahoo: PHP, за микрофоном» . 19 ноября 2003 г. Архивировано из оригинала 28 июля 2013 г.
- ^ Альшетви, AB; Рахмат, РААО; Борхан, Миннесота; Исмаэль, С.; Али, А.; Иртема, ХИМ; Альфахрия, AY (2018). «Интернет-экспертная система для оптимизации дорожного движения в развивающихся странах» . Проверено 13 февраля 2024 г.
- ^ «Проблемы с PHP» . Проверено 20 декабря 2010 г.
- ^ "php.internals: Re: Согласованность имени функции" . news.php.net . 28 декабря 2013 г. Проверено 9 февраля 2014 г.
- ^ Расмус Лердорф (16 декабря 2013 г.). «Re: Гибкое именование функций» . Группа новостей : php.internals . Проверено 26 декабря 2013 г.
- ^ «PHP — аббревиатура, означающая голосование» . PHP.net . Архивировано из оригинала 15 августа 2000 года.
- ^ «Zend Engine версии 2.0: обзор функций и дизайн» . Zend Technologies Ltd. Архивировано из оригинала 19 июля 2006 г. Проверено 17 сентября 2006 г.
- ^ «Архив новостей php.net 2007» . Группа PHP. 13 июля 2007 г. Проверено 22 февраля 2008 г.
- ^ Кернер, Шон Майкл (1 февраля 2008 г.). «PHP 4 мертв — да здравствует PHP 5» . ИнтернетНовости. Архивировано из оригинала 6 августа 2018 г. Проверено 16 декабря 2018 г.
- ^ Трахтенберг, Адам (15 июля 2004 г.). «Почему PHP 5 потрясающий!» . О'Рейли. Архивировано из оригинала 31 марта 2016 г. Проверено 22 февраля 2008 г.
- ^ «Позднее статическое связывание в PHP» . Цифровой сэндвич. 23 февраля 2006 г. Проверено 25 марта 2008 г.
- ^ «Статическое ключевое слово» . Группа PHP . Проверено 25 марта 2008 г.
- ^ «GoPHP5» . Архивировано из оригинала 17 июля 2011 г.
- ^ «Проекты PHP объединяют усилия для перехода на PHP 5» (PDF) . Пресс-релиз GoPHP5 . Архивировано из оригинала (PDF) 4 августа 2019 г. Проверено 23 февраля 2008 г.
- ^ «GoPHP5» . GoPHP5. Архивировано из оригинала 27 апреля 2011 г. Проверено 22 февраля 2008 г.
- ^ «Установка и настройка PHP» . php.net . Проверено 29 октября 2013 г.
- ^ «PHP для Windows: выпуски двоичных файлов и исходного кода (5.3)» . php.net . Проверено 29 октября 2013 г.
- ^ «PHP для Windows: выпуски двоичных файлов и исходного кода (5.4)» . php.net . Проверено 29 октября 2013 г.
- ^ «PHP для Windows: выпуски двоичных файлов и исходного кода (5.5)» . php.net . Проверено 29 октября 2013 г.
- ^ «PHP: Поддерживаемые версии» .
- ^ «Типы: строки (Руководство PHP)» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «Подробное описание строкового типа (Руководство по PHP)» . PHP.net . Проверено 22 сентября 2021 г.
- ^ Андрей Змиевский (10 августа 2005 г.). «Документ по проектированию поддержки PHP Unicode» (список рассылки) . Проверено 9 февраля 2014 г.
- ^ «PHP 5.5 или 6.0» . Проверено 9 февраля 2014 г.
- ^ Андрей Змиевский (22 апреля 2011 г.). «Хороший, плохой и злой: что случилось с Unicode и PHP 6» . Проверено 9 февраля 2014 г.
- ^ Расмус Лердорф (11 марта 2010 г.). «PHP 6» (список рассылки) . Проверено 7 февраля 2014 г.
- ^ «Бесконечные маппет-дебаты между PHP 6 и PHP 7» . Архивировано из оригинала 19 ноября 2015 г. Проверено 19 ноября 2015 г.
- ^ «RFC: название следующей версии PHP» . php.net . 07.07.2014 . Проверено 15 июля 2014 г.
- ^ «Re: [PHP-DEV] [VOTE] [RFC] Название следующей версии PHP (снова)» . 30 июля 2014 г. Проверено 30 июля 2014 г.
- ^ «phpng: обновленный PHP-движок с большим улучшением производительности» . news.php.net .
- ^ «PHP: rfc:phpng» . php.net . Проверено 16 декабря 2014 г.
- ^ Jump up to: а б «PHP: phpng» . php.net . Проверено 15 июля 2014 г.
- ^ «Объединить ветку ZendEngine3 » . github.com . 05.12.2014 . Проверено 5 декабря 2014 г.
- ^ Jump up to: а б с «PHP: Процесс выпуска» . 20 июня 2011 г. Проверено 6 октября 2013 г.
- ^ Jump up to: а б «PHP RFC: Исключения в движке (для PHP 7)» . php.net . Проверено 21 мая 2015 г.
- ^ Jump up to: а б «PHP RFC: унифицированный синтаксис переменных» . php.net . 31 мая 2014 г. Проверено 30 июля 2014 г.
- ^ «Онлайн-редактор PHP | вывод для udRhX» . 3v4l.org .
- ^ «PHP RFC: исправлено поведение «foreach»» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: поведение конструктора внутренних классов» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: Удаление мертвых или еще не перенесенных PHP7 SAPI и расширений» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: исправлено несогласованность поведения list()» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: удаление альтернативных тегов PHP» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: сделать определение нескольких вариантов по умолчанию в переключателе синтаксической ошибкой» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: удалить поддержку шестнадцатеричного формата в числовых строках» . php.net . Проверено 21 мая 2015 г.
- ^ Jump up to: а б «PHP RFC: целочисленная семантика» . php.net . Проверено 21 мая 2015 г.
Если NaN и Infinity всегда становятся равными нулю при приведении к целому числу, это означает большую межплатформенную согласованность, а также менее удивительно, чем то, что происходит в настоящее время.
- ^ «PHP RFC: сбой ZPP при переполнении» . php.net . Проверено 21 мая 2015 г.
- ^ Jump up to: а б с «RFC: типы возвращаемых данных» . php.net . 27 января 2015 г. Проверено 28 января 2015 г.
- ^ Jump up to: а б с д и ж «RFC: Объявления скалярных типов» . php.net . 16 марта 2015 г. Проверено 17 марта 2015 г.
- ^ Jump up to: а б с д и ж г час я дж к л Брент. «Что нового в PHP 8» . Сшиватель . Проверено 22 сентября 2020 г.
- ^ Jump up to: а б «Выпущен PHP 8» . PHP . Проверено 27 ноября 2020 г.
- ^ Jump up to: а б «PHP: rfc:jit» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ Брент. «PHP 8: производительность JIT в реальных веб-приложениях» . Сшиватель.io . Проверено 4 октября 2020 г.
- ^ Ретемс, Дерик. «PHP 8: краткий обзор JIT» .
- ^ Jump up to: а б Попов, Никита (13 июля 2020 г.). « Что нового в PHP 8.0?» Никита Попов» . PHP по пятницам. Архивировано из оригинала 11 декабря 2021 г. Проверено 4 октября 2020 г.
- ^ Даниэле, Карло (25 мая 2020 г.). «Что нового в PHP 8 (функции, улучшения и JIT-компилятор)» . Кинста . Проверено 24 декабря 2020 г.
- ^ Редмонд, Пол (15 июля 2020 г.). «Выражение соответствия появится в PHP 8» . Новости Ларавел . Проверено 4 октября 2020 г.
- ^ «PHP 8.0: Сопоставление выражений» . PHP Смотреть . Проверено 4 октября 2020 г.
- ^ Барнс, Эрик (27 ноября 2020 г.). «PHP 8 уже выпущен!» . Новости Ларавел . Проверено 24 декабря 2020 г.
- ^ Jump up to: а б «PHP RFC: выражение throw» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ Jump up to: а б «PHP RFC: оператор Nullsafe» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ Русе, Брент. «PHP 8: Продвижение свойств конструктора» . Проверено 30 апреля 2024 г.
- ^ Jump up to: а б «PHP: rfc:weakrefs» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ Купец, Амит (13 июня 2020 г.). «Эти новые строковые функции появятся в PHP 8» . Амит Мерчант . Проверено 4 октября 2020 г.
- ^ Попов, Никита. «Призыв к участию: аннотирование внутренних аргументов функции и типов возвращаемых значений» . Внешние . Проверено 19 ноября 2020 г. .
- ^ «Журнал изменений PHP 8» . PHP.net . Проверено 5 января 2024 г.
- ^ «PHP: Объявление о выпуске PHP 8.1.0» . PHP.net . Проверено 5 января 2024 г.
- ^ «Журнал изменений PHP 8» . PHP.net . Проверено 5 января 2024 г.
- ^ «PHP: Объявление о выпуске PHP 8.2.0» . PHP.net . Проверено 5 января 2024 г.
- ^ Jump up to: а б с д и ж г час я дж к л «Неподдерживаемые ветки» . php.net . Проверено 31 июля 2019 г.
- ^ «Выпущен PHP 4.0.0» . Проверено 25 октября 2020 г.
- ^ Jump up to: а б с д «PHP: Журнал изменений PHP 4» . Группа PHP. 3 января 2008 г. Проверено 22 февраля 2008 г.
- ^ «Объявление о выпуске PHP 4.1.0» . Проверено 25 октября 2020 г.
- ^ «Объявление о выпуске PHP 4.2.0» . Проверено 25 октября 2020 г.
- ^ «Объявление о выпуске PHP 4.3.0» . Проверено 25 октября 2020 г.
- ^ «Использование PHP из командной строки» . Руководство по PHP . Группа PHP . Проверено 11 сентября 2009 г.
- ^ «Объявление о выпуске PHP 4.4.0» . Проверено 25 октября 2020 г.
- ^ «Объявление о выпуске PHP 4.4.0» . Руководство по PHP . Группа PHP . Проверено 24 ноября 2013 г.
- ^ «Выпущен PHP 5.0.0!» . Проверено 25 октября 2020 г.
- ^ Jump up to: а б с «PHP: Журнал изменений PHP 5» . Группа PHP. 08.11.2007 . Проверено 22 февраля 2008 г.
- ^ «Объявление о выпуске PHP 5.1.0» . Проверено 25 октября 2020 г.
- ^ «Руководство PHP: PDO» . Группа PHP. 15 ноября 2011 г. Проверено 15 ноября 2011 г.
- ^ «Объявление о выпуске PHP 5.2.0» . Проверено 25 октября 2020 г.
- ^ «Объявление о выпуске PHP 5.3.0» . Проверено 25 октября 2020 г.
- ^ «Объявление о выпуске PHP 5.4.0» . Проверено 25 октября 2020 г.
- ^ «Встроенный веб-сервер» . Проверено 26 марта 2012 г.
- ^ «Объявление о выпуске PHP 5.5.0» . Проверено 25 октября 2020 г.
- ^ Jump up to: а б с д «Поддерживаемые версии» . php.net . Проверено 13 декабря 2017 г.
- ^ «Изменения PHP 5.5.0» . php.net . Проверено 3 марта 2015 г.
- ^ «Объявление о выпуске PHP 5.6.0» . Проверено 25 октября 2020 г.
- ^ «Миграция с PHP 5.5.x на PHP 5.6.x» . php.net . Проверено 24 марта 2014 г.
- ^ «Сброс PHP 6» .
На полках лежат книги, посвященные PHP 6, по крайней мере, с 2008 года. Но в марте 2010 года версия PHP 6 еще не вышла – на самом деле, она даже не близка к выходу. Недавние события позволяют предположить, что PHP 6 не будет выпущен раньше 2011 года – если он вообще будет выпущен.
- ^ «PHP 7 движется вперед на полной скорости» . 31 октября 2014 г.
Последние версии PHP были частью серии выпусков 5.x, но PHP 6 не будет. «Мы собираемся пропустить [версию] 6, потому что много лет назад у нас были планы на 6, но эти планы были очень отличается от того, что мы делаем сейчас», — сказал Гутманс. Переход сразу к версии 7 позволит избежать путаницы.
- ^ «Архив новостей – 2018: Выпущен PHP 7.2.9» . php.net . 16 августа 2018 г. Проверено 16 августа 2018 г.
- ^ «PHP: rfc:size_t_and_int64_next» . php.net . Проверено 16 декабря 2014 г.
- ^ «PHP: rfc:abstract_syntax_tree» . php.net . Проверено 16 декабря 2014 г.
- ^ «PHP: rfc:closure_apply» . php.net . Проверено 16 декабря 2014 г.
- ^ «PHP: rfc:integer_semantics» . php.net . Проверено 16 декабря 2014 г.
- ^ «PHP: rfc:isset_ternary» . php.net . Проверено 16 декабря 2014 г.
- ^ «RFC: синтаксис escape-кода Unicode» . 24 ноября 2014 г. Проверено 19 декабря 2014 г.
- ^ «Оператор комбинированного сравнения (космического корабля)» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: делегирование генератора» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: анонимные классы» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: простой CSPRNG для пользователя» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP RFC: декларации группового использования» . php.net . Проверено 21 мая 2015 г.
- ^ «PHP: rfc:iterable» . php.net . 10.06.2016 . Проверено 30 июня 2023 г.
- ^ «PHP: rfc:nullable_types» . php.net . 10 апреля 2014 г. Проверено 30 июня 2023 г.
- ^ «PHP: rfc:void_return_type» . php.net . 09.11.2015 . Проверено 14 ноября 2015 г.
- ^ «PHP: rfc:class_constant_visibility» . php.net . 27.10.2015 . Проверено 8 декабря 2015 г.
- ^ «PHP: rfc:short_list_syntax» . php.net . 07.04.2016 . Проверено 30 июня 2023 г.
- ^ «PHP: rfc:multiple-catch» . php.net . 06.03.2016 . Проверено 30 июня 2023 г.
- ^ «PHP: rfc:object-typehint» . wiki.php.net .
- ^ «PHP: rfc:libsodium» . wiki.php.net .
- ^ «PHP: rfc:allow-abstract-function-override» . wiki.php.net .
- ^ «PHP: rfc:parameter-no-type-variance» . wiki.php.net .
- ^ «PHP: todo:php73» . wiki.php.net .
- ^ «PHP: rfc:flexible_heredoc_nowdoc_syntaxes» . wiki.php.net .
- ^ «PHP: rfc:list_reference_assignment» . wiki.php.net .
- ^ «PHP: rfc:pcre2-миграция» . wiki.php.net .
- ^ «PHP: hrtime – Руководство» . php.net .
- ^ «Выпущен PHP 7.4.0!» . php.net . Проверено 28 ноября 2019 г.
- ^ «PHP: rfc:typed_properties_v2» . wiki.php.net . Проверено 4 апреля 2019 г.
- ^ «PHP: rfc:preload» . wiki.php.net . Проверено 4 апреля 2019 г.
- ^ «PHP: rfc:null_coalesce_equal_operator» . wiki.php.net . Проверено 4 апреля 2019 г.
- ^ «PHP: rfc:improve-openssl-random-pseudo-bytes» . wiki.php.net . Проверено 4 апреля 2019 г.
- ^ «PHP: rfc:ffi» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:permanent_hash_ext» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:password_registry» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:mb_str_split» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:reference_reflection» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:deprecate-and-remove-ext-wddx» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:custom_object_serialization» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: Поддерживаемые версии» . php.net . Проверено 26 ноября 2023 г.
- ^ «PHP: rfc:negative_array_index» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP RFC: проверка абстрактных методов свойств» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: более разумное сравнение строк и чисел» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: более разумные числовые строки» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: более строгие проверки типов для арифметических/побитовых операторов» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: реклассификация предупреждений модуля» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP: rfc:consistent_type_errors» . wiki.php.net . Проверено 5 апреля 2019 г.
- ^ «PHP: rfc:lsp_errors» . wiki.php.net . Проверено 26 мая 2019 г.
- ^ «PHP RFC: независимое от локали преобразование числа с плавающей запятой в строку» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: настройки синтаксиса переменных» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: Атрибуты V2» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: поправки к атрибутам» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: сокращенный синтаксис атрибутов» . wiki.php.net . Проверено 20 июня 2020 г.
- ^ «PHP RFC: изменение синтаксиса более коротких атрибутов» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: именованные аргументы» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: выражение соответствия v2» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: продвижение свойств конструктора» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: типы объединения 2.0» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: смешанный тип v2» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: статический тип возвращаемого значения» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ «PHP RFC: уловы без захвата» . wiki.php.net . Проверено 14 августа 2020 г.
- ^ Андре, Тайсон. «PHP RFC: всегда доступное расширение JSON» . PHP . Проверено 25 октября 2020 г.
- ^ «PHP: todo:php81» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP RFC: явная запись восьмеричного целого числа» . wiki.php.net . Проверено 25 ноября 2020 г.
- ^ «PHP RFC: перечисления» . wiki.php.net . Проверено 25 марта 2021 г.
- ^ «PHP: rfc:readonly_properties_v2» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:first_class_callable_syntax» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:new_in_initializers» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:pure-intersection-types» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:noreturn_type» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:final_class_const» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: rfc:fibers» . wiki.php.net . Проверено 26 ноября 2021 г.
- ^ «PHP: todo:php82» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP: rfc:readonly_classes» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP: rfc:null-false-standalone-types» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP: rfc:true-type» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP: rfc:strtolower-ascii» . wiki.php.net . Проверено 16 июня 2022 г.
- ^ «PHP: rfc:dnf_types» . wiki.php.net . Проверено 7 февраля 2023 г.
- ^ «PHP: rfc:constants_in_traits» . wiki.php.net . Проверено 7 февраля 2023 г.
- ^ «Выпущен PHP 8.3.0!» . php.net . 23 ноября 2023 г. Проверено 24 ноября 2023 г.
- ^ «PHP: rfc:typed_class_constants» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: rfc:dynamic_class_constant_fetch» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: rfc:marking_overriden_methods» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: rfc:readonly_amendments» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: rfc:json_validate» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: rfc:randomizer_additions» . wiki.php.net . Проверено 17 декабря 2023 г.
- ^ «PHP: задача: php84» . php.net . 26 марта 2024 г. Проверено 26 марта 2024 г.
- ^ «PHP: ЭлеPHPant» . 4 октября 2014 г. Проверено 4 октября 2014 г.
- ^ «Перенаправление…» . wwwphp-fb.github.io .
- ^ «Рождение талисмана PHP — создатель elePHPant Винсент Понтье раскрывает правдивую историю!» . 7php.com . 06 января 2014 г.
- ^ «ЭлеФПант» . PHP.земля . Проверено 13 февраля 2024 г.
- ^ «PHP: ЭлеPHPant» . www.php.net .
- ^ «Полевой справочник по слонам» . afieldguidetoelephpants.net .
- ^ «теги – Руководство» . php.net . Проверено 17 февраля 2014 г.
- ^ «PHP: Основной синтаксис» . Группа PHP . Проверено 22 февраля 2008 г.
- ^ «Базовый стандарт кодирования» . Группа совместимости PHP Framework . Проверено 03 января 2016 г.
- ^ «эхо – Руководство» . php.net . Проверено 17 февраля 2014 г.
- ^ «Описание основных директив php.ini – Руководство» . php.net . 17 марта 2002 г. Проверено 17 февраля 2014 г.
- ^ «Ваша первая страница с поддержкой PHP» . Группа PHP . Проверено 25 февраля 2008 г.
- ^ Брей, Тим; и др. (26 ноября 2008 г.). «Инструкция по обработке» . Расширяемый язык разметки (XML) 1.0 (пятое издание) . W3C . Проверено 18 июня 2009 г.
- ^ «Переменные» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Разделение инструкций» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Комментарии» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Целые числа в PHP, работа с ножницами и переносимость» . Блог о производительности MySQL. 27 марта 2007 года . Проверено 28 марта 2007 г.
- ^ Jump up to: а б с д и «Типы» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Струны» . Группа PHP . Проверено 21 марта 2008 г.
- ^ «SPL – Стандартная библиотека PHP» . PHP.net . 16 марта 2009 года . Проверено 16 марта 2009 г.
- ^ Jump up to: а б «Пользовательские функции (руководство по PHP)» . php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
- ^ Jump up to: а б «Функции переменных (руководство PHP)» . php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
- ^ «create_function() (руководство по PHP)» . php.net . 06.04.2022 . Проверено 4 мая 2022 г.
- ^ «Анонимные функции (руководство PHP)» . php.net . 04 июля 2014 г. Проверено 7 июля 2014 г.
- ^ «Стрелочные функции (руководство по PHP)» . php.net . Проверено 25 января 2021 г.
- ^ Кристиан Зейлер; Дмитрий Стогов (01.07.2008). «Запрос комментариев: Лямбда-функции и замыкания» . php.net . Проверено 7 июля 2014 г.
- ^ Jump up to: а б «Ссылки на объекты PHP 5» . mjtsai.com . Проверено 16 марта 2008 г.
- ^ «Классы и объекты (PHP 5)» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Клонирование объектов» . Группа PHP . Проверено 16 марта 2008 г.
- ^ «Видимость (Руководство PHP)» . theserverpages.com . 19 мая 2005 г. Архивировано из оригинала 24 сентября 2010 г. Проверено 26 августа 2010 г.
- ^ «Как работают компьютерные языки?» . Архивировано из оригинала 16 июля 2011 г. Проверено 4 ноября 2009 г.
- ^ Гилмор, В. Джейсон (23 января 2006 г.). Начало PHP и MySQL 5: от новичка до профессионала . Апресс. п. 43 . ISBN 1590595521 .
- ^ «[ГОЛОСОВАНИЕ] Интеграция Zend Optimizer+ в дистрибутив PHP» . news.php.net . Проверено 8 марта 2013 г.
- ^ «Альтернативный PHP-кеш» . PHP.net . Архивировано из оригинала 15 ноября 2013 г. Проверено 21 сентября 2013 г.
- ^ «На 98,5% (и на 16%) мы — «виртуальная машина хип-хопа» . hhvm.com . Декабрь 2013 года . Проверено 23 февраля 2014 г.
- ^ «Окончательные тесты PHP 5.6, 7.0, 7.1, 7.2 и 7.3 (2019)» . 14 января 2019 г. Проверено 19 апреля 2019 г.
- ^ Криль, Пол (20 сентября 2017 г.). «Забудьте о PHP! Вместо этого движок HHVM Facebook переключается на Hack» . Инфомир . Проверено 06 февраля 2019 г.
- ^ «Объявление об удалении GitHub поддержки HPHPc» . Гитхаб . Проверено 24 мая 2013 г.
- ^ «Лицензия PHP, версия 3.01» . Проверено 20 мая 2010 г.
- ^ «Лицензии свободного программного обеспечения, несовместимые с GPL» . Различные лицензии и комментарии к ним . Фонд свободного программного обеспечения . Проверено 3 января 2011 г.
- ^ «PHP: Список функций и методов – Руководство» . Группа PHP . Проверено 14 января 2015 г.
- ^ «Введение – Руководство» . php.net . 07.06.2013 . Проверено 13 июня 2013 г.
- ^ Дэррил Паттерсон (5 августа 2004 г.). «Упрощение бизнес-логики с помощью PHP DataObjects — O'Reilly Media» . IBM.com . Архивировано из оригинала 16 декабря 2014 года . Проверено 16 декабря 2014 г.
- ^ «ИБМ — США» . Проверено 16 декабря 2014 г.
- ^ «Пять распространенных проблем с базами данных PHP» . IBM.com . 01 августа 2006 г. Проверено 13 июня 2013 г.
- ^ «Справочники IBM — Разработка приложений PHP для серверов данных IBM» . redbooks.ibm.com . Проверено 16 декабря 2014 г.
- ^ «Журнал php[architect] — журнал для PHP-программистов» . www.phparch.com .
- ^ Крил, Пол (19 октября 2005 г.). «PHP завоевывает популярность на предприятиях, конкурируя с Java» . Инфомир . Архивировано из оригинала 13 июля 2014 года.
- ^ «Перекрестная ссылка: /PHP_5_4/ext/standard/» . php.net . Архивировано из оригинала 16 марта 2012 года . Проверено 16 декабря 2014 г.
- ^ «Разработка пользовательских расширений PHP» . devnewz.com . 9 сентября 2002 г. Архивировано из оригинала 18 февраля 2008 г. Проверено 25 февраля 2008 г.
- ^ «Почему Зефир?» . zephir-lang.com . 20 октября 2015 г. Проверено 14 декабря 2015 г.
- ^ «Кредиты PHP» . Проверено 16 декабря 2018 г.
- ^ «Изучите PHP посредством обучения PHP и сертификации PHP» . www.zend.com . Проверено 16 ноября 2020 г.
- ^ Уокер, Джеймс (13 декабря 2021 г.). «Что новый фонд PHP означает для будущего PHP» . Как компьютерщик . Проверено 26 ноября 2023 г.
- ^ «Новая жизнь PHP – PHP Foundation | Блог PhpStorm» . Блог JetBrains . 22 ноября 2021 г. Проверено 16 июня 2022 г.
- ^ «Фонд PHP: Отчет о влиянии и прозрачности 2022» . thephp.foundation . Проверено 27 ноября 2023 г.
- ^ Пронский, Роман (26 февраля 2024 г.). «Фонд PHP: отчет о влиянии и прозрачности 2023» . Фонд PHP . Проверено 1 апреля 2024 г.
- ^ Андерсон, Тим. «Фонд PHP создан для финансирования основных разработчиков» . www.theregister.com . Проверено 5 декабря 2023 г.
- ^ «Языки программирования: этот старый фаворит снова набирает популярность» . ЗДНЕТ . Проверено 5 декабря 2023 г.
- ^ «Выпущен PHP 8.1 с перечислениями, свойствами только для чтения и волокнами» . www.i-programmer.info . Проверено 5 декабря 2023 г.
- ^ «Пришло время PHP Foundation #StopBreakingPHP» . тронгейт ио . Проверено 27 ноября 2023 г.
- ^ «Совместимость WordPress 6.4 с PHP» . Сделать хостинг WordPress . 16 ноября 2023 г. Проверено 27 ноября 2023 г.
- ^ «ПХП» . Суверенный технологический фонд . Проверено 26 мая 2024 г.
- ^ Jump up to: а б «Общие рекомендации по установке» . php.net . Проверено 22 сентября 2013 г.
- ^ «Архив новостей: выпущен PHP 5.3.3!» . php.net . 22 июля 2010 г.
- ^ «Диспетчер процессов FastCGI (FPM)» . php.net . Проверено 22 сентября 2013 г.
- ^ «Использование командной строки: Введение» . php.net . Проверено 22 сентября 2013 г.
- ^ «Использование командной строки: отличия от других SAPI» . php.net . Проверено 22 сентября 2013 г.
- ^ Jump up to: а б «Общие рекомендации по установке» . php.net . Проверено 22 сентября 2013 г.
- ^ «PHP: Apache 2.x в Microsoft Windows» . php.net . Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Использование командной строки: Введение» . php.net . Проверено 22 сентября 2013 г.
- ^ «Установка PHP-GTK 2» . php.net . Архивировано из оригинала 12 декабря 2013 г. Проверено 22 сентября 2013 г.
- ^ «AWS SDK для PHP» . aws.amazon.com . Проверено 6 марта 2014 г.
- ^ «Windows Azure SDK для PHP — мосты взаимодействия и лабораторный центр» . interoperabilitybridges.com . Архивировано из оригинала 20 марта 2014 г. Проверено 6 марта 2014 г.
- ^ «Конфигурация времени выполнения: Содержание» . php.net . Проверено 22 сентября 2013 г.
- ^ «Директивы php.ini: Список директив php.ini» . php.net . Проверено 22 сентября 2013 г.
- ^ «Конфигурация времени выполнения: файл конфигурации» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «Директивы php.ini: Список разделов php.ini» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «Конфигурация времени выполнения: где можно установить параметр конфигурации» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «Ручная обработка изображений PHP и GD»; . php.net . Проверено 9 апреля 2011 г.
- ^ «Язык сценариев PHP на стороне сервера» . Университет Индианы . 04 апреля 2007 г. Архивировано из оригинала 21 января 2016 г. Проверено 25 февраля 2008 г.
- ^ «Технология JavaServer Pages — методы сравнения JavaServer Pages для серверного динамического контента» . Сан Микросистемс . Проверено 25 февраля 2008 г.
- ^ «Пять простых способов настроить приложение LAMP» . ИБМ . 25 января 2011 г.
- ^ «Ядро PHP: структура расширения» . PHP.net . Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Ядро PHP: расширение «счетчик» — продолжающийся пример» . PHP.net . Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Написание расширений, часть I: Введение в PHP и Zend» . Зенд Технологии . 01.03.2005. Архивировано из оригинала 24 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Написание расширений, часть II: параметры, массивы и ZVAL» . Зенд Технологии . 6 июня 2005 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Написание расширений, часть II: Параметры, массивы и ZVAL (продолжение)» . Зенд Технологии . 6 июня 2005 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Написание расширений, часть III: Ресурсы» . Зенд Технологии . 12 мая 2006 г. Архивировано из оригинала 26 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Обертывание классов C++ в расширение PHP» . Зенд Технологии . 22 апреля 2009 г. Архивировано из оригинала 20 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Расширение PHP с помощью C++?» . Переполнение стека . Проверено 22 сентября 2013 г.
- ^ «Как я могу использовать код C++ для взаимодействия с PHP?» . Переполнение стека . Проверено 22 сентября 2013 г.
- ^ Големон, Сара (2006). Расширение и встраивание PHP . Сэмс. ISBN 978-0-672-32704-9 .
- ^ «Запрос № 46919: Многопоточность» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «pthreads: Введение (Руководство по PHP)» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «PECL::Пакет::pthreads» . pecl.php.net . Проверено 9 февраля 2014 г.
- ^ «Руководство:Требования к установке#PHP» . МедиаВики. 25 января 2010 г. Проверено 26 февраля 2010 г.
PHP — это язык программирования, на котором написан MediaWiki [...]
- ^ «О WordPress» . Проверено 26 февраля 2010 г.
WordPress был [...] построен на PHP
- ^ Кемпкенс, Алекс. «Joomla! — система управления контентом для создания веб-сайтов и приложений» .
- ^ «PHP и Друпал» . Друпал.орг. 16 сентября 2007 г. Архивировано из оригинала 8 февраля 2010 г. Проверено 13 июня 2010 г.
- ^ "О" . Мудл.орг. Архивировано из оригинала 11 января 2010 г. Проверено 20 декабря 2009 г.
- ^ «Требования к серверу SilverStripe» . Архивировано из оригинала 28 ноября 2014 года . Проверено 13 октября 2014 г.
SilverStripe требует PHP 5.3.2+.
- ^ Иде, Энди (31 января 2013 г.). «PHP просто растет и растет» . Проверено 1 апреля 2013 г.
- ^ «Статистика использования и рыночная доля PHP версии 4 для веб-сайтов, июль 2024 г.» . w3techs.com .
- ^ Jump up to: а б «Статистика использования и рыночная доля PHP версии 5 для веб-сайтов, июль 2024 г.» . w3techs.com .
- ^ «Статистика использования и рыночная доля PHP версии 7 для веб-сайтов, июль 2024 г.» . w3techs.com .
- ^ «Статистика использования и рыночная доля PHP версии 8 для веб-сайтов, июль 2024 г.» . w3techs.com .
- ^ «Национальная база данных уязвимостей (NVD) по поиску статистики уязвимостей» . Проверено 22 ноября 2019 г.
- ^ «PHP: rfc:taint» . wiki.php.net .
- ^ «Заметки о совещании разработчиков, ноябрь 2005 г.» .
- ^ «Решение о режиме Taint, ноябрь 2007 г.» . Архивировано из оригинала 26 февраля 2009 г.
- ^ «Проект Hardened-PHP» . 15 августа 2008 г. Архивировано из оригинала 24 февраля 2019 г. Проверено 22 августа 2019 г.
- ^ «Безопасность: использование глобальных переменных регистрации» . Руководство по PHP . PHP.net. Архивировано из оригинала 27 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Волшебные цитаты» . Руководство по PHP . PHP.net. Архивировано из оригинала 8 февраля 2014 г. Проверено 17 января 2014 г.
- ^ « Директива конфигурации «движка»» . PHP: Конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 г.
- ^ «Эксплойт безопасности PHP с изображениями GIF» . 22 июня 2007 г. Архивировано из оригинала 27 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ «Эксплойт безопасности PHP с изображениями GIF» . Блог классов PHP. 20 июня 2007 г. Проверено 22 сентября 2013 г.
- ^ «Передача вредоносного PHP через getimagesize()» . 04.06.2007. Архивировано из оригинала 21 сентября 2013 г. Проверено 22 сентября 2013 г.
- ^ « Директива конфигурации ‘enable_dl’» . PHP: Конфигурация времени выполнения . PHP.net . Проверено 13 февраля 2014 г.
- ^ «Ссылка на функцию PHP: dl()» . PHP.net . Проверено 22 сентября 2013 г.
- ^ «Мой хост не исправит свой троян» . Разговор о веб-хостинге . Проверено 22 сентября 2013 г.
- ^ Раз0р (25 января 2013 г.). «Форум Simple Machines <= 2.0.3 Сброс пароля администратора» .
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ Ниббл Безопасность. «TYPO3-SA-2010-020, TYPO3-SA-2010-022 ОБЪЯСНЕНИЕ» .
- ^ "Криптостойкость и небезопасное сравнение" . ahack.ru (in Russian). Archived from the original on 4 July 2017.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Кравчик, Павел (2013). «Наиболее распространенные атаки на веб-приложения» . IPSec.pl. Архивировано из оригинала 15 апреля 2015 г. Проверено 15 апреля 2015 г.
- ^ Кравчик, Павел (2013). «Итак, каковы «самые критичные» недостатки приложений? В новом рейтинге OWASP Top 10» . IPSec.pl . Проверено 15 апреля 2015 г.
- ^ «PHP: Random_int — Руководство» .
- ^ «PHP: Rand — Руководство» .
- ^ «PHP: Mt_rand — Руководство» .
- ^ Аргирос, Джордж; Киайас, Аггелос. «Я забыл ваш пароль: случайные атаки на PHP-приложения» . usenix.org . УСЕНИКС . Проверено 19 апреля 2024 г.
- ^ «Статистика использования и доля рынка PHP для веб-сайтов, июль 2024 г.» . w3techs.com . Проверено 23 июля 2024 г.
- ^ «Поддержка PHP для PHP 7.2–8.0 | PHP LTS | Zend от Perforce» . Проверено 23 мая 2024 г.
- ^ «PHP: Поддерживаемые версии» . www.php.net .
- ^ «Поддержка PHP для PHP 7.2–8.0 | PHP LTS | Zend от Perforce» . Проверено 23 мая 2024 г.
Дальнейшее чтение
[ редактировать ]- Форд, Пол (11 июня 2015 г.). «Что такое код?» . Блумберг Бизнесуик .
Какой абсолютный минимум я должен знать о PHP?
Внешние ссылки
[ редактировать ]- PHP
- программное обеспечение 1995 года
- Языки программирования на основе классов
- Кроссплатформенное программное обеспечение
- Динамические языки программирования
- Динамически типизированные языки программирования
- Расширения имен файлов
- Бесплатные компиляторы и интерпретаторы
- Языки программирования высокого уровня
- Интернет-терминология
- Объектно-ориентированные языки программирования
- PHP-программное обеспечение
- Процедурные языки программирования
- Языки программирования
- Языки программирования, созданные в 1995 году.
- Языки сценариев
- Программное обеспечение с использованием лицензии PHP
- Текстоориентированные языки программирования