что такое php?
php – это широко используемый язык сценариев общего назначения с открытым исходным кодом.

говоря проще, php это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на web-сервере.

аббревиатура php означает “hypertext preprocessor (препроцессор гипертекста)". синтаксис языка берет начало из c, java и perl. php достаточно прост для изучения. преимуществом php является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц. важным преимуществом языка php перед такими языками, как языков perl и c заключается в возможности создания html документов с внедренными командами php. значительным отличием php от какого-либо кода, выполняющегося на стороне клиента, например, javascript, является то, что php-скрипты выполняются на стороне сервера. вы даже можете сконфигурировать свой сервер таким образом, чтобы html-файлы обрабатывались процессором php, так что клиенты даже не смогут узнать, получают ли они обычный html-файл или результат выполнения скрипта.

php позволяет создавать качественные web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем.

php прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов.
возможности
возможности php очень большие. главным образом, область применения php сфокусирована на написание скриптов, работающих на стороне сервера; таким образом, php способен выполнять всё то, что выполняет любая другая программа cgi. например, обрабатывать данных форм, генерировать динамические страницы, отсылать и принимать cookies. но php способен выполнять и множество других задач.

существуют три основных области, где используется php.

    создание скриптов для выполнения на стороне сервера. php наиболее широко используется именно таким образом. все, что вам понадобится, это парсер php (в виде программы cgi или серверного модуля), вебсервер и браузер. чтобы вы могли просматривать результаты выполнения php-скриптов в браузере, вам нужен работающий вебсервер и установленный php
создание скриптов для выполнения в командной строке. вы можете создать php-скрипт, способный запускаться вне зависимости от вебсервера и браузера. все, что вам потребуется - парсер php. такой способ использования php идеально подходит для скриптов, которые должны выполняться регулярно, например, с помощью cron (на платформах *nix или linux) или с помощью планировщика задач (task scheduler) на платформах windows. эти скрипты также могут быть использованы в задачах простой обработки текстов.
создание приложений gui, выполняющихся на стороне клиента. возможно, php является не самым лучшим языком для создания подобных приложений, но, если вы очень хорошо знаете php и хотели бы использовать некоторые его возможности в своих клиент-приложениях, вы можете использовать php-gtk для создания таких приложений. подобным образом вы можете создавать и кросс-платформенные приложения. php-gtk является расширением php и не поставляется вместе с дистрибутивом php.
php доступен для большинства операционных систем, включая linux, многие модификации unix (такие, как hp-ux, solaris и openbsd), microsoft windows, mac os x, risc os, и многих других. (существует даже версия php для os/2. неизвестно, правда, насколько соответствующая нынешним реалиям). также в php включена поддержка большинства современных вебсерверов, таких, как apache, microsoft internet information server, personal web server, серверов netscape и iplanet, сервера oreilly website pro, caudium, xitami, omnihttpd и многих других. для большинства серверов php поставляется в качестве модуля, для других, поддерживающих стандарт cgi, php может функционировать в качестве процессора cgi.
таким образом, выбирая php, вы получаете свободу выбора операционной системы и вебсервера. кроме того, у вас появляется выбор между использованием процедурного или объектно-ориентированного программирования или же их сочетания.

php способен не только выдавать html. возможности php включают формирование изображений, файлов pdf и даже роликов flash (с использованием libswf и ming), создаваемых "на лету". php также способен выдавать любые текстовые данные, такие, как xhtml и другие xml-файлы. php способен осуществлять автоматическую генерацию таких файлов и сохранять их в файловой системе вашего сервера, вместо того, чтобы отдавать клиенту, организуя, таким образом, кеш динамического содержания, расположенный на стороне сервера.

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

adabas d
ingres
oracle (oci7 и oci8)
dbase
interbase
ovrimos
empress
frontbase
postgresql
filepro (только чтение)
msql
solid
hyperwave
direct ms-sql
sybase
ibm db2
mysql
velocis
informix
odbc
unix dbm

также в php включена поддержка dbx для работы на абстрактном уровне, так что вы можете работать с любой базой данных, использующих dbx. кроме того, php поддерживает odbc (open database connection standard), таким образом, вы можете работать с любой базой данных, поддерживающей этот всемирно признанный стандарт. подробнее о работе php с субд здесь. php также поддерживает "общение" с другими сервисами с использованием таких протоколов, как ldap, imap, snmp, nntp, pop3, http, com (на платформах windows) и многих других. кроме того, вы получаете возможность работать с сетевыми сокетами "напрямую". php поддерживает стандарт обмена сложными структурами данных wddx. обращая внимание на взаимодействие между различными языками, следует упомянуть о поддержке объектов java и возможности их использования в качестве объектов php. для доступа к удаленным объектам вы можете использовать расширение corba.

php включает средства обработки текстовой информации, начиная с регулярных выражений perl или posix extended и заканчивая парсером документов xml. для парсинга xml используются стандарты sax и dom. для преобразования документов xml вы можете использовать расширение xslt.
преимущества
главным фактором языка рнр является практичность. рнр должен предоставить программисту средства для быстрого и эффективного решения поставленных задач. практический характер рнр обусловлен пятью важными характеристиками:

    традиционностью;
    простотой;
    эффективностью;
    безопасностью;
    гибкостью.

существует еще одна «характеристика», которая делает рнр особенно привлекательным: он распространяется бесплатно! причем, с открытыми исходными кодами ( open source ).

традиционность

язык рнр будет казаться знакомым программистам, работающим в разных областях. многие конструкции языка позаимствованы из си, perl.

код рнр очень похож на тот, который встречается в типичных программах на с или pascal. это заметно снижает начальные усилия при изучении рнр. php — язык, сочетающий достоинства perl и си и специально нацеленный на работу в интернете, язык с универсальным (правда, за некоторыми оговорками) и ясным синтаксисом.

и хотя php является довольно молодым языком, он обрел такую популярность среди web-программистов, что на данный момент является чуть ли не самым популярным языком для создания web-приложений (скриптов).

простота

сценарий рнр может состоять из 10 000 строк или из одной строки — все зависит от специфики вашей задачи. вам не придется подгружать библиотеки, указывать специальные параметры компиляции или что-нибудь в этом роде. механизм рнр просто начинает выполнять код после первой экранирующей последовательности (<?) и продолжает выполнение до того момента, когда он встретит парную экранирующую последовательность (?>). если код имеет правильный синтаксис, он исполняется в точности так, как указал программист.

php — язык, который может быть встроен непосредственно в html -код страниц, которые, в свою очередь будут корректно обрабатываться php -интерпретатором. мы можем использовать php для написания cgi-сценариев и избавиться от множества неудобных операторов вывода текста. мы можем привлекать php для формирования html-документов, избавившись от множества вызовов внешних сценариев.

большое разнообразие функций php избавят вас от написания многострочных пользовательских функций на c или pascal .

эффективность

эффективность является исключительно важным фактором при программировании для многопользовательских сред, к числу которых относится и web .

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

по некоторым оценкам, большинство php-сценариев (особенно не очень больших размеров) обрабатываются быстрее аналогичных им программ, написанных на perl. однако, чтобы не делали разработчики php, откомпилированные исполняемые файлы будут работать значительно быстрее – в десятки, а иногда и в сотни раз. но производительность php вполне достаточна для создания вполне серьезных web-приложений
безопасность

рнр предоставляет в распоряжение разработчиков и администраторов гибкие и эффективные средства безопасности, которые условно делятся на две категории: средства системного уровня и средства уровня приложения.

1. средства безопасности системного уровня

в рнр реализованы механизмы безопасности, находящиеся под управлением администраторов; при правильной настройке рнр это обеспечивает максимальную свободу действий и безопасность. рнр может работать в так называемом безопасном режиме (safe mode), который ограничивает возможности применения рнр пользователями по ряду важных показателей. например, можно ограничить максимальное время выполнения и использование памяти (неконтролируемый расход памяти отрицательно влияет на быстродействие сервера). по аналогии с cgi-bin администратор также может устанавливать ограничения на каталоги, в которых пользователь может просматривать и исполнять сценарии рнр, а также использовать сценарии рнр для просмотра конфиденциальной информации на сервере (например, файла passwd).

2. средства безопасности уровня приложения

в стандартный набор функций рнр входит ряд надежных механизмов шифрования. рнр также совместим с многими приложениями независимых фирм, что позволяет легко интегрировать его с защищенными технологиями электронной коммерции (e-commerce). другое преимущество заключается в том, что исходный текст сценариев рнр нельзя просмотреть в браузере, поскольку сценарий компилируется до его отправки по запросу пользователя. реализация рнр на стороне сервера предотвращает похищение нетривиальных сценариев пользователями, знаний которых хватает хотя бы для выполнения команды view source.
гибкость

поскольку рнр является встраиваемым (embedded) языком, он отличается исключительной гибкостью по отношению к потребностям разработчика. хотя рнр обычно рекомендуется использовать в сочетании с html, он с таким же успехом интегрируется и в javascript, wml, xml и другие языки. кроме того, хорошо структурированные приложения рнр легко расширяются по мере необходимости (впрочем, это относится ко всем основным языкам программирования).

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

поскольку рнр не содержит кода, ориентированного на конкретный web-сервер, пользователи не ограничиваются определенными серверами (возможно, незнакомыми для них). apache, microsoft iis, netscape enterprise server, stronghold и zeus — рнр работает на всех перечисленных серверах. поскольку эти серверы работают на разных платформах, рнр в целом является платформенно-независимым языком и существует на таких платформах, как unix, solaris, freebsd и windows 95/98/nt/2000/xp/2003.

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

бесплатное распространение

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

принятие стратегии open source и бесплатное распространение исходных текстов рнр оказало неоценимую услугу пользователям.
   
история
смотрите также:история развития смежных с php проектов

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

истоки php лежат в старом продукте, имевшем название php/fi. php/fi был создан расмусом лердорфом в 1995 году и представлял собой набор perl-скриптов для ведения статистики посещений его резюме. развитие web еще только начиналось, никаких специальных средств для решения этих задач не было, и к автору хлынул поток сообщений с вопросами. лердорф начал бесплатно раздавать свой инструментарий, названный «personal homepages tools» (php) - («инструменты для персональных домашних страниц»). очень скоро потребовалась большая функциональность и расмус пишет новую, намного более обширную версию на c, работающую с базами данных и позволяющую пользователям разрабатывать простейшие web-приложения. расмус лердорф решил выложить исходный код php/fi на всеобщее обозрение, исправление ошибок и дополнение.

php/fi (personal home page / forms interpreter - персональная домашняя страница / интерпретатор форм) включал в себя базовую функциональность сегодняшнего php. он имел переменные в стиле perl, автоматическую интерпретацию форм и возможность встраиваться в html-код. собственно синтаксис языка имел много общего с perl, хотя и был намного проще и ограниченнее.

в 1997 выходит php/fi 2.0. вторая версия c-имплементации обозначила группу пользователей: несколько тысяч людей по всему миру, с примерно 50,000 доменами, что составляло около 1% всего числа доменов интернета. несмотря на то, что разработкой занималось уже несколько людей, php/fi 2.0 все еще оставался крупным проектом одного человека.

официально php/fi 2.0 вышел только в ноябре 1997 года, после проведения большей части своей жизни в бета-версиях. вскоре после выхода его заменили альфа-версии php 3.0.

php3

php 3.0 была первой версией, напоминающей php, каким мы знаем его сегодня. в 1997 году энди гутманс (andi gutmans) и зив сураски (zeev suraski) переписали код с начала: разработчики сочли php/fi 2.0 не пригодным для разработки приложения электронной коммерции, над которым они работали для проекта университета. для совместной работы над php 3.0 с помощью базы разработчиков php/fi 2.0 энди, расмус и зив решили объединиться и объявить php 3.0 официальным преемником php/fi, разработка же php/fi была практически полностью прекращена.

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

абсолютно новый язык программирования получил новое имя. разработчики отказались от дополнения о персональном использовании, которое имелось в аббревиатуре php/fi. язык был назван просто 'php' -- аббревиатура, содержащая рекурсивный акроним: 'php: hypertext preprocessor' (php: препроцессор гипертекста).

первая статья о php была опубликована в чешском варианте 'computerworld' весной 1998 и освещала php 3.0. как и в случае с книгами, эта была первая в серии статья из множества посвященных php и опубликованных в различных известных журналах.

к концу 1998, php использовался десятками тысяч пользователей. сотни тысяч web-сайтов сообщали о том, что они работают с использованием языка. в то время php 3.0 был установлен приблизительно на 10% серверах интернета!

php 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичного тестирования.

php4

к зиме 1998 года, практически сразу после официального выхода php 3.0, энди гутманс и зив сураски начали переработку ядра php. в задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода php. расширения дали php 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных api и протоколов, но php 3.0 не имел качественной поддержки модулей и приложения работали не эффективно.

новый движок, названный 'zend engine' (zend.com) (от имен создателей: zeev и andi), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. php 4.0, основанный на этом движке и принесший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника php 3.0. в дополнение к улучшению производительности, php 4.0 имел еще несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

сегодня php используется сотнями тысяч разработчиков. миллионы (!) сайтов сообщают о работе с php. эти, а также многие другие факты, позволяют с уверенностью сказать, что php является одним из самых популярных языков web-программирования!

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

php5

недавно вышла новая, пятая версия php (php5). php5 использует новую версию «движка» zend – zend engine 2.

в php5 объектная модель была значительно переработана. при этом было добавлено много новых возможностей, благодаря которым php5 получил некоторые черты таких объектно-ориентированных языков, как c++ и java.

изменения коснулись производительности встроенных стандартных функций php. по некоторым оценкам, скорость работы стандартных функций в php5 увеличилась на 40% и более.

появились новые директивы файла настройки php.ini .претерпела изменения и поддержка потоков. были добавлены новые функции, а также функции графической библиотеки gd.       
что нового в php5 ?
не так давно вышла новая пятая версия php - php5. рассмотрим основные изменения.

новая объектная модель zend 2.0

zend 1.0, а также более ранние версии "движка" php, нерационально использовали память, поскольку объекты обрабатывались как примитивные типы (переменные, списки), то есть посредством копирования. в новой объектной модели, которая используется в zend 2.0 используется технология объектных дескрипторов, напоминающая аналогичную технологию в java. теперь объекты доступны только через дескрипторы, позволяя экономить память и получать полный контроль над созданием и дублированием объектов. о новых возможностях объектно-ориентированного программирования в php5 вы можете ознакомиться в специальном разделе.

улучшенная производительность

zend engine 2 использует новый менеджер памяти. два главных его преимущества: улучшенная поддержка многопоточных сред (распределенные блоки не нуждаются во взаимных исключительных блокировках) и то, что после каждого запроса намного эффективнее освобождаются распределенные блоки памяти.

изменение коснулись производительности встроенных функций php. по различным оценкам, увеличение производительности достигает 40%.

новые директивы

в конфигурационном файле php - php.ini теперь доступны новые директивы:

    session.hash_function - выбор функции хеширования сессий (sha1 или md5);
    session.hash_bits_per_character - определяет, какое число бит в символе используется при хешировании сессий (от 4 до 6);
    register_long_arrays - включает/отключает регистрацию длинных массивов;
    mail.force_extra_parameters - дополнительные почтовые параметры;
    zend.ze1_compatibility_mode - включение совместимости с zend engine 1 (php4).

новые механизмы работы с потоками

    поддержка потоков претерпела множество изменений:
    более высокая производительность функций readfile(), fpassthru() и некоторых других стандартных функций для работы с потоками;
    новая функция stream_socket_client() - более мощный аналог сетевой функции fsockopen();
    новая функция stream_socket_accept() - принимает соединения клиента;
    новая функция stream_socket_get_name() - получает локальное или удаленное имя сокета;
    новая функция stream_copy_to_stream() - позволяет копировать поток в поток;
    новая функция, позволяющая читать информацию из потока до определенного символа или строки - stream_get_line();
    поддержка динамической загрузки openssl;
    возможность работы функций opendir(), stat(), unlink() с ftp - соединениями.

новы функции php5

в php5 включено достаточно большое количество новых функций:

функции для работы с массивами (array):

    array_combine() - создает массив, используя один массив для ключей и другой - для его значений;

    array_diff_uassoc() - вычисляет различие массивов с дополнительной индексной проверкой;

    array_udiff() - вычисляет различие массивов, используя функцию повторного вызова для сравнения данных;

    array_udiff_assoc() - вычисляет различие массивов с дополнительной индексной проверкой. данные сравниваются с использованием функции повторного вызова;

    array_udiff_uassoc() - вычисляет различие массивов с дополнительной индексной проверкой. данные сравниваются с использованием функции повторного вызова. индексная проверка также сделана функцией повторного вызова;

    array_walk_recursive() - применяет пользовательскую функцию рекурсивно к каждому члену массива;

    array_uintersect_assoc() - вычисляет пересечение массивов с дополнительной индексной проверкой. данные сравниваются, используя функцию повторного вызова;

    array_uintersect_uassoc() - вычисляет пересечение массивов с дополнительной индексной проверкой. и данные, и индексы сравниваются, используя функции повторного вызова;

    array_uintersect() - вычисляет пересечение массивов. данные сравниваются, используя функцию повторного вызова;

новые функции для работы с базой данных interbase:

    ibase_affected_rows() - возвращает номер строк, которые затронул предыдущий запрос;

    ibase_backup() - запускает задачу резервирования в сервисном менеджере;

    ibase_commit_ret() - производит транзакцию без ее закрытия;

    ibase_db_info() - запрос статистика базы данных;

    ibase_drop_db() - удаляет базу данных;

    ibase_errcode() - возвращает код ошибки;

    ibase_free_event_handler() - отменяет зарегистрированный обработчик события;

    ibase_gen_id() - увеличивает значение генератора и возвращает его новое значение;

    ibase_maintain_db() - выполняет сервисную команду на сервере баз данных;

    ibase_name_result() - присваивает имя набору результатов;

    ibase_num_params() - возвращает число параметров в запросе;

    ibase_param_info() - возвращает информацию о параметре запроса;

    ibase_restore() - запускает задачу восстановления в сервисном менеджере;

    ibase_rollback_ret() - производит "обратную транзакцию", сохраняя контекст транзакции;

    ibase_server_info() - запрашивает статистику базы данных;

    ibase_service_attach() - осуществляет соединение с сервисным менеджером;

    ibase_service_detach() - разрывает соединение с сервисным менеджером;

    ibase_set_event_handler() - регистрирует функцию повторного вызова, которая будет вызвана, когда события будут зарегистрированы;

    ibase_wait_event() - ожидает события, которое будет зарегистрировано базой данных;

функции расширения iconv:

    iconv_mime_decode() - декодирует поле заголовка mime;

    iconv_mime_decode_headers() - декодирует множество поля заголовка mime одновременно;

    iconv_mime_encode() - составляет поле заголовка mime;

    iconv_strlen() - возвращает число символов строки;

    iconv_strpos() - находит позицию первого вхождения подстроки в строку;

    iconv_strrpos() - находит позицию последнего вхождения подстроки в строку;

    iconv_substr() - вырезает часть строки.

функции для работы с потоками (streams):

    stream_copy_to_stream() - копирование данных из одного потока, в другой;

    stream_get_line() - получает строку из ресурса;

    stream_socket_accept() - принимает соединение клиента на сокете, созданном stream_socket_server();

    stream_socket_client() - отрывает соединение посредством internet или unix сокетов;

    stream_socket_get_name() - возвращает имя локального или удаленного сокета;

    stream_socket_recvfrom() - получает данные из сокета, соединенного или нет;

    stream_socket_sendto() - посылает сообщение сокету, независимо, подключен он, или нет;

    stream_socket_server() - создает internet или unix сокет.

функции, используемые для работы с датами и временем:

    idate() - форматирует местное время/дату как целое число;

    date_sunset() - время заката данного дня в зависимости от местоположения;

    date_sunrise() - время восхода данного дня в зависимости от местоположения;

    time_nanosleep() - задержка в секундах и наносекундах.

функции для работы с строками (strings):

    str_split() - преобразовывает строку в массив;

    strpbrk() - выполняет поиск строки с любым набором символов;

    substr_compare() - выполняет регистро-независимое сравнение двух строк, начиная со смещения, и до длины строки;

прочие новые функции:

    convert_uudecode() - декодирует uuencoded - закодированную строку

    convert_uuencode() - кодирует по типу uuencoded;

    curl_copy_handle() - копирует дескриптор curl;

    dba_key_split() - разбивает ключ на строковое представление в виде массива;

    dbase_get_header_info() - получает информацию о заголовке базы данных dbase;

    dbx_fetch_row() - производит выборку строк из query_result, который имеет флаг dbx_result_unbuffered;

    fbsql_set_password() - изменяет пароль текущего пользователя базы данных fbsql;

    file_put_contents() - записывает строку в файл;

    ftp_alloc() - распределяет пространство для файла, который будет передан через ftp;

    get_declared_interfaces() - возвращает массив всех объявленных интерфейсов;

    get_headers() - получает все заголовки, посланные сервером в ответ на запрос http;

    headers_list() - возвращает список посланных заголовков (или готовых к посылке);

    http_build_query() - генерирует url-кодированную строку запроса;

    image_type_to_extension() - возвращает расширение файла графического типа, который был возвращен графическими функциями: getimagesize(), exif_read_data(), exif_thumbnail(), exif_imagetype();

    imagefilter() - функция, позволяющая применять к графическим изображениям различные фильтры;

    imap_getacl() - возвращает acl для данного почтового ящика;

    ldap_sasl_bind() - связывает с каталогом ldap, используя sasl;

    mb_list_encodings() - возвращает массив всех поддерживаемых кодировок;

    pcntl_getpriority() - возвращает приоритет любого процесса;

    pcntl_wait() - ожидает возврата состояния текущей дочерней ветви, определенного системным вызовом waitpid();

    pg_version() - возвращает массив с версиями клиента, протокола и сервера (когда доступно);

    php_check_syntax() - осуществляет проверку синтаксиса указанного php скрипта;

    php_strip_whitespace() - возвращает исходный код с разделенными комментариями и межстроковым пространством;

    proc_nice() - изменяет приоритет текущего процесса;

    pspell_config_data_dir() - изменяет месторасположение файлов лингвистической информации;

    pspell_config_dict_dir() - изменяет месторасположение основного списка слов;

    setrawcookie() - посылает cookies без кодирования url-а;

    snmp_read_mib() - читает и производит парсинг mib файла в активное mib дерево;

    sqlite_fetch_column_types() - возвращает массив типов столбца конкретной таблицы;

новые расширения

расширение tidy:

php 5 включает поддержку очень полезной библиотеки tidy (http://tidy.sf.net/). она позволяет разработчикам php разбирать, диагностировать, чистить и восстанавливать документы html. расширение tidy поддерживает как функциональный, так и объектно-ориентированный интерфейс, и ее api использует механизм исключений рнр 5.

расширение perl:

хотя и не включенное по умолчанию в рнр 5, расширение perl позволяет вам вызывать perl-скрипты, использовать объекты perl и использовать другие функциональные возможности perl прямо из кода php.
расширение sqlite:

поддержка sqlite (http://www.sqlite.org/) изначально была введена в php 4.3.x. это встроенная библиотека sql, которая не требует sql сервера и очень подходит для приложений, которые не требуют масштабируемых sql-серверов, или если вы разворачиваете свое приложение у провайдера, который не предоставляет вам доступ к sql-серверу. вопреки названию, sqlite очень богата возможностями и поддерживает транзакции, вложенные выборки, представления (view) и большие db-файлы. здесь это упомянуто, как возможность php 5, потому что поддержка sqlite была введена довольно в поздних релизах php 4, и поскольку php 5 предоставляет новый объектно-ориентированный интерфейс и поддерживает итераторы.

новое расширение mysqli (усовершенствованная mysql):

в php 5 для mysql ab (http://www.mysql.com/) было написано новое расширение mysql, которое позволяет вам полностью использовать преимущества новых функциональных возможностей в mysql 4.1 и более новых версий. в противовес старому расширению mysql новое дает вам возможность использовать оба интерфейса: функциональный и объектно-ориентированный. так что теперь у вас есть выбор что предпочесть. новые возможности, поддерживаемые этим расширением, включают контроль транзакций, поддержку репликаций, ssl и многое другое...

улучшенная поддержка xml в php5

после изменений, касающихся самого языка, изменения в работе с xml в php 5 являются, вероятно, самыми существенными. расширение функциональных возможностей xml в php 5 делают язык полностью равноправным другим, используемых в сети.

основы:

поддержка xml в php 4 базировалась на разнообразных библиотеках xml. поддержка sax осуществлялась старой библиотекой expat, для использования xslt необходима была библиотека sablotron, для dom использовалась более мощная libxml2 - библиотека проекта gnome.

использование разнообразных сторонних библиотек не делало php 4 лучше других языков, когда дело касалось поддержки xml. сопровождение библиотек расширений было слабое, новые стандарты xml не всегда поддерживались, производительность была не столь хороша, как была возможна, взаимодействия между различными расширениями xml не существовало.

в php 5 все расширения xml были переписаны, чтобы использовать отличный набор инструментов, предоставляемый libxml2 (http://www.xmlsoft.org/). это библиотека богатая возможностями, отлично сопровождаемая и эффективно реализовавшая стандарты xml, предоставляющая передовые возможности технологии xml в php.

все вышеупомянутые расширения (sax, dom и xslt) теперь используют libxml2, включая новые дополнительные расширения - simplexml и soap.

sax:

как говорилось выше, новая реализация sax переведена от использования expat к libxml2. хотя новое расширение должно быть совместимо, могут быть некоторые тонкие различия. разработчики, которые хотят продолжать работать с библиотекой expat, могут это сделать, конфигурируя и собирая php соответствующим образом (не рекомендовано).

dom:

хотя поддержка dom в php 4 была также основана на библиотеке libxml2, она изобиловала ошибками, грешила утечками памяти, и api во многих случаях не соответствовал рекомендациям w3c. расширение dom было полностью переписано для php 5. мало того, что расширение было коренным образом переписано, теперь оно соответствует рекомендациям w3c. например, названия функций теперь используют нотацию studlycaps (присваивание имен со смешанным употреблением заглавных и строчных букв) как предписано по стандарту w3c, облегчая для вас применение прочитанного в документации w3c в php. кроме того, расширение dom теперь поддерживает три вида схем для валидации xml документов - dtd, xml schema и relaxng.

в результате этих изменений код, написанный для php 4 с использованием dom, не всегда будет выполняться в php 5. однако, простая корректировка названий функций к новому стандарту в большинстве случаев решает проблему.

xslt:

в php 4, было два расширения, которые поддерживали xsl-преобразования. первое использовало sablotron, а второе - поддержку xslt в расширении dom. в php 5 новое расширение xsl было основано на использовании libxml2. так, в php 5 xsl-преобразование не принимает таблицу стилей xslt в качестве параметра, но зависит от расширения dom, чтобы загрузить ее. таблица стилей может кэшироваться в памяти, и может быть применена ко многим документам для существенной экономии времени выполнения.

simplexml:

вероятно, через год или два, оглянувшись назад, мы сможем сказать, что simplexml коренным образом изменил работу с xml-документами для php разработчиков. simplexml можно было бы действительно называть "xml для чайников". вместо того, чтобы иметь дело с dom или, что еще хуже, sax, simplexml позволяет представить ваш xml-документ как родной объект php. вы можете читать, писать или пробегаться по вашему xml-документу, с легкой непринужденностью получая доступ к элементам и атрибутам.

рассмотрите следующий xml-документ:   

рассмотрите следующий xml-документ:
<clients>
<client>
     <name>john doe</name>
     <account_number>87234838</account_number>
</client>
<client>
     <name>janet smith</name>
     <account_number>72384329</account_number>
</client>
</clients>
следующий фрагмент кода печатает имя каждого клиента и номер его аккаунта:
<?php
$clients = simplexml_load_file('clients.xml');
foreach ($clients->client as $client) {
     print "$client->name has account number $client->account_number ";
}
?>
как видим, simplexml действительно прост.

а в случае, если есть необходимость сделать что-то, что невозможно выполнить в рамках simplexml, вы можете преобразовать свой объект simplexml в дерево dom, вызвав функцию dom_import_simplexml(), выполнить необходимое, и вернуться назад к simplexml, используя simplexml_import_dom(). благодаря тому, что оба расширения реализованы в одной библиотеке xml, переключения между ними теперь реальны.

soap:

официально поддержка soap в php 4 отсутствовала. обычно, при необходимости использовать soap, приходилось использовать pear, но поскольку код был написан полностью на php, приложение не могло выполняться так же, как встроенное с-расширение. другие доступные с-расширения так и не смогли достичь стабильной версии и широкого применения, и поэтому не были включены в php 5.

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

следующий код демонстрирует вызов функции somefunction(), определенной в wsdl-файле:
<?php
$client = new soapclient("some.wsdl");
$client->somefunction($a, $b, $c);
?>