Метафизика вопроса

Вид материалаДокументы

Содержание


Откуда что взялось
Назначение и возможности
Установка и проверка
Модули расширения
Где взять дополнительную информацию
2. Синтаксис языка
2.3. Вывод информации
Vasya is 23 years old.
Сегодня пятница
Array( [a] => apple [b] => banana [c] => Array( [0] => x [1] => y [2] => z) )
2.8. Область видимости переменных.
Hello world
2.12. Выражения и приоритет операций
Практические задания
3. Классы. объекты. отличия php 5.
3.2. Описание класса
3.3. Использование классов
3.5. Конструкторы и деструкторы
Запущен конструктор
3.6. Область видимости
...
Полное содержание
Подобный материал:
  1   2   3   4   5   6   7   8   9   ...   12

1. ВВЕДЕНИЕ В PHP
    1. Метафизика вопроса

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

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

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

На деле, конечно, окажется, что использование универсальных средств для вот такой динамической генерации html-страниц в контексте web-сервера тоже имеет место, и во многих случаях даже является оправданным. А, кроме того, специальных технологий, предназначенных для этой цели, тоже существует несколько. Тем не менее, средством, вполне заслуженно получившим наибольшее распространение, однозначно является PHP. Именно его изучением мы и займёмся в рамках данного учебного курса.

Немного о терминологии. Часто можно услышать в разговоре такое сочетание, как «PHP-скрипт». Как его понимать, и отличается ли «PHP-скрипт» от «программы на PHP»? Ответ: однозначное нет. PHP до сих пор является исключительно интерпретируемым языком, то есть в момент работы программы обрабатывается непосредственно файл, содержащий исходный код (исключения возможны, но о них отдельно и гораздо позже). То есть, всякая программа, написанная на PHP, является интерпретируемой, то есть, в принципе, может быть названа «скриптом».
    1. Откуда что взялось

Что же такое это самое «пи-эйч-пи», а то и просто «пэ-хп-пэ», о котором мы собираемся разговаривать? Что умеет, и откуда взялось? Вначале – немного об истории.

Официальная версия гласит, что PHP, как язык программирования, был создан программистом Расмусом Лердорфом с целью сделать его домашнюю страничку в Интернете более интерактивной, более привлекательной для посетителей, а также, как формулируют некоторые источники, «чтобы иметь представление о тех людях, которые посещают его сайт и знакомятся с его резюме». Осенью 1994 года господин Лердорф разработал базовый синтаксис и создал первый интерпретатор своего языка, дав и языку, и программе, его интерпретировавшей, название Personal Home Page Tools - т. е. РНР. В той самой ранней версии, интерпретатор мог обрабатывать лишь несколько основных команд, однако начало было положено.

Примечательно, что интерпретатор сам был написан на интерпретируемом языке Perl, предназначенном, в общем, для тех же целей. Мотивацией для написания было крайнее неудобство синтаксиса Perl – те, кто знаком с языком Perl будут иметь возможность оценить, что данная разработка, несомненно, имела смысл.

В следующем, 1995 году господин Лердорф доработал интерпретатор, объединив его со своей же программой Form Interpretator, позволявшей обрабатывать html-формы. Кроме того, сама программа была переписана на языке C, и, хотя сама по себе осталась интерпретатором, позволила производить выполнение программ гораздо быстрее. Также, это позволило встраивать интерпретатор PHP непосредственно в web-сервер Apache.

По утверждениям самого автора, неожиданно для него самого, пользователи сервера, где располагался сайт с первой версией PНР, попросили себе такой же инструмент, и он довольно быстро перерос в самостоятельный проект. Именно от варианта 1995 года пошёл отсчёт версий нынешнего PHP.

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

К концу 1997 года РНР использовался более чем на пятидесяти тысячах сайтов.
Web-мастера быстро оценили достоинства нового языка web-программирования, такие как легкость освоения и богатство возможностей, и вскоре использовавшиеся до него традиционные Perl и С стали сдавать свои позиции.

Так как исходный код интерпретатора был открытым, а сам интерпретатор бесплатным, то энтузиасты стали заниматься его доработкой, и летом 1998 года появился на свет РНРЗ - детище Зеева Сураски и Энди Гутманса. РНР 3 был переписан "с нуля", так как его авторы сочли код предыдущих версий недостаточно эффективным. Кроме того, РНР З стал весьма легко расширяемым продуктом. Любой, создавший на основе определенных стандартов модуль расширения РНР, мог конечными усилиями этот модуль интегрировать с программными файлами РНР.

Уже к концу 1999 года число сайтов, построенных на основе РНР, перевалило за миллион. Весьма важным достоинством данного средства также явилось то, что программы интерпретации команд РНР, были созданы практически для всех операционных систем, от Windows до Unix и Linux. Таким образом, PHP стал кроссплатформенным средством, хотя ещё не так давно считалось, что PHP работает в связке только с сервером Apache, и, как правило, лишь под платформами семейства Unix.

Используемая в основном до сих пор четвёртая версия интерпретатора PHP была создана в 2000 году компанией Zend Technologies (по сути, это был проект тех же самых людей, что и PHP 3, только они к тому времени уже были не талантливыми программистами, а руководителями основанной ими фирмы). РНР 4 был дополнен множеством новых функций, но, несмотря на то, что стал разрабатываться фирмой, остался бесплатным и свободнораспространяемым продуктом.

В 2004 году была выпущена пятая версия PHP. Несмотря на огромное количество дополнений, связанных как со структурами языка (например, расширением возможностей объектно-ориентированного программирования), так и общей оптимизацией работы интерпретатора, за прошедшие 2 года PHP 5 не смог вытеснить четвёртую версию.

Поскольку, в плане синтаксиса, основные отличия лежат в области классов и объектов, большая часть того, что мы будем рассматривать, с одинаковым успехом относится к обеим версиям. Там, где между двумя актуальными ныне версиями есть разница, мы будем это особо оговаривать.

Кстати, как это часто бывает с программами, которые изначально не являются коммерческим продуктом, где-то по ходу развития оказалось, что уже PHP расшифровывается, как «PHP: Hypertext Preprocessor». Что говорит, в первую очередь, о том, что желающие как-либо расшифровать PHP по определению занимаются ерундой. PHP – он и есть PHP, замечательная вещь, и расшифровывать его незачем.

В завершение разговора об истории развития продукта следует сказать, что не так давно фирма Zend объявила, что ведёт разработку коммерческой версии PHP, которая будет компилируемой, а не интерпретируемой. Данная перспектива выглядит весьма заманчивой, с тех точек зрения, что, во-первых, это позволит сильно повысить эффективность выполнения сервером программ на PHP, и, во-вторых, позволит разработчикам создавать и устанавливать заказчикам свои системы, разработанные на PHP, не предоставляя им исходных кодов. Главное, чтобы параллельно с этим, сохранилась и бесплатная интерпретируемая ветвь продукта.
    1. Назначение и возможности

Теперь расскажем немного более детально о назначении и возможностях.

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

Для понимания назначения и возможностей PHP, нам необходимо рассмотреть, что же происходит, когда интернет-браузер пользователя запрашивает у web-сервера «а подай-ка мне (по протоколу http, естественно) файл вот такой-то .php». А происходит следующее: web-сервер, получив запрос, находит у себя требуемый файл, по расширению (которое обязательно прописывается в его, web-сервера, конфигурациях) распознаёт, что указанный файл, перед отправкой запросившему, должен быть обработан модулем PHP. Из этой логики, кстати, следует определение PHP, как препроцессора для текстовых файлов. Файл подаётся на вход программе-интерпретатору PHP, результатом обработки которого должен явиться, что называется, в «чистом» виде, тот самый html-файл, с которого мы начинали разговор. То есть, без фрагментов программного кода, который должен отработать на сервере.

Таким образом, можно сказать, что главным результатом действия программы на PHP должен являться выходной поток, представляющий собой документ html. Исключения из этого, опять же, бывают, о них в своё время мы поговорим, но пока ими можно пренебречь.

Здесь необходимое примечание: об html-документе в данном случае речь идёт условно, то есть, в выходном потоке запросто могут быть фрагменты скриптов, но скриптов, которые должны выполняться на клиентской стороне, web-браузером. Собственно, точно так же, как формируется программой на PHP html-код, может её формироваться и код, например, на Java-Script, включаемый в html-код документа, отправляемого web-сервером запросившему его пользователю. И наоборот, может генерироваться, и отправляться в браузер пользователя, и простой текстовый файл. Но, поскольку именно так происходит в большинстве случаев, будет считать, что в результате работы PHP-скрипта, мы получаем html-код.

Теперь, когда мы рассмотрели схему функционирования PHP в общем, вернёмся к возможностям. Итак, что мы можем сделать в программе, помимо того, что сформировать сложным образом оформленный и отформатированный в виде html выходной поток?
  • во-первых, можем собрать и обработать данные, пришедшие вместе с запросом на страничку – отправленные, например, из заполненной html-формы. Причём, данная обработка может быть достаточно сложно организованной, если мы того захотим.
  • во-вторых, можем произвольным образом работать с файловой системой, то есть, если web-серверу хватит на это прав, можем создавать, копировать, удалять, читать, писать, загружать файлы на сервере. Значительную часть этих операций можем делать и с каталогами.
  • в-третьих, можем производить различные манипуляции с графическими изображениями различных форматов, в том числе – модифицировать их. Например, задача автоматического создания уменьшенных вариантов для предварительного просмотра загружаемых в галерею фотографий, не представляет ни малейшей сложности.
  • в-четвёртых, мы имеем возможность поднимать информацию из различных серверных баз данных, а также – изменять при необходимости эту информацию.
  • в-пятых, можем работать с сессиями, параметрами «cookies», а также различными параметрами web-сервера.
  • в-шестых, мы имеем в своём распоряжении очень мощные и разнообразные механизмы для обработки строк – включая различные действия с регулярными выражениями.
  • в-седьмых, мы можем различным образом обрабатывать документы XML, а также различные его приложения.
  • в-восьмых, если нам это зачем-либо понадобится, можем пользоваться всеми механизмами IP-сокетов.

…и так далее, и так далее, и так далее…

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

Вышесказанное относится к функциональным возможностям, в синтаксическом же плане, программисты на PHP, в зависимости от их потребностей, могут пользоваться методами хоть структурного, хоть модульного, хоть объектно-ориентированного программирования. Здесь следует оговориться, что полноценная поддержка объектно-ориентированности появилась только в пятой версии – до этого, например, свойство полиморфизма выглядело весьма своеобразно.
    1. Установка и проверка

Как уже говорилось, PHP может быть установлен в контекст различных web-серверов, которые, в свою очередь, работают под различными операционными системами. Тем не менее, наиболее часто вам придётся сталкиваться с установкой PHP в сервер Apache, причём, скорее всего, работающего в системе Windows.

Это можно с уверенностью заявить на том основании, что, во-первых, вашим, как web-разработчика, рабочим местом, будет, с наибольшей вероятностью, компьютер именно под управлением Windows, и чаще всего настраивать web-сервер вам придётся именно свой, локальный. На реальном web-сервере, работающем на Linux, или чём-то другом из семейства Юниксов, настраивать систему, скорее всего, будет профессиональный администратор, хотя, если вдруг это придётся делать вам же, то вы с удивлением обнаружите, что установка PHP в контекст сервера Apache там, практически, ничем не отличается – по крайней мере, в одном из вариантов.

Во-вторых, почему именно Apache, а не IIS? Вот здесь ответ простой: он и проще, и надёжнее, и гораздо экономичнее в плане отношения к вычислительным ресурсам, и, что в наше время становится актуально, бесплатен, и не требует никаких лицензий. В конце концов, если вам, в силу каких-нибудь обстоятельств непреодолимой силы (например, требований менеджера) захочется поставить PHP под IIS, вы, несомненно, сможете это сделать, воспользовавшись документацией.

Вообще, документация по установке к PHP прилагается очень объёмная, качественная, и описывающая, в частности, такие случаи, которые можно отнести к разряду совсем уж нереальных – например, что у вас будет web-сервер не Apache, не IIS, а что-то третье.

Фундаментально, существует два способа установки PHP на web-сервер: как CGI-приложение или как SAPI-модуль Apache. Функционально разницы никакой, то есть, в PHP установленном, как модуль, мы сможем с совершенно аналогичным результатом выполнять один и тот же PHP-скрипт.

Предварительно, следует заметить, что большие специалисты рекомендуют для удобства всё, что касается web-сервера, в том числе, и наш PHP, складывать в одну директорию, а директорию подключать, как виртуальный локальный диск (например, командой subst u: <путь к директории>). Предположим, что Apache у нас лежит в директории c:\Program Files\webserver\Apache, а для PHP мы отводим, соответственно, директорию c:\Program Files\webserver\php, которая, после подключения виртуальным диском стала u:\php.

Итак, вначале поставим PHP, как обработчик CGI. Как правило, «на входе» мы имеем архив, содержащий набор различных файлов. Этот архив следует распаковать в директорию, в которой, как мы постановили, будет лежать PHP. Кстати, на первом этапе из всех многочисленных файлов установочного архива, нам важны всего 3:

 php.exe — интерпретатор командной строки

 php4ts.dll — собственно ядро PHP

 php.ini-dist — конфигурационный файл, версия из дистрибутива

Если кого-то заинтересует вопрос, почему нам нужны всего 3 файла, а установочный комплект занимает от трёх до восьми мегабайт в архиве (в зависимости от версии и комплектации), то ответом будет: а потому, что в нём содержатся различные библиотеки расширений. Все эти расширения, предназначенные для поддержки XML, различных баз данных, кроме MySQL (она в PHP 4 включена в состав ядра), генерации картинок, и всего прочего, вы можете поставить позже в любой момент.

Следующим шагом предлагается скопировать файл php.ini-dist в директорию Windows, и переименовать его в php.ini.

Последующие настройки касаются только файла конфигурации Апача httpd.conf. Добавим mime-тип, соответствующий расширению программ PHP:

AddType application/x-httpd-php .php .php3 .php4 .phtml

Затем там же поставим действие (action) в соответствие указанному нами типу:



  Options ExecCGI



ScriptAlias "/_phpdir_/" "u:/php/"

Action application/x-httpd-php "/_phpdir_/php.exe"

Если делать всё совсем по правилам, то рекомендуется вставлять данный фрагмент непосредственно перед секцией Virtual Hosts, хотя в принципе, это уже не обязательно.

Теоретически, всё – теперь, если перезапустить Apache, PHP должен работать.

Тут же возникает логичный вопрос: как мы можем это проверить? Проверять рекомендуется следующим образом: создать в любом текстовом редакторе, хоть бы и notpad’е, файл test.php приблизительно следующего содержания:

Ceterum censeo Microsoft delendam esse

и разместить его в корневой директории документов вашего web-сервера. После этого в строке адреса вашего любимого браузера можете набрать

localhost/test.php

Если после этого в браузере вы увидите только текст фразы



Рис.1.1. Результат работы программы на PHP в браузере

значит, PHP успешно установлен, и мы можем приступать к работе.

Если хочется увидеть что-то более основательное, можно переписать нашу простейшую программу в виде:

PHP 7.4.33 - phpinfo()
PHP logo

PHP Version 7.4.33

System Linux shared-28.smartape.ru 3.10.0-962.3.2.lve1.5.73.el7.x86_64 #1 SMP Wed Aug 24 21:31:23 UTC 2022 x86_64
Build Date Nov 6 2023 18:57:34
Configure Command './configure' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/opt/alt/php74' '--exec-prefix=/opt/alt/php74' '--bindir=/opt/alt/php74/usr/bin' '--sbindir=/opt/alt/php74/usr/sbin' '--sysconfdir=/opt/alt/php74/etc' '--datadir=/opt/alt/php74/usr/share' '--includedir=/opt/alt/php74/usr/include' '--libdir=/opt/alt/php74/usr/lib64' '--libexecdir=/opt/alt/php74/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/opt/alt/php74/usr/share/man' '--infodir=/opt/alt/php74/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/opt/alt/php74/etc' '--with-config-file-scan-dir=/opt/alt/php74/link/conf' '--disable-debug' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-huge-code-pages' '--enable-jit' '--enable-opcache' '--enable-shmop' '--enable-xml' '--with-bz2' '--with-freetype=/usr' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg=/usr' '--with-layout=GNU' '--with-mhash' '--with-password-argon2=/usr' '--with-pcre-jit' '--with-pic' '--with-readline' '--with-webp=/opt/alt/libwebp' '--with-xpm=/usr' '--with-zlib' '--with-zlib-dir=/usr' '--without-gdbm' '--without-pear' '--with-curl=/opt/alt/curlssl11/usr' '--with-openssl-dir=/opt/alt/openssl11' '--with-openssl=/opt/alt/openssl11' '--with-pcre-dir=/opt/alt/pcre2' '--with-kerberos' '--enable-litespeed' '--enable-pcntl' '--without-mysqli' '--disable-mbstring' '--disable-bcmath' '--disable-dba' '--disable-dom' '--disable-fileinfo' '--disable-json' '--disable-intl' '--disable-pdo' '--disable-phar' '--disable-posix' '--disable-soap' '--disable-sockets' '--disable-sysvsem' '--disable-sysvshm' '--disable-sysvmsg' '--disable-xmlreader' '--disable-xmlwriter' '--without-zip' '--disable-gd' '--without-imap' '--without-xmlrpc' '--without-xsl' '--without-ldap' '--without-pgsql' '--without-snmp' '--without-sodium' '--without-tidy' '--without-enchant' '--without-pspell' '--without-unixODBC' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'target_alias=x86_64-redhat-linux-gnu' 'PKG_CONFIG_PATH=/opt/alt/nghttp2/lib64/pkgconfig:/opt/alt/curlssl11/usr/lib64/pkgconfig:/opt/alt/openssl11/lib64/pkgconfig:/opt/alt/sqlite/usr/lib64/pkgconfig:/opt/alt/pcre2/usr/lib64/pkgconfig:/opt/alt/libzip/usr/lib64/pkgconfig:/opt/alt/libxml2/usr/lib64/pkgconfig:/opt/alt/libicu/usr/lib64/pkgconfig:/opt/alt/libgd/lib64/pkgconfig::/usr/lib64/pkgconfig:/usr/share/pkgconfig' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fno-strict-aliasing -Wno-pointer-sign' 'KERBEROS_CFLAGS=-I/usr/include' 'KERBEROS_LIBS=-L/usr/lib64' 'WEBP_LIBS=-L/opt/alt/libwebp/lib64 -Wl,-rpath=/opt/alt/libwebp/lib64' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' 'SASL_CFLAGS=-I/usr/include' 'SASL_LIBS=-L/usr/lib64'
Server API LiteSpeed V8.0.1 Cloudlinux 1.3
Virtual Directory Support disabled
Configuration File (php.ini) Path /opt/alt/php74/etc
Loaded Configuration File /opt/alt/php74/etc/php.ini
Scan this dir for additional .ini files /opt/alt/php74/link/conf
Additional .ini files parsed /opt/alt/php74/link/conf/alt_php.ini
PHP API 20190902
PHP Extension 20190902
Zend Extension 320190902
Zend Extension Build API320190902,NTS
PHP Extension Build API20190902,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling enabled
Zend Memory Manager enabled
Zend Multibyte Support provided by mbstring
IPv6 Support enabled
DTrace Support disabled
Registered PHP Streamshttps, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transportstcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
Registered Stream Filterszlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
Zend logo This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies

Configuration

bcmath

BCMath support enabled
DirectiveLocal ValueMaster Value
bcmath.scale00

bz2

BZip2 Support Enabled
Stream Wrapper support compress.bzip2://
Stream Filter support bzip2.decompress, bzip2.compress
BZip2 Version 1.0.6, 6-Sept-2010

calendar

Calendar support enabled

Core

PHP Version 7.4.33
DirectiveLocal ValueMaster Value
allow_url_fopenOnOn
allow_url_includeOffOff
arg_separator.input&&
arg_separator.output&&
auto_append_fileno valueno value
auto_globals_jitOnOn
auto_prepend_file/var/www/user175676/data/www/geum.ru/wordfence-waf.phpno value
browscapno valueno value
default_charsetUTF-8UTF-8
default_mimetypetext/htmltext/html
disable_classesno valueno value
disable_functionsno valueno value
display_errorsOffOff
display_startup_errorsOffOff
doc_rootno valueno value
docref_extno valueno value
docref_rootno valueno value
enable_dlOnOn
enable_post_data_readingOnOn
error_append_stringno valueno value
error_logno valueno value
error_prepend_stringno valueno value
error_reporting3276732767
expose_phpOnOn
extension_dir/opt/alt/php74/usr/lib64/php/modules/opt/alt/php74/usr/lib64/php/modules
file_uploadsOnOn
hard_timeout22
highlight.comment#FF8000#FF8000
highlight.default#0000BB#0000BB
highlight.html#000000#000000
highlight.keyword#007700#007700
highlight.string#DD0000#DD0000
html_errorsOnOn
ignore_repeated_errorsOffOff
ignore_repeated_sourceOffOff
ignore_user_abortOffOff
implicit_flushOffOff
include_path.:/opt/alt/php74/usr/share/pear.:/opt/alt/php74/usr/share/pear
input_encodingno valueno value
internal_encodingno valueno value
log_errorsOnOn
log_errors_max_len10241024
mail.add_x_headerOffOff
mail.force_extra_parametersno valueno value
mail.logno valueno value
max_execution_time6060
max_file_uploads2020
max_input_nesting_level6464
max_input_time-1-1
max_input_vars10001000
max_multipart_body_parts-1-1
memory_limit1024M1024M
open_basedirno valueno value
output_buffering40964096
output_encodingno valueno value
output_handlerno valueno value
post_max_size1024M1024M
precision1414
realpath_cache_size4096K4096K
realpath_cache_ttl120120
register_argc_argvOffOff
report_memleaksOnOn
report_zend_debugOnOn
request_orderno valueno value
sendmail_fromno valueno value
sendmail_path/usr/sbin/sendmail -t -i -f webmaster@biblo-ok.ru/usr/sbin/sendmail -t -i
serialize_precision-1-1
short_open_tagOnOn
SMTPlocalhostlocalhost
smtp_port2525
sys_temp_dirno valueno value
syslog.facilityLOG_USERLOG_USER
syslog.filterno-ctrlno-ctrl
syslog.identphpphp
track_errorsOffOff
unserialize_callback_funcno valueno value
upload_max_filesize1024M1024M
upload_tmp_dir/var/www/user175676/data/mod-tmpno value
user_dirno valueno value
user_ini.cache_ttl300300
user_ini.filename.user.ini.user.ini
variables_orderEGPCSEGPCS
xmlrpc_error_number00
xmlrpc_errorsOffOff
zend.assertions11
zend.detect_unicodeOnOn
zend.enable_gcOnOn
zend.exception_ignore_argsOffOff
zend.multibyteOffOff
zend.script_encodingno valueno value
zend.signal_checkOffOff

ctype

ctype functions enabled

curl

cURL support enabled
cURL Information 7.87.0
Age 10
Features
AsynchDNS Yes
CharConv No
Debug No
GSS-Negotiate No
IDN Yes
IPv6 Yes
krb4 No
Largefile Yes
libz Yes
NTLM Yes
NTLMWB Yes
SPNEGO Yes
SSL Yes
SSPI No
TLS-SRP Yes
HTTP2 Yes
GSSAPI Yes
KERBEROS5 Yes
UNIX_SOCKETS Yes
PSL No
HTTPS_PROXY Yes
MULTI_SSL No
BROTLI No
Protocols dict, file, ftp, ftps, gopher, gophers, http, https, imap, imaps, ldap, ldaps, mqtt, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
Host x86_64-redhat-linux-gnu
SSL Version OpenSSL/1.1.1w
ZLib Version 1.2.7
libSSH Version libssh2/1.10.0
DirectiveLocal ValueMaster Value
curl.cainfono valueno value

date

date/time support enabled
timelib version 2018.04
"Olson" Timezone Database Version 2022.1
Timezone Database internal
Default timezone Europe/Moscow
DirectiveLocal ValueMaster Value
date.default_latitude31.766731.7667
date.default_longitude35.233335.2333
date.sunrise_zenith90.58333390.583333
date.sunset_zenith90.58333390.583333
date.timezoneEurope/MoscowEurope/Moscow

dom

DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.10.2
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled

exif

EXIF Support enabled
Supported EXIF Version 0220
Supported filetypes JPEG, TIFF
Multibyte decoding support using mbstring enabled
Extended EXIF tag formats Canon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, Epson
DirectiveLocal ValueMaster Value
exif.decode_jis_intelJISJIS
exif.decode_jis_motorolaJISJIS
exif.decode_unicode_intelUCS-2LEUCS-2LE
exif.decode_unicode_motorolaUCS-2BEUCS-2BE
exif.encode_jisno valueno value
exif.encode_unicodeISO-8859-15ISO-8859-15

fileinfo

fileinfo support enabled
libmagic 537

filter

Input Validation and Filtering enabled
DirectiveLocal ValueMaster Value
filter.defaultunsafe_rawunsafe_raw
filter.default_flagsno valueno value

ftp

FTP support enabled
FTPS support enabled

gd

GD Support enabled
GD headers Version 2.3.3
GD library Version 2.3.3
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
PNG Support enabled
WBMP Support enabled
XPM Support enabled
XBM Support enabled
WebP Support enabled
BMP Support enabled
TGA Read Support enabled
DirectiveLocal ValueMaster Value
gd.jpeg_ignore_warning11

gettext

GetText Support enabled

gmp

gmp support enabled
GMP version 6.0.0

hash

hash support enabled
Hashing Engines md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b crc32c fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5
MHASH support Enabled
MHASH API Version Emulated Support

iconv

iconv support enabled
iconv implementation glibc
iconv library version 2.17
DirectiveLocal ValueMaster Value
iconv.input_encodingno valueno value
iconv.internal_encodingno valueno value
iconv.output_encodingno valueno value

imap

IMAP c-Client Version 2007f
SSL Support enabled
Kerberos Support enabled
DirectiveLocal ValueMaster Value
imap.enable_insecure_rshOffOff

intl

Internationalization supportenabled
ICU version 63.1
ICU Data version 63.1
ICU TZData version 2018e
ICU Unicode version 11.0
DirectiveLocal ValueMaster Value
intl.default_localeno valueno value
intl.error_level00
intl.use_exceptions00

json

json support enabled

ldap

LDAP Support enabled
Total Links 0/unlimited
API Version 3001
Vendor Name OpenLDAP
Vendor Version 20446
SASL Support Enabled
DirectiveLocal ValueMaster Value
ldap.max_linksUnlimitedUnlimited

libxml

libXML support active
libXML Compiled Version 2.10.2
libXML Loaded Version 21002
libXML streams enabled

mbstring

Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
libmbfl version 1.3.2
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 6.8.2
DirectiveLocal ValueMaster Value
mbstring.detect_orderno valueno value
mbstring.encoding_translationOffOff
mbstring.func_overload00
mbstring.http_inputno valueno value
mbstring.http_outputno valueno value
mbstring.http_output_conv_mimetypes^(text/|application/xhtml\+xml)^(text/|application/xhtml\+xml)
mbstring.internal_encodingno valueno value
mbstring.languageneutralneutral
mbstring.regex_retry_limit10000001000000
mbstring.regex_stack_limit100000100000
mbstring.strict_detectionOffOff
mbstring.substitute_characterno valueno value

mysqli

MysqlI Supportenabled
Client API library version 5.5.68-MariaDB
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
Client API header version 5.5.62
MYSQLI_SOCKET /var/lib/mysql/mysql.sock
DirectiveLocal ValueMaster Value
mysqli.allow_local_infileOffOff
mysqli.allow_persistentOnOn
mysqli.default_hostno valueno value
mysqli.default_port33063306
mysqli.default_pwno valueno value
mysqli.default_socketno valueno value
mysqli.default_userno valueno value
mysqli.max_linksUnlimitedUnlimited
mysqli.max_persistentUnlimitedUnlimited
mysqli.reconnectOffOff
mysqli.rollback_on_cached_plinkOffOff

openssl

OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.1.1w 11 Sep 2023
OpenSSL Header Version OpenSSL 1.1.1w 11 Sep 2023
Openssl default config /opt/alt/openssl11/etc/pki/tls/openssl.cnf
DirectiveLocal ValueMaster Value
openssl.cafileno valueno value
openssl.capathno valueno value

pcntl

pcntl supportenabled

pcre

PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 10.35 2020-05-09
PCRE Unicode Version 13.0.0
PCRE JIT Support enabled
PCRE JIT Target x86 64bit (little endian + unaligned)
DirectiveLocal ValueMaster Value
pcre.backtrack_limit10000001000000
pcre.jit11
pcre.recursion_limit100000100000

PDO

PDO supportenabled
PDO drivers mysql, sqlite

pdo_mysql

PDO Driver for MySQLenabled
Client API version 5.5.68-MariaDB
DirectiveLocal ValueMaster Value
pdo_mysql.default_socket/var/lib/mysql/mysql.sock/var/lib/mysql/mysql.sock

pdo_sqlite

PDO Driver for SQLite 3.xenabled
SQLite Library 3.39.4

Phar

Phar: PHP Archive supportenabled
Phar API version 1.1.1
Phar-based phar archives enabled
Tar-based phar archives enabled
ZIP-based phar archives enabled
gzip compression enabled
bzip2 compression enabled
OpenSSL support enabled
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.
DirectiveLocal ValueMaster Value
phar.cache_listno valueno value
phar.readonlyOnOn
phar.require_hashOnOn

posix

POSIX support enabled

pspell

PSpell Support enabled

readline

Readline Supportenabled
Readline library 6.2
DirectiveLocal ValueMaster Value
cli.pagerno valueno value
cli.prompt\b \> \b \> 

Reflection

Reflection enabled

session

Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary
DirectiveLocal ValueMaster Value
session.auto_startOffOff
session.cache_expire180180
session.cache_limiternocachenocache
session.cookie_domainno valueno value
session.cookie_httponlyno valueno value
session.cookie_lifetime00
session.cookie_path//
session.cookie_samesiteno valueno value
session.cookie_secure00
session.gc_divisor10001000
session.gc_maxlifetime14401440
session.gc_probability11
session.lazy_writeOnOn
session.namePHPSESSIDPHPSESSID
session.referer_checkno valueno value
session.save_handlerfilesfiles
session.save_path/var/www/user175676/data/mod-tmp/opt/alt/php74/var/lib/php/session
session.serialize_handlerphpphp
session.sid_bits_per_character44
session.sid_length3232
session.upload_progress.cleanupOnOn
session.upload_progress.enabledOnOn
session.upload_progress.freq1%1%
session.upload_progress.min_freq11
session.upload_progress.namePHP_SESSION_UPLOAD_PROGRESSPHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefixupload_progress_upload_progress_
session.use_cookies11
session.use_only_cookies11
session.use_strict_mode00
session.use_trans_sid00

shmop

shmop support enabled

SimpleXML

SimpleXML support enabled
Schema support enabled

soap

Soap Client enabled
Soap Server enabled
DirectiveLocal ValueMaster Value
soap.wsdl_cache11
soap.wsdl_cache_dir/tmp/tmp
soap.wsdl_cache_enabled11
soap.wsdl_cache_limit55
soap.wsdl_cache_ttl8640086400

sockets

Sockets Support enabled

SPL

SPL supportenabled
Interfaces OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

sqlite3

SQLite3 supportenabled
SQLite Library 3.39.4
DirectiveLocal ValueMaster Value
sqlite3.defensive11
sqlite3.extension_dirno valueno value

standard

Dynamic Library Support enabled
Path to sendmail /usr/sbin/sendmail -t -i -f webmaster@biblo-ok.ru
DirectiveLocal ValueMaster Value
assert.active11
assert.bail00
assert.callbackno valueno value
assert.exception00
assert.quiet_eval00
assert.warning11
auto_detect_line_endings00
default_socket_timeout6060
fromno valueno value
session.trans_sid_hostsno valueno value
session.trans_sid_tagsa=href,area=href,frame=src,form=a=href,area=href,frame=src,form=
unserialize_max_depth40964096
url_rewriter.hostsno valueno value
url_rewriter.tagsa=href,area=href,frame=src,input=src,form=fakeentrya=href,area=href,frame=src,input=src,form=fakeentry
user_agentno valueno value

sysvmsg

sysvmsg support enabled

sysvsem

sysvsem support enabled

sysvshm

sysvshm support enabled

tidy

Tidy support enabled
libTidy Version 5.4.0
libTidy Release 2017/03/01
DirectiveLocal ValueMaster Value
tidy.clean_outputno valueno value
tidy.default_configno valueno value

tokenizer

Tokenizer Support enabled

xml

XML Support active
XML Namespace Support active
libxml2 Version 2.10.2

xmlreader

XMLReader enabled

xmlwriter

XMLWriter enabled

xsl

XSL enabled
libxslt Version 1.1.28
libxslt compiled against libxml Version 2.9.1
EXSLT enabled
libexslt Version 1.1.28

Zend OPcache

Opcode Caching Up and Running
Optimization Enabled
SHM Cache Enabled
File Cache Disabled
Startup OK
Shared memory model mmap
Cache hits 2559601
Cache misses 70415
Used memory 134211904
Free memory 5824
Wasted memory 0
Interned Strings Used memory 6291008
Interned Strings Free memory 0
Cached scripts 2784
Cached keys 2815
Max keys 16229
OOM restarts 0
Hash keys restarts 0
Manual restarts 0
DirectiveLocal ValueMaster Value
opcache.blacklist_filenameno valueno value
opcache.consistency_checks00
opcache.dups_fixOffOff
opcache.enableOnOn
opcache.enable_cliOffOff
opcache.enable_file_overrideOffOff
opcache.error_logno valueno value
opcache.file_cacheno valueno value
opcache.file_cache_consistency_checksOnOn
opcache.file_cache_onlyOffOff
opcache.file_update_protection22
opcache.force_restart_timeout180180
opcache.huge_code_pagesOffOff
opcache.interned_strings_buffer88
opcache.lockfile_path/tmp/tmp
opcache.log_verbosity_level11
opcache.max_accelerated_files1000010000
opcache.max_file_size00
opcache.max_wasted_percentage55
opcache.memory_consumption128128
opcache.opt_debug_level00
opcache.optimization_level0x7FFEBFFF0x7FFEBFFF
opcache.preferred_memory_modelno valueno value
opcache.preloadno valueno value
opcache.preload_userno valueno value
opcache.protect_memoryOffOff
opcache.restrict_apino valueno value
opcache.revalidate_freq22
opcache.revalidate_pathOffOff
opcache.save_commentsOnOn
opcache.use_cwdOnOn
opcache.validate_permissionOffOff
opcache.validate_rootOffOff
opcache.validate_timestampsOnOn

zip

Zip enabled
Zip version 1.15.6
Libzip headers version 1.3.2
Libzip library version 1.3.2

zlib

ZLib Supportenabled
Stream Wrapper compress.zlib://
Stream Filter zlib.inflate, zlib.deflate
Compiled Version 1.2.7
Linked Version 1.2.7
DirectiveLocal ValueMaster Value
zlib.output_compressionOffOff
zlib.output_compression_level-1-1
zlib.output_handlerno valueno value

Additional Modules

Module Name
litespeed

Environment

VariableValue
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /

PHP Variables

VariableValue
$_SERVER['PATH']/usr/local/bin:/usr/bin:/bin
$_SERVER['TEMP']/tmp
$_SERVER['TMP']/tmp
$_SERVER['TMPDIR']/tmp
$_SERVER['PWD']/
$_SERVER['HTTP_ACCEPT']*/*
$_SERVER['HTTP_CONNECTION']close
$_SERVER['CONTENT_LENGTH']0
$_SERVER['HTTP_HOST']geum.ru
$_SERVER['HTTP_USER_AGENT']Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
$_SERVER['HTTP_X_FORWARDED_PROTO']http
$_SERVER['HTTP_X_FORWARDED_PORT']80
$_SERVER['UNIQUE_ID']ZiicNO5wqxMJDc40L4uFJwAAAGM
$_SERVER['PERL5LIB']/usr/share/awstats/lib:/usr/share/awstats/plugins
$_SERVER['SERVER_SIGNATURE']no value
$_SERVER['SERVER_SOFTWARE']Apache/2.4.6 (CloudLinux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16
$_SERVER['SERVER_NAME']geum.ru
$_SERVER['SERVER_ADDR']127.0.0.1
$_SERVER['SERVER_PORT']80
$_SERVER['REMOTE_ADDR']18.218.61.16
$_SERVER['DOCUMENT_ROOT']/var/www/user175676/data/www/geum.ru
$_SERVER['REQUEST_SCHEME']http
$_SERVER['CONTEXT_PREFIX']no value
$_SERVER['CONTEXT_DOCUMENT_ROOT']/var/www/user175676/data/www/geum.ru
$_SERVER['SERVER_ADMIN']webmaster@biblo-ok.ru
$_SERVER['SCRIPT_FILENAME']/var/www/user175676/data/www/geum.ru/next/art-19697.php
$_SERVER['REMOTE_PORT']41910
$_SERVER['SERVER_PROTOCOL']HTTP/1.0
$_SERVER['REQUEST_METHOD']GET
$_SERVER['QUERY_STRING']no value
$_SERVER['REQUEST_URI']/next/art-19697.php
$_SERVER['SCRIPT_NAME']/next/art-19697.php
$_SERVER['PHP_SELF']/next/art-19697.php
$_SERVER['REQUEST_TIME_FLOAT']1713937460.5258
$_SERVER['REQUEST_TIME']1713937460
$_ENV['PATH']/usr/local/bin:/usr/bin:/bin
$_ENV['TEMP']/tmp
$_ENV['TMP']/tmp
$_ENV['TMPDIR']/tmp
$_ENV['PWD']/

PHP Credits

PHP Group
Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski
Language Design & Concept
Andi Gutmans, Rasmus Lerdorf, Zeev Suraski, Marcus Boerger
PHP Authors
ContributionAuthors
Zend Scripting Language Engine Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Marcus Boerger, Dmitry Stogov, Xinchen Hui, Nikita Popov
Extension Module API Andi Gutmans, Zeev Suraski, Andrei Zmievski
UNIX Build and Modularization Stig Bakken, Sascha Schumann, Jani Taskinen, Peter Kokot
Windows Support Shane Caraveo, Zeev Suraski, Wez Furlong, Pierre-Alain Joye, Anatol Belski, Kalle Sommer Nielsen
Server API (SAPI) Abstraction Layer Andi Gutmans, Shane Caraveo, Zeev Suraski
Streams Abstraction Layer Wez Furlong, Sara Golemon
PHP Data Objects Layer Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky
Output Handler Zeev Suraski, Thies C. Arntzen, Marcus Boerger, Michael Wallner
Consistent 64 bit support Anthony Ferrara, Anatol Belski
SAPI Modules
ContributionAuthors
Apache 2.0 Handler Ian Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)
CGI / FastCGI Rasmus Lerdorf, Stig Bakken, Shane Caraveo, Dmitry Stogov
CLI Edin Kadribasic, Marcus Boerger, Johannes Schlueter, Moriyoshi Koizumi, Xinchen Hui
Embed Edin Kadribasic
FastCGI Process Manager Andrei Nigmatulin, dreamcat4, Antony Dovgal, Jerome Loyet
litespeed George Wang
phpdbg Felipe Pena, Joe Watkins, Bob Weinand
Module Authors
ModuleAuthors
BC Math Andi Gutmans
Bzip2 Sterling Hughes
Calendar Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong
COM and .Net Wez Furlong
ctype Hartmut Holzgraefe
cURL Sterling Hughes
Date/Time Support Derick Rethans
DB-LIB (MS SQL, Sybase) Wez Furlong, Frank M. Kromann, Adam Baratz
DBA Sascha Schumann, Marcus Boerger
DOM Christian Stocker, Rob Richards, Marcus Boerger
enchant Pierre-Alain Joye, Ilia Alshanetsky
EXIF Rasmus Lerdorf, Marcus Boerger
FFI Dmitry Stogov
fileinfo Ilia Alshanetsky, Pierre Alain Joye, Scott MacVicar, Derick Rethans, Anatol Belski
Firebird driver for PDO Ard Biesheuvel
FTP Stefan Esser, Andrew Skalski
GD imaging Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger
GetText Alex Plotnick
GNU GMP support Stanislav Malyshev
Iconv Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi
IMAP Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky
Input Filter Rasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia Alshanetsky
Internationalization Ed Batutis, Vladimir Iordanov, Dmitry Lakhtyuk, Stanislav Malyshev, Vadim Savchuk, Kirti Velankar
JSON Jakub Zelenka, Omar Kilani, Scott MacVicar
LDAP Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas
LIBXML Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo
Multibyte String Functions Tsukada Takuya, Rui Hirokawa
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter
OCI8 Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal, Andi Gutmans, Wez Furlong, Christopher Jones, Oracle Corporation
ODBC driver for PDO Wez Furlong
ODBC Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky
Opcache Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Dmitry Stogov, Xinchen Hui
OpenSSL Stig Venaas, Wez Furlong, Sascha Kettler, Scott MacVicar
Oracle (OCI) driver for PDO Wez Furlong
pcntl Jason Greene, Arnaud Le Blanc
Perl Compatible Regexps Andrei Zmievski
PHP Archive Gregory Beaver, Marcus Boerger
PHP Data Objects Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky
PHP hash Sara Golemon, Rasmus Lerdorf, Stefan Esser, Michael Wallner, Scott MacVicar
Posix Kristian Koehntopp
PostgreSQL driver for PDO Edin Kadribasic, Ilia Alshanetsky
PostgreSQL Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne
Pspell Vlad Krupin
Readline Thies C. Arntzen
Reflection Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter
Sessions Sascha Schumann, Andrei Zmievski
Shared Memory Operations Slava Poliakov, Ilia Alshanetsky
SimpleXML Sterling Hughes, Marcus Boerger, Rob Richards
SNMP Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne, Boris Lytochkin
SOAP Brad Lafountain, Shane Caraveo, Dmitry Stogov
Sockets Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene
Sodium Frank Denis
SPL Marcus Boerger, Etienne Kneuss
SQLite 3.x driver for PDO Wez Furlong
SQLite3 Scott MacVicar, Ilia Alshanetsky, Brad Dewar
System V Message based IPC Wez Furlong
System V Semaphores Tom May
System V Shared Memory Christian Cartus
tidy John Coggeshall, Ilia Alshanetsky
tokenizer Andrei Zmievski, Johannes Schlueter
XML Stig Bakken, Thies C. Arntzen, Sterling Hughes
XMLReader Rob Richards
xmlrpc Dan Libby
XMLWriter Rob Richards, Pierre-Alain Joye
XSL Christian Stocker, Rob Richards
Zip Pierre-Alain Joye, Remi Collet
Zlib Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti, Michael Wallner
PHP Documentation
Authors Mehdi Achour, Friedhelm Betz, Antony Dovgal, Nuno Lopes, Hannes Magnusson, Philip Olson, Georg Richter, Damien Seguy, Jakub Vrana, Adam Harvey
Editor Peter Cowburn
User Note Maintainers Daniel P. Brown, Thiago Henrique Pojda
Other Contributors Previously active authors, editors and other contributors are listed in the manual.
PHP Quality Assurance Team
Ilia Alshanetsky, Joerg Behrens, Antony Dovgal, Stefan Esser, Moriyoshi Koizumi, Magnus Maatta, Sebastian Nohn, Derick Rethans, Melvyn Sopacua, Pierre-Alain Joye, Dmitry Stogov, Felipe Pena, David Soria Parra, Stanislav Malyshev, Julien Pauli, Stephen Zarkos, Anatol Belski, Remi Collet, Ferenc Kovacs
Websites and Infrastructure team
PHP Websites Team Rasmus Lerdorf, Hannes Magnusson, Philip Olson, Lukas Kahwe Smith, Pierre-Alain Joye, Kalle Sommer Nielsen, Peter Cowburn, Adam Harvey, Ferenc Kovacs, Levi Morrison
Event Maintainers Damien Seguy, Daniel P. Brown
Network Infrastructure Daniel P. Brown
Windows Infrastructure Alex Schoenmaker

PHP License

This program is free software; you can redistribute it and/or modify it under the terms of the PHP License as published by the PHP Group and included in the distribution in the file: LICENSE

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any questions about PHP licensing, please contact license@php.net.



и в результате её выполнения интерпретатор сообщит нам много ценного и интересного о себе, своих настройках и модулях расширения, а заодно о web-сервере, в контексте которого работает PHP.

Теперь о том, как поставить PHP в альтернативном варианте, варианте модуля Apache. Хотя многие компетентные люди с полным правом назвали бы альтернативным наш первый вариант, по той причине, что изначально PHP всё-таки был ориентирован только под Apache, Apache работал только под unix’ами, а под unix PHP подключается по логике, очень похожей на нашу установку модулем.

Точно так же копируем файлы из установочного комплекта в директорию, которую мы отвели для файлов PHP. На этот раз нам опять нужны, как минимум, 3 файла:
  • php4ts.dll (собственно, ядро PHP)
  • php4apache.dll (модуль для Апача)
  • php.ini-dist (для того же, для чего и в прошлый раз)

Снова копируем php.ini в системную директорию, затем снова начинаем править httpd.conf - находим секцию "Dynamic Shared Object (DSO) Support" — её найти просто по строкам вида LoadModule ... Добавляем свою строчку:

LoadModule php4_module "путь-к-директории-php/php4apache.dll"

(в нашем случае – u:\php).

Теперь снова добавляем mime-тип

AddType application/x-httpd-php .phtml .php .php3 .php4

Если вы ранее подключили PHP как модуль CGI, то следует убрать строки, связанные с сопоставлением action для указанного типа. Ну и, собственно, всё – перезапускаем Apache, и проверяем на нашем тестовом файле, работает ли PHP.

Теперь о недостатках и преимуществах. Опыт показывает, что первый способ обычно начинает работать без проблем сразу, в то время, как второй всё-таки оказывается связан с некоторыми проблемами, особенно в случаях, если Apache установлен второй версии.

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

Кроме того, установив PHP как модуль, вы получите возможность управлять некоторыми его параметрами из файлов .htaccess, и вообще будете избавлены от достаточно длинного ряда ситуаций, которые встречаются, возможно, и достаточно редко, но при встрече действуют на нервы очень сильно. Потому, за исключением случаев, когда нужно всё поставить очень быстро, рекомендуется всё-таки, ставить PHP, как модуль Apache.

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

Дополнительно, следует сказать, что известно немало готовых комплектов из разряда «Джентльменский набор ленивого web-разработчика», которые с одного дистрибутива позволяют поставить не только Apache с PHP, но и MySQL заодно, но пользоваться ими или нет, предлагаю каждому решить самостоятельно. Наиболее популярные наборы такого рода носят название Денвер (ссылка скрыта) и Swissknife (ссылка скрыта).
    1. Модули расширения

Теперь немного о том, почему же всё-таки непосредственно для работы PHP, хоть в том, хоть в другом варианте, нам нужны всего по три файла, а в дистрибутиве есть ещё много чего.

Основное, из прочего, что есть в дистрибутиве – различные модули расширения. Смысл данных модулей в том, что ядро PHP, содержит, конечно, много функций, но далеко не всё, что может понадобиться. Многие библиотеки функций вынесены в отдельные модули, без которых всё будет замечательно работать, пока нам не понадобится функциональность этих функций. Когда эта функциональность нам понадобится, нам придётся заняться подключением соответствующего модуля.

Как подключить модуль расширения? В принципе, достаточно просто. Самое главное условие в том, что эти самые модули расширения, находящиеся в установочном комплекте в каталоге extensions, и имеющие в внерсии для windows имена php_<личное имя>.dll, должны находиться в каталоге, который прописан в системных путях (PATH). То есть, для того, чтобы PHP смог их подключить, нужно либо каталог php/extesions прописать в списке системных путей, либо необходимые модули скопировать в какой либо прописанный каталог, например, windows/system32.

Затем, нам необходимо исправить файл конфигурации PHP. Люди, которые готовили установочный комплект, поступили очень разумно, и все присутствующие в комплекте модули, обычно уже прописаны в конфигураторе, но закомментированы. Наша задача сводится лишь к тому, чтобы найти в списке строку, содержащую подключение нужного нам модуля, и раскомментировать её. Например, для модуля расширения gd2, необходимая строка имеет вид:

extension=php_gd2.dll

После того, как мы исправили конфигуратор, если PHP у нас подключен, как модуль Apache, необходимо будет перезапустить Apache. Если PHP подключен, как обработчик CGI, это не обязательно – всё должно работать сразу с момента сохранения исправленного файла конфигурации.

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

Так, уже упоминавшийся модуль расширения gd и дополненный функциями работы с новыми форматами gd2, служит для работы с графическими изображениями – в том смысле, что если нам надо не просто отправить картинку, а, скажем, изменить её размер, или что-то в неё дорисовать. Используя функции модуля gd, мы можем это сделать, и в нужный момент мы к этому ещё вернёмся.

Функции перекодировки строк содержатся в модуле iconv. Под перекодировкой в данном случае имеется в виду смена кодовых таблиц.

Модули mssql, oracle, sybase и ещё несколько, содержат функции для обращения скриптов к соответствующим серверам баз данных. Здесь нужно заметить, что функции для связи с MySQL встроены в состав ядра PHP.

Модуль Zlib позволяет работать из программы на РНР с архивами в формате Gzip, а модуль libswf - с Flash-презентациями, создавая и редактируя их также прямо из программы на РНР.

Чуть более сложная ситуация с использованием XML. Поддержка XML в модулях расширения PHP, конечно, есть, но по какой-то причине получается, что в разных версиях модуля domxml (входящих в различные установочные комплекты даже одинаковых версий PHP) для разбора XML-документов применяется разный набор функций.

Соответствующие модули расширения существуют для компрессии данных алгоритмом zip, доступа к функциям Win API и web-серверов, шифрования, работы с форматом pdf, и много чего еще.

Как правило, в описании функций говорится о том, какой модуль должен быть подключен для того, чтобы данной функцией можно было воспользоваться.

Здесь также следует указать, что разные установочные комплекты могут нести в своём составе различный набор расширений. И, тем более, на реальных web-серверах может быть установлен различный набор расширений. Потому, если при разработке проекта вам приходится пользоваться теми или иными функциями из модулей расширения, следует заранее уточнять, подключено ли соответствующее расширение на том сервере, где будет размещаться проект, и если не подключено, то реально ли его подключить.

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