Для компиляции должен быть установлен Microsoft Visual C++ версии 6 (возможно и 5, но не рекомендуется).
Необходим комплект эмулятора утилит GNU для Windows Cyg-win, который можно загрузить со многих сайтов (например: http:// sources, redhat.com/cygwin/download.html).
С сайта РНР следует загрузить набор файлов в архиве http://www. php.net/extra/win32build.zip.
А также библиотеку работы с именами DNS http://www.php.net/ extra/bindlib_w32.zip. Это замена библиотеки resolv.lib из архива win32build.zip.
Для распаковки архивов, естественно, нужен разархиватор unzip.
И конечно, необходим сам пакет исходных кодов РНР. Его можно загрузить с сервера РНР CVS (см. инструкции на странице http:// www.php.net/anoncvs.php). Но не стоит забывать, что там размещается версия, находящаяся на стадии разработки и отладки, и она может работать нестабильно. Пакет стабильной версии можно в архиве скачать с адреса: http://www.php.net/downloads.php, а промежуточные версии — с адреса: http://snaps.php.net/.
Подготовка к компиляции
Установите Cygwin, запустив setup.exe. Выберите установочный каталог, например C:\cygnus. Обычно установка успешно выполняется в автоматическом режиме.
Создайте каталог, в котором вы будете проводить компиляцию (например: C:\PHP-win32build). Разархивнрупте в нее пакет исходных кодов РНР. Скопируйте туда распакованный архив win32build.zip.
Запустите Microsoft Visual C++, выберите пункт Options меню Tools. В диалоговой панели выберите вкладку directories. Последовательно установите для каждого пункта раскрывающегося списка: Executables, Includes и Library files соответственно каталоги: cygwin\bin, win32build\ include и win32build\lib (для добавления пункта выделите пустую строку в конце списка и введите путь). Обычно каталоги имеют следующие имена: c:\cygnus\bin, c:\php-win32build\include, c:\php-win32build\lib. Нажмите ОК.
Создайте другой каталог и распакуйте туда bindlib_w32.zip. В VC++ выберите bindlib.dsw (Файл > Open Workspace). Выберите один из вариантов компиляции (Build > Set Active Configuration): отладочный (bindlib — Win32 Debug) или нет (bindlib — Win32 Release). Скомпилируйте библиотеку (Build > Rebuild All)1. Скопируйте полученный файл resolv.lib (из каталога Debug или Release), заменяя им имеющийся в дистрибутиве (в каталоге С:\ PHP-win32build\lib).
Компиляция
Чтобы скомпилировать CGI-всрсию РНР, откройте в VC++ проект win32\php4ts.dsw (Файл > Open Workspace). Выберите вариант компиляции (Build > Set Active Configuration), например php4ts — Win32 Release_TS. Скомпилируйте файлы php.exe и php4ts.dll (Build > Rebuild All или Build > Build php.exe).
Возможно, у вас возникнет следующая ошибка: при попытке открытия в VC++ файла Tsrm.dsw будет выдано сообщение о том, что файл имеет неправильный формат или поврежден. Это происходит из-за различия в форматах текстовых файлов Unix и Windows: в Unix завершение строк помечается символом «\п>>, а в Windows двумя символами — «\г\п». Исправить это легко — откройте файл Tsrm.dsw в MS Word и сохраните его под тем же именем (в результате чего будут автоматически преобразованы символы-завершители).
Подобным образом можно скомпилировать РНР в виде модуля для web-сервера Microsoft IIS или какого-либо другого (просто измените вариант компиляции).
Модули расширения компилируются по отдельности (они размещаются в каталоге ext).
Основные сведения о РНР
Изначально аббревиатура РПР означала Preprocessor of Home Pages — препроцессор домашних страниц. Это язык внедряемых в HTML-страницы сценариев, исполняемых на сервере. По большей части его синтаксис заимствован из таких языков, как С, Perl, Java, и при этом добавлена масса возможностей, которых этим языкам недостает. Проще говоря, синтаксис РНР — это разумная альтернатива и строгости С, и «беспредельности» Perl.
РНР наделен практически полным набором функциональности, о которой (до появления РНР) мог только мечтать web-программист. Его цель — позволить максимально быстро создавать динамически генерируемые web-страницы. С полным основанием можно заявить, что изучение и использование РНР будет выгодно как начинающим, так и профессиональным программистам.
Основными конкурентами РНР являются технологии JSP (Java Server Pages и Java Scriptlets), ASP (Active Server Pages), Perl, SSI (Server Side Includes), Cold Fusion Server Pages. Рассмотрим те недостатки, которые присущи указанным технологиям. JSP — достаточно сложный для изучения и использования язык. ASP, основанный на синтаксисе VBScript (Visual Basic), имеет всего несколько десятков собственных функций и поэтому вынужден использовать СОМ-объекты; кроме того, он ориентирован исключительно на работу под Windows. Perl — язык головоломный, и его вольности затрудняют его понимание. SSI позволяет всего лишь компоновать HTML-страницу из нескольких файлов. CF — коммерческий продукт, что является его основным недостатком.
Основные достоинства РНР: бесплатен; постоянно совершенствуется; работает на UNIX и Windows платформах; допускает работу с большинством СУБД; имеет широкий набор функций (более 3 тыс.); допускает объектно-ориентированное программирование; способен использовать протоколы HTTP, FTP, ШАР, SNMP, NNTP, POPS, net sockets 11 другие; позволяет выполнять все операции, что и перечисленные его конкуренты, и даже работать с файлами графики. Можно также запускать PHP-скрипты как интерпретируемые файлы и компилировать исполняемые приложения (в том числе с поддержкой графического интерфейса GTK).
Если вы обнаружите, что РНР не способен на что-то (или работает не так, как вам хотелось бы), никто не будет препятствовать вам вносить в исходный код РНР (написанный на С) желаемые изменения. РНР является программным продуктом с открытым исходным кодом, и внесение в него улучшений и дополнений путем создания собственных модулей расширения всегда приветствуется.
Краткая история РНР
РНР изобретен Расмусом Лердорфом в конце 1994 года. Первая версия выпущена в 1995 году под именем «Инструментарий Персональных Домашних Страниц», затем она была переработана и названа PHP/FI Version 2 (FI — модуль обработки данных для форм). Также была добавлена поддержка баз д'анных mSQL. С этого момента в разработке стали принимать участие добровольцы.
Статистика используемости РНР приблизительна, но, согласно исследованию, проведенному Netcraft, в начале 2001 года РНР использовался на более чем 5 300 000 сайтах по всему миру. Для сравнения: в это время число IIS серверов было примерно таким же (5 млн). Разработка интерпретатора РНР приняла форму организованного командного процесса, ядро интерпретатора разрабатывает компания Zcnd.com. При этом РНР распространяется свободно: его последнюю версию можно загрузить с сайта PHP.net. Модули РНР поставляются в комплекте с сервером Apache, в комплектах систем Linux.
Версии РНР
В конце 2000 года была выпущена версия РНР 4.0.4, в апреле 2001 -4.0.5, а в июне — 4.0.6. Промежуточные версии РНР можно загрузить с серверов CVS. В каждой новой версии появляются новые модули, расширяющие и улучшающие возможности РНР.
Полное руководство РНР доступно на нескольких языках в шести вариантах: документация на сайте PHP.net с аннотациями (>80 Мбайт); один HTML-файл (>3 Мбайт), набор маленьких связанных HTML-страниц (несколько тысяч), UNIX man-файл, скомпилированный Windows HLP-файл (в формате chm) и документация в виде книги PDF. Издательством «Питер» выпущено две книги (одну из которых вы держите в руках), к концу года планируется издать еще две книги.
Данная книга представляет собой краткий справочник, перед которым ставилась задача в наиболее сжатой и ясной форме изложить максимум самой необходимой информации. Подразумевается, что читатель знаком с программированием и web-технологиями. Все описания относятся к версиям РНР 4.0.4—4.0.6.
РНР 4 сильно отличается от своих начальных версий. Основная причина, по которой в данной книге не рассматриваются предыдущие версии РПР и их различия, — это стремление избавиться от ненужной информации: зачем тратить усилия на изучение устаревшего варианта, когда можно бесплатно воспользоваться новейшим.
Дополнительное ПО
Для того чтобы исполнять серверные сценарии, необходим, естественно, сам web-сервер — это может быть PWS или Apache для Windows 95/98, IIS для Windows NT/2000 Server, Apache для UNIX/Linux или какой-либо другой, — а также любой браузер для просмотра результатов исполнения сценария. Но возможен и вариант запуска сценария из командной строки, с помощью CGI интерпретатора php.exe в консольном окне MS-DOS, при этом ни браузер, ни сервер не требуются.
Используя библиотеку PHP-GTK, можно создавать на РНР приложения с графическим интерфейсом, применяя РНР как улучшенную альтернативу Visual Basic, но стоит отметить, что графический интерфейс имеет ярко выраженный Unix-стиль. С сайта www.deskcode. com можно загрузить компилятор РНР, генерирующий исполняемые (.ехе) файлы для Windows (приложению требуется наличие библиотеки php4ts.dll и других используемых модулей).
Поскольку одной из наиболее широко используемых возможностей РНР является работа с базами данных, полезно установить сервер БД, например MySQL или любой другой (PostgreSQJL, InterBase, MS SQL). Нелишней может оказаться и установка драйверов ODBC для имеющихся баз данных.
Существенную помощь окажет редактор PHP-кода. Достаточно удобна среда разработчика PHPEd, которую можно бесплатно загрузить с сайта http://www.soysal.com/PHPEd/. Знакомый всем HomeSite 4.5 (www.allaire.com) также позволяет работать с синтаксисом РНР.
Полезные информационные ресурсы
Как уже отмечено, большая часть информации по РНР доступна в англоязычном варианте. Если это вас не смущает, то можете воспользоваться сайтами PHPBuilder.com, PHPWizard.com, WebMonkcy (lycos.com), Zend.com, PHPClub.ru, которые содержат большой объем статей и учебных руководств по программированию.
На РНР созданы даже целые web-порталы, которые можно интерактивно реконфигурировать, например PHPNuke (исходные РНР-коды можно загрузить с сайта PHPNuke.com). Хотя объем кода таких проектов достаточно велик (несколько Мбайт), наличие перед глазами подобных примеров готовых разработок способно воодушевить вас на не меньшие достижения.
Для понимания некоторых разделов, возможно, потребуется воспользоваться файлами из архива RFC (Request for Comments — запросы на комментарий). Это сборник объяснений спецификаций сетевых и Интернет-технологий, состоящий из более чем 2000 файлов. Например, RFC 1180 - учебник по TCP/IP, RFC 1208 - толковый словарь сетевых терминов, RFC 821 — SMTP протокол, RFC 1939 — протокол POPS. Этот архив доступен, на множестве серверов, в том числе на rs.internic.net (официальный сервер), http://www.faqs.org/rfcs.
Структура книги
Данная книга содержит семь частей, в каждой из которых сгруппированы главы сходной тематики.
Часть 1 — «Синтаксис языка и операторы» — описывает синтаксис и использование РНР.
Часть 2 — «Функции работы с данными» — рассматривает основные функции РНР, которые позволяют вам работать со встроенными типами данных: числами, массивами, строками.
Часть 3 — «Файлы и сети» — описывает способы, имеющиеся в РНР для доступа к файлам, как локальным, так и удаленным; возможности использования сетевых протоколов и работу с архивированными файлами.
Часть 4 — «Управляющие функции» — рассматривает управление функционированием РНР и его коммуникационными возможностями при работе с клиентом и другими приложениями.
Часть 5 — «Взаимодействие с базами данных» — рассматривает схему работы с серверами и файлами БД.
Часть 6 — «Графика, Flash, pdf» — описывает возможности РНР по созданию графических файлов для web: картинок, анимаций, документов.
Часть 7 — «Комплексная обработка данных» — описывает дополнительные возможности РНР по сложной обработке символьных данных (XML и сходные технологии).
Порядок, в котором приводятся функции, отражает логику их использования (например, работа с БД имеет определенную последовательность); функции, независимые друг от друга, расположены но мере повышения их сложности. В приложении приводится перечисление всех функций в алфавитном порядке и в порядке расположения в книге.
Поскольку язык РНР и его модули расширения находятся в процессе непрерывной доработки и улучшения, используемая вами версия РНР может работать несколько отличным образом от того, как это описано в книге. Все примеры, приведенные в книге, были протестированы с РНР версий 4.0.4, 4.0.5, 4.0.6; но все же я настоятельно рекомендую читателям проверять достоверность документации, потому что даже официальное руководство во многих аспектах неполно (или иногда ошибочно) отражает реальные возможности РНР.
В книгу было включено рассмотрение большей части возможностей РНР; в ней описывается 1500 функций. Тем не менее на момент выхода книги, в РНР имелось около 3000 функций. Конечно, вам едва ли придется использовать более трети всего того, что позволяет РНР; именно по этой практической причине в книге не описаны редко используемые и специфические возможности РНР: Hyperwave, ICAP, LDAP, MCAL, MCrypt, Mhash, mnoGoSearch, Scsam DB, SNMP, YAZ, YP/NIS. He забывайте также, что в дальнейшем возможности РНР будут расширены еще больше.
Установка и компиляция РНР
На сайте http://www.php.net/ можно найти несколько установочных пакетов РНР. Для систем Windows предлагаются варианты: готовый пакет CGI с автоматической установкой и полный скомпилированный пакет CGI/ISAPI с дополнительными библиотеками, требующий ручной настройки. Также можно загрузить пакет исходных кодов и скомпилировать весь пакет самостоятельно. Для систем UNIX/Linux обычно приходится перекомпилировать РНР, так как версии операционных систем сильно различаются (возможно, придется дозагру-жать дополнительные библиотеки).
Вопрос о том, имеет ли смысл компилировать РНР самому или стоит воспользоваться готовым пакетом, решает сам программист. Основными мотивами для собственноручной компиляции могут быть: неудовлетворительная конфигурация предлагаемого готового пакета, которую нельзя изменить с помощью редактирования файла php.ini (см. ниже), и желание поупражняться с компилированием.
Для большинства web-серверов можно установить РНР либо в виде серверного модуля ISAPI, либо в виде запускаемого серверного CGI-приложения. CGI-приложение запускается сервером каждый раз, когда необходимо исполнить сценарий, а по завершении сценария РНР выгружается из памяти. ISAPI-модуль загружается один раз при запуске web-сервера и остается в памяти все время, пока работает сервер. Поэтому, чтобы после редактирования файла конфигурации php.ini изменения вступили в силу, необходимо перезапустить сервер. РНР в виде CGI-приложения не позволяет выполнять ряд функций, например использовать устойчивые подключения к серверам баз данных.
Установка и компиляция РНР в UNIX, параметры компиляции
Операционные системы семейства UNIX сильно различаются между собой, поэтому подробного описания в данной книге не приводится. Единственное, что роднит между собой различные UNIX-системы при компиляции РНР, — это параметры компиляции; с их помощью указывается, какие из PHP-модулей необходимо прикомпилировать к основному модулю РНР. Они приводятся ниже. Для тех параметров, которые имеют аргумент DIR, можно указать путь каталога, в котором была установлена используемая библиотека. В скобках указано значение параметра по умолчанию. Дополнительная информация по установке и конфигурированию модулей приводится в соответствующих главах.
Базы данных
with-adabas[=DIR] — включить поддержку Adabas D (/usr/local).
enable-dba=shared — использовать DBA как совместно используемый модуль.
enable-dbase — включить поддержку dbase. Внешние библиотеки не требуются.
with-db2[=DIR] — включить поддержку Berkeley DB2.
with-db3[=DIR] — включить поддержку Berkeley DB3.
with-dbm[=DIR] — включить поддержку DBM.
with-dbmaker[=DIR] — включить поддержку DBMaker (зависит от версии, например /home/dbmaker/3.6).
with-empress[=DIR] — включить поддержку Empress (значение системной переменной $EMPRESSPATH).
enable-filepro — включить встроенную поддержку filcPro. Внешние библиотеки не требуются.
with-gdbm[=DIR] — включить поддержку GDBM.
with-hyperwave — включить поддержку Hyperwave.
with-ibm-db2[=DIR] — включить поддержку IBM DB2 (/home/ db2instl/sqllib).
with-informix[=DIR] — включить поддержку Informix (умолчаний нет).
with-ingres[=DIR] — включить поддержку Ingres II (/II/ingres).
with-interbase[=DIR] — включить поддержку InterBase (/usr/interbase).
with-ldap[=DIR] — включить поддержку LDAP — службы каталогов Lightweight Directory Access Protocol (/usr/Local/Ldap). См. также: RFC1777 и RFC1778.
with-msql[=DIR] — включить поддержку mSQL (/usr/loCdl/Hughes).
with-mysql[=DIR] — включить поддержку MySQL (параметр включен по умолчанию).
with-ndbm[=DIR] - NDBM.
with-oci8[=DIR] - включить поддержку Oraclc-oci8 ($ORACLE_HOME).
with-orade[=DIR] — включить поддержку Oracle-oci7 ($ORACLE_HOME).
with-pgsql[=DIR] — включить поддержку PostgrcSQL (/usr/local/ pgsql).
with-solid[=DIR] — включить поддержку Solid (/usr/local/solid).
with-sybase-ct[=DIR] — включить поддержку Sybase-CT (/home/ Sybase).
with-sybase[=DIR] — включить поддержку Sybase-DB (/home/Sybase).
with-openlink[=DIR] - - включить поддержку OpenLink ODBC (/usr/local/openlink).
with-iodbc[=DIR] — включить поддержку iODBC (/usr/local).
with-custom-odbc[=DIR] — включить поддержку пользовательской библиотеки ODBC (/usr/local). Перед запуском сценария configure необходимо присвоить значение переменной CUSTOM_ODBC__LIBS, а также проверить, чтобы файл odbc.h был доступен.
with-unixODBC[=DIR] — включить поддержку unixODBC support (/usr/local).
with-velocis[=DIR]— включить поддержку Velocis (/usr/local/ velocis). < /FONT>
Ecommerce
with-ccvs[=DIR] — разрешить поддержку CCVS для РИР4.
with-cybercash[=DIR] — включить поддержку CyberCash.
with-pfpro[=DIR]— включить поддержку Verisign Payflow Pro. < /FONT>
Графика
enable-freetype-4bit-antialias-hack — включить поддержку FreeType2 (экспериментальная).
with-gd[=DIR] — включить поддержку GD.
without-gd — запретить поддержку GD.
with-jpeg-dir[=DIR] — каталог библиотеки jpeg для pdflib 3.x.
with-png-dir[=DIR] — каталог библиотеки png для pdflib 3.x.
with-tllib[=DIR] — включить поддержку Tllib.
with-tiff-dir[=DIR] — каталог библиотеки tiff для pdflib 3.x.
with-ttf[=DIR] — включить поддержку FreeType.
with-xpm-dir[=DIR]— каталог библиотеки хрт для gd-1.8+. < /FONT>
Разнообразные параметры
disable-libtool-lock — не использовать блокировку библиотек при компиляции.
disable-pear — не устанавливать PEAR.
disable-pic — не использовать PIC для общих объектов.
disable-posix — не использовать функции POSIX.
disable-session — запретить поддержку сессий.
enable-bcmath — компилировать с поддержкой функций be math. См. также: README-BCMATH.
enable-c9x-inline — использовать семантику C9x-inline.
enable-calendar — использовать преобразования calendar.
enable-debug — компилировать в режиме для отладки.
enable-discard-path — позволяет разместить PHP CGI вне web-каталогов.
with-sablot[=DIR] — разрешить использование Sablotron.
enabte-wddx — разрешить использование WDDX.
disable-xml — запретить поддержку XML с использованием встроенной библиотеки expat.
Установка РНР в Windows
Далее описываются установка и конфигурирование РНР для web-серверов в системах Windows 9x/NT, в частности:
Personal Web Server (PWS);
Internet Information Server (IIS) 6, 4, 5;
Apache 1.3.x.
Автор рекомендует использовать web-сервер Apache по причине того, что он работает на всех системах, и именно при его использовании РНР может проявить все свои возможности. Также РНР можно установить и для ряда других серверов (инструкции не приводятся).
Windows Installshield
Программа установки РНР (которую можно загрузить с сайта http:// www.php.net/) автоматически устанавливает CGI-версию РНР для Apache, IIS или PWS (и других серверов) и самостоятельно настраивает сервер. Процедура установки достаточно понятна и удобна.
Общие шаги установки
Эту процедуру следует проделать для всех серверов, работающих в Windows, если установка производится вручную (а не используется установщик).
Разархивируйте дистрибутив РНР в любой каталог, например С:\РНР\.
Скопируйте файл php.ini-dist в каталог Windows (обычно это c:\windows или c:\winnt).
Отредактируйте файл конфигурации php.ini:
Установите каталог модулей расширения extension_dir (путь к файлам php_*.dll), например: c:\php.
Выберите те модули РНР, которые должны загружаться при запуске интерпретатора, и раскомментируйте их строки extension= php_*.dTI. Модули также можно загружать динамически командой сценария: dl("php_*.dll");. Некоторым модулям требуются дополнительные библиотеки, часть которых находится в каталоге dlls дистрибутива (если их там нет, обратитесь на страницу http://www.php.net/FAQ.php, чтобы узнать, как их можно найти); их следует скопировать в тот каталог, где система может их найти, или добавить путь к ним в переменную PATH.
Для PWS и IIS можно указать путь к файлу browscap.ini: c:\windows\system\1netsrv\browscap.ini для Windows 95/98 и C:\winnt\system32\inetsrv\browscap.ini для NT Server.
Модули DLL PHP имеют префикс php_, что позволяет различать их и используемые ими библиотеки.
Windows 95/98/NT и PWS/IIS 3
Рекомендуется настраивать эти серверы установкой файла php_iis_ reg.inf, pws-php4isapi.reg или pws-php4cgi.reg, входящего в дистрибутив, предварительно его отредактировав и указав реальные каталоги. В противном случае придется редактировать реестр (будьте осторожны, рекомендуется сделать копию реестра).
Запустите Rcgcdit.
Перейдите в раздел HKEY_LOCAL_MACHINE/System/CurrentControlSet/ Services/W3Svc/Parameters/ScriptMap,
Создайте в нем строковый параметр — расширение php-сценари-ев, например: .php. Присвойте ему путь к php.exe в виде: c:\php\ php.exe %s %s.
Повторите этот шаг для каждого расширения, которое будут иметь сценарии.
Теперь перейдите в раздел HKEY_CLASSES_ROOT. Создайте раздел с именем из предыдущего шага, например: .php.
Присвойте значение по умолчанию ("default value"): phpfile.
Повторите шаг для каждого расширения PHP-сценариев, как и ранее.
Создайте раздел phpfile в разделе HKEY_CLASSES_ROOT со значением ц,, умолчанию: «PHP Script».
Создайте в этом разделе раздел «Shell», в нем «open», а в нем «command».
Присвоите разделу значение по умолчанию — путь к файлу php.exe, например; c:\php\php.exe -q %1 (не забывайте про *1).
Закройте Regedit. Если используется PWS, то перезагрузите Windows.
Пользователи us 3 могут также использовать программу конфигурирования http://www.genusa.com/iis/iiscfg.html. PWS 4 позволяет использовать Рнр в виде модуля ISAT4.
Windows NT и IIS 4/5
Откройте Диспетчер служб Интернета (консоль ММС — Internet Service Manager нз раздела Программы > Администрирование) и выберите тот сериер WCD| который необходимо конфигурировать.
Нажмите кнопку Конфигурирование, затем выберите вкладку Арр Mappings.
Для CGI ьерсии. Нажмите кнопку Добавить, введите расширение (Extension) файлов РНР, и укажите путь к интерпретатору (Executable) c:\path-to-php-dir\php.exe %s %s. Не забудьте про *s *s в конце.
Для ISAPI версии. Имя интерпретатора должно быть c:\path-to-php-dir\php4isapi.dn.
Повторите шаг для каждого из расширений.
Для CGI Версии. Установите требуемую политику безопасности для php.exe.
Для ISAPJ версии. Перезапустите web-сервер, чтобы загрузить php4isapi.dll.
Windows 9x/NT и Apache 1.3.x
Рекомендуется ознакомиться с документацией Apache.
Добавьте или измените имеющиеся (обычно они закомментированы) директивы в файле конфигурации httpd.conf (или srm.conf) для запуска версии CGI PHP.
Если необходимо запускать PHP как ISAPI-модуль сервера, необходимо скопировать файл php4ts.dll в каталог windows/system (для Windows 9х/Ме) или winnt/system32 (для Windows NT/2000). А затем добавить в файл конфигурации httpd.conf следующие строки:
LoadModule php4_modu1e с:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php .phtml
Заметьте, что в Win-Apache вес обратные слеши должны писаться как прямые, например: c:/directory/file.ext вместо c:\directory\ file.ext.
Учебник по основам PHP. PHPBeginner
Дата и время
time
Получение времени в секундах (UNIX timestamp)
int time(void);
Возвращаемое значение равняется числу секунд, прошедших с момента начала «Эпохи Unix» (1 января, 1970, 00:00:00 GMT). Этот формат называется «UNIX timestamp». echo time(); // выводит, например: 987972956 См. также date().
microtime
Получение в строке текущей метки времени «UNIX timestamp»
string microtime(void);
Возвращает строку формата «msec sec», где sec — текущее время, измеренное в целых секундах с момента начала «Эпохи Unix » (0:00:00, 1 января, 1970 GMT), a msec — это микросекундная часть. Эта функция доступна только на системах, имеющих системную функцию gettimeofday(). echo microtime(); // выводит, например 0.85738800 98772251 См. также time().
getdate
Получение даты и времени в массиве array getdate (Int timestamp)
Возвращает ассоциативный массив, содержащий информацию о дате и времени, полученную в целочисленном аргументе timestamp, с разделением на следующие элементы:
«seconds» — секунды;
«minutes» - минуты;
«hours» - часы;
«mday» — день месяца;
«wday» — день недели, числовой;
«топ» — месяц, числовой;
«year» — год, числовой;
«yday» — день в году, числовой; например: 327;
«weekday» — день недели, текстовый, полный; например: «Friday»;
print_r (getdate (time())),
Выводит следующее: Array ( [seconds] => 50 [minutes] => 55 [hours] => 13 [mday] => 16 [wday] => 0 [mon] => 4 > [year] => 2008 [yday] => 299 [weekday] => Sunday [month] => Apn 1 [0] => 987414950 )
localtime
Получение времени/даты в массиве
array localtime ([int timestamp [, bool is_associative]])
Первый аргумент функции timestamp — метка времени UNIX, если он не указывается, то используется текущее время. Если второй аргумент (is_associative) равен 0 (это же значение используется по умолчанию), то возвращаемый массив будет численно индексирован; в противном случае возвращается ассоциативный массив, где элементы имеют следующее значение:
([1]). «tm_sec» — секунды;
([2]). «tmjrnn» — минуты;
([3]). «tm_hour» — часы;
([4]). «tmjnday» — день месяца;
([5]). «tmjnon» — месяц в году;
([6]). «tm_year» — год (не совместимый с 2000);
([7]). «tm_wday» — день недели;
([8]). «tm_yday» — день в году;
([9]). «tm_isdst» — активен ли переход на летнее время.
Возвращает ассоциативный массив, содержащий дату, возвращенную системным вызовом. Функция является интерфейсом системной функции gettimeofday(2). Массив содержит следующие элементы:
«sec» — секунды:
«usec» — микросекунды;
«minuteswest» — смещение к западу от Гринвича, в минутах;
«dsttime» — тин dst коррекции (переход на летнее время).
checkdate
Проверка даты на соответствие григорианскому календарю
int checkdate (int month, int day, int year)
Возвращает TRUE, если дата, указанная как «month, day, year» («месяц», «число», «год»), допустима, иначе возвращает FALSE. При проверке принимаются в расчет:
Год (year) находится в пределах от 1 до 32 767 включительно.
Месяц (month) находится в пределах от 1 до 12 включительно.
День Б месяце (day) находится в пределах, допустимых для соответствующего месяца month (от 1 до 28-31). Високосные года при этом также принимаются в расчет.
date
Получение даты в форматированной строке
string date (string format [, int timestamp])
Возвращает строковое значение даты и времени, извлеченное из упакованного в целочисленном аргументе значения timestamp. (Если аргумент timestamp не указан, то используются текущие дата и время.)
При этом возвращаемая строка форматируется согласно указанному в строковом аргументе format значению, которое может состоять из следующих символов, заменяемых на временные компоненты:
s — секунды, от «00» до «59»;
i — минуты, от «00» до «59»;
g — часы, 12-часовой формат без нулей, от «1» до «12»;
6 — часы, 24-часовой формат без нулей, от «О» до «23»;
h — часы, 12-часовой формат, от «01» до «12»;
Н — часы, 24-часовой формат, от «00» до «23»;
а — «до» или «после» полудня: «am» или «рт»;
А — «До» или «После» полудня: «AM» или «РМ»;
d — день месяца (2 цифры с нулями), от «01» до «31»;
j — день месяца (1-2 цифры без пулей), от «1» до «31»;
S — англоязычный суффикс числа из двух букв, например: «th», «nd»;
l (маленькая 'L') — название дня недели по-английски; например: «Friday»;
D — трехбуквенное английское сокращение дня недели; например: «Fri»;
w — порядковое число дня в неделе, от «О» (воскресенье) до «6» (суббота);
z — порядковое число дня в году, от «О» до «365»;
т — месяц (2 цифры с нулями), от «01» до «12»;
п — месяц (1-2 цифры без нулей), от «1» до «12»;
F — английское название месяца, например: «January»;
М — трехбуквенное английское сокращение месяца, например: «Jan»;
t — число дней в указанном месяце, от «28» до «31»;
Y — год, 4 цифры; например: «1999»;
у — год, 2 цифры; например: «99»;
I (большая i) — «1», если действует переход на «летнее время», иначе «О»;
L — «О», если год не високосный, или «1», в противном случае;
В — «Swatch Internet time»;
Т — временная зона компьютера, например: «MDT» (доступна не всегда);
U — целое число секунд, прошедших с момента начала эпохи UNIX (доступна не всегда);
Z — смешение временной зоны в секундах (от «-43200» до «43200»).
Все остальные символы в строковом аргументе format возвращаются в результирующей строке «как есть». Формат «Z» всегда возвращает «О» при использовании с функцией gmdate().
print (date ("1 dS of F Y h.i.s A")); //выводит: Monday 21th of April 2007 01:33:43 PM Дата и время 141 print ("1-е Июля. 2000 года - это: " . date ("I". mktime(0.0.0,7.1.2000))). //выводит: 1-е Июля. 2222 года - это- Saturday Stomorrow = mktime (O.O.O.dateC'm") .date("d")+l.date("Y")). Slastmonth = mktime (0.0.0.date("m")-l.date("d"). dateC'Y")); Snextyear = mktime (O.O.O.dateC'm"), dateC'd"). date("Y")+l):
Для форматирования дат в других языках используйте функции setlocale() и strftime().
См. также: gmdate() и mktime().
gmdate
Аналог функции date() для времени GMT
string gmdate (string format, int timestamp)
Функция подобна date(), за исключением того, что возвращается время по Гринвичу (Greenwich Mean Time — GMT). Например, при запуске в Финляндии (GMT +0200) первая строка напечатает «Jan 01 1998 00:00:00», а вторая: «Dec 31 1997 22:00:00».
echo date ("К d Y H:i.s". mktime (0.0.0.1.1.1998)): echo gmdate ("M d Y H.i s". mktime (0.0.0.1.1.1998)).
См. также: date(), mktime() и gmmktime().
strftime
Получение форматированной строки времени с использованием локальных установок
string strftime (string format [, int timestamp])
Возвращает строку согласно формату, указанному в аргументе format, для указанной в аргументе timestamp метки времени (если метка времени не указывается, то используется текущее время). Язык, на котором выводятся названия месяцев и дней, устанавливается функцией set!оса!е(). В строке формата распознаются следующие спецификаторы:
%а — сокращение дня недели в языке по умолчанию; например, «Wed»;
%А — полное название дня недели в языке по умолчанию; например, «Wednesday»;
%b - сокращение названия месяца в языке по умолчанию; например, «Apr»;
%В — полное название месяца в языке по умолчанию; например, «April»;
%с — формат латы времени в установках по умолчанию; например, «04/18/00 13:44:17»;
?С — номер века (год, деленный на 100 и без дробной части, от 00 до 99);
%d — число месяца (от 00 до 31);
%0 — эквивалент #m/?d/?y;
%е — число месяца (вместо незначащего нуля ставится пробел), от « 1» до «31»;
%h — аналог Яb;
%H— час в 24-часовом счислении (от 00 до 23);
%I — час в 12-часовом счислении (от 01 до 12);
%j — номер дня в году (от 001 до 366);
%т — номер месяца (от 01 до 12);
М - минуты;
%n — символ перехода на новую строку;
%р — «am» или «рт» (до или после полудня), в зависимости от времени;
%г — время в 12-часовом формате (a.m. или p.m.);
%R — время в 24-часовом формате;
%S — секунды;
%t — символ табуляции;
%Т — текущее время, эквивалентно #H:#M:#S;
%и — число дня в неделе (от 1 до 7), где понедельник - 1;
%11 — номер недели в году ( первое воскресенье года считается первым днем первой недели);
%V — номер недели в году по стандарту ISO 8601:1988 (от 01 до 53), где первая неделя — та, в которой насчитывается более 3 дней в текущем году;
%U — номер недели в году, начиная с первого понедельника, как первого дня первой недели;
%w — номер дня в неделе (от 0 до 6). Воскресенье считается нулем;
%х — представление даты в системном формате без указания времени; например, «04/19/01»;
%Х — представление времени в системном формате без указания даты; например, «14:06:26»;
%у — год без цифр века (от 00 до 99);
%Y — полное число года;
%Z — зона времени, имя или сокращение, например «Московское время (лето)»;
%% — символ «%».
setlocale ("LCJIME". "С"): print (strftime ("%/\ in Finnish is ")). setlocale ("LCJIME". "fi_FI"): print (strftime ("3LA. in French ")): setlocale ("LCJIME". "fr_CA"); print (strftime ("$A и in German ")); setlocale ("LCJ-IME". "de_DE"). print (strftime ("ЛАЛп")):
Этот пример будет работать, если ваша система поддерживает соответствующие национальные установки. И не забывайте, не все системы поддерживают весь набор спецификаторов формата.
См. также: setlocale(), mktime() и «Open Group specification of strftime()» (http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.htmL).
gmstrftime
Форматирование локальных времени/даты
string gmstrftime (string format, int timestamp)
Действие функции подобно strftimeO с тем отличием, что возвращается время по Гринвичу (GMT). Например, при запуске в зоне (GMT -0500) первая строка будет следующей: «Dec 31 1998 20:00:00», а вторая: «Jan 01 1999 01:00:00».
int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
Аргументы функции должны быть указаны в порядке: «час, минута, секунда, месяц, день, год, коррекция_времени>>, что часто путают. Не указывать можно только последний аргумент is_dst (при неуказании большего числа аргументов справа вместо них будут подставляться значения текущего времени). Функция возвращает метку времени «Unix timestamp», соответствующую указанным дате и времени (это целое число секунд, прошедших с 1 января 1970 года).
Аргумент is_dst, указывает, осуществлен ли переход на летнее время (1) или нет (0); если это неизвестно, то аргумент — (-1).
Функция полезна при вычислении дат и их проверке, так как она автоматически корректирует время при неправильном указании временных границ. Например, все следующие строки напечатают: «Jan-01-1998».
echo date ("M-d-Y". mktime (0.0.0.12,32.1997)): echo date ("M-d-Y". mktime (0.0.0.13.1.1997)). echo date ("M-d-Y". mktime (0.0.0.1.1.1998)): echo date ("M-d-Y". mktime (0.0.0.1.1.98)):
Год может быть указан двумя (0-69 означают 2000-2069 и 70-99 означают 1970-1999) или четырьмя цифрами.
Последний день месяца может быть указан как нулевой следующего (но не как -1). Следующие строки выведут: «Последнее число Февраля 2000: 29».
Slastday • mktime (0.0.0.3.0.2000). echo strftime ("Последнее число Февраля 2000: И". Slastday). Slastday - mktime (0 0.0.4.-31.2000): echo strftime ("Последнее число Февраля 2000: Id", Slastday):
Даты, в которых год, месяц или день равны нулю, считаются недопустимыми (в таком случае, это будет дата: 30.11.1999).
См. также: date ()и tirae().
gmmktime
Аналог функции time для времени GMT
int gmmktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])
Функция подобна mktime(), за исключением того, что передаваемые параметры представляют время по Гринвичу (GMT).
См. также gmdate().
strtotime
Лексическое преобразование строки времени в «UNIX timestamp» int strtotime (string time [, int now])
Функция ожидает получить дату time в англоязычном формате, чтобы преобразовать ее в целочисленный формат «UNIX timestamp».
pregjnatch
Одиночный регулярный поиск
int pregjnatch (string pattern, string subject [, array matches])
Ищет в тексте, указанном аргументом subject, соответствие шаблону, указанному в pattern. Если совпадение находится, то функция возвращает TRUE, в противном случае — FALSE.
При указании в аргументе matches массива (одномерного) он заполняется найденными фрагментами совпадения. $matches[0] будет содержать фрагмент, совпадающий с полным шаблоном, $matches[l] -совпадение с первым подшаблоном и т. д.
Так как возвращается только одно совпадение, функцию целесообразно использовать исключительно в целях проверки пли в случае, когда множественные совпадения исключены. if (pregjnatch ("/XX/i". "уу Хх хухх")) { // игнорировать регистр print "Найдено" } else { rint "Безуспешный поиск". if (preg_match C7\bxx\b/i" . "уу Хх лухх")) // искать слово '<хх» print "Найдено": else print "Безуспешный поиск"; preg_match("r(http "http-//www php.net/index.html", Smatches): $host = $matches[2]: //должно содержать: www.php.net // найти имена двух последних доменов сервера preg_match("/r\.\/]-t-\.r\.\/]+$/".$host.$matches): echo "domain name is: ".$matches[0]."\n": // напечатает domain nane is php net
См. также: pregjnatcrall(), preg_replace(), preg_split().
preg_match_all
Полный регулярный поиск
int preg_match_all (string pattern, string subject, array matches [, int order])
Ищет в тексте, указанном аргументом subject, все возможные соответствия шаблону, указанному в pattern. Поиск последующих совпадений производится от места последнего совпадения. Функция возвращает число совпадений с полным шаблоном или FALSE, если совпадений не было (или произошла ошибка).
В аргументе matches указывается массив (двухмерный), который заполняется найденными фрагментами совпадения. Аргумент order определяет вид, в котором сохраняются результаты поиска в массиве matches, и может принимать два значения. PREG_PATTERN_ORDER (по умолчанию) - в виде [(под)шаб-лон] [фрагмент]. В (под)массиве Smatches[0] сохраняются совпадения с полным шаблоном, в $matches[l] и последующих — совпадения с подшаблонами. preg_match__all ("|<[A>]+>( .*)[*>]+>|U". "Пример:
мой текст
", Jout. PREG_PATTERN_ORDER):
Теперь массив Sout будет содержать следующие элементы (общая схема):
Фрагменты
0
1
...
Шаблон
0
$out[0]|0] = "Пример: "
$out[0][l] = " мой T6KCT"
$out[0)[...]
Под-шаблоны
1
$out[l][0] = "Пример: "
Sout[l][l] = " мой текст "
$out[l]L-..]
$out[...][0]
$out[...][l]
$out[...][...]
PREG_SET_ORDER — в виде [фрагмент] [(под)шаблон]. В (гюд)массивах $matches[0] — $matches[xxx] сохраняются соответствующие фрагменты совпадения.
Ищет в тексте subject вес фрагменты, соответствующие шаблону pattern, и заменяет их на replacement. Возвращает измененный текст. Если совпадений не находится, то возвращается неизмененный текст subject. Аргумент limit указывает, сколько фрагментов надо заменить; если он не указан или равен
-1, то заменяются все найденные фрагменты.
replacement может содержать обратные ссылки (обычные для регулярных выражений) в форме \\п или, что более предпочтительно, в форме $п. Каждая такая ссылка будет заменяться на фрагмент исходного текста, соответствующий указанному подшаблону. Обычно n может быть от 0 до 99 и \\0 или $0 соответствует целому шаблону.
Каждый аргумент (кроме limit) может быть массивом. В простейшем случае к массиву с текстом применяются единые шаблон и замена (возвращается соответствующий массив). Возможно применение к одному тексту набора шаблонов и заместителей. Если в массиве replacement недостаточно элементов, то вместо них используются пустые строки; если аргумент replacement — строка, то она используется для всех элементов. Сходные комбинации возможны, но едва ли полезны.
Наиболее мощной возможностью функции является возможность использования в регулярном выражении pattern модификатора е. Это заставляет функцию обрабатывать текст замещения replacement как PHP-код (в котором также возможно использовать ссылки). Но не забывайте, что тогда код должен соответствовать всем синтаксическим правилам РНР, иначе будет спровоцирована ошибка.
//Пример 1 Spatterns = array ("/(19|20)(\d{2}) -(\d{1.2})-(\d{1.2})/". "r\s*{(\w+)}\s*=/"): $r-eplace = array ("\\3/\\4/\\l\\2". "$\U ="); print preg_replace (Spatterns, Sreplace. "{startDate} = 1984-5-27"); //напечатает: SstartDate = 5/27/1984 // Пример 2. «использование модификатора /е» // делает все HTML теги заглавными preg_replace ("/(]*>)/e". "\\Г .strtoupper('\\2') '\\3'", $html_body); // Пример 3. Преобразование HTML в текст // Sdocument должен содержать текст HTML. // Удаляются теги HTML tags, секции javascript // пробелы 8 начале строк. Подстановки HTML конвертируются // в их символьное представление. $search = array C"]*?> *? ]*?>'51". // Вырезать теги html "' ([\r\n])[\s]+'". // Вырезать начальные пробелы "'&(quot|#34);'т", // Заменить html entities "'&(amp||38).'V. '"&(lt|#60):'i". "'&(gt|#62): '-!". '"&(nbsp|#160):'i". '"Sdexcllfien.1!" . '"&(cent|fl62);'i". '"&(pound|#163);'i". '"&(copy|#169);'i". "'(\d+).'e"): // обработать php кодом Sreplace = array ("". "\\1", "\"". "&". 11 <" M>". chr(161). chr(162). chr(163). chr(169). "chr(\\l)"): Stext = preg_replace (Ssearch. Sreplace. Sdocument).
См. также: pregjnatch(), preg_match_all(), preg_split().
Возвращает строку str, и которую вставлены слеши перед каждым символом, являющимся метасимволом в регулярных выражениях. Это бывает полезно, когда во время исполнения необходимо создать шаблон для поиска в тексте фрагмента, который может содержать специальные символы.
В аргументе delimiter можно указать перечисление дополнительных символов, которые следует предварять слешем (обычно здесь полезно указать ограничитель шаблона).
Skeywords = "$40 за дЗ/400"; Skeywords = preg_quote (Skeywords. "/"); echo $keywords. // возвращает: \$40 for a g3\/400 // Выделение курсивом слова в тексте HTML, помеченного звездочками Stextbody = "Это *очснь* сложное выражение.". Sword = "*очень*": Stextbody •= preg_replace ("/(".preg_quote(Sword) ")/". "<-,>$11>". Stextbody);
preg_grep
фильтрация элементов массива в соответствии с шаблоном
array preg_grep (string pattern, array input)
Возвращает массив input, в котором оставлены только элементы, соответствующие указанному pattern шаблону.
// возвращает все элементы, содержащие
дробные числа $f1 array =
preg_grep ("/~(\d+)?\ \d+$/". $arra;y)
Функции
get_defined functions
Получение перечисления всех доступных функций
array get_defined_functions(void)
Возвращает многомерный ассоциативный массив, содержащий имена всех функций, доступных сценарию.
См. также: get_defined_vars(), get_extension_funcs().
function_ exists
Проверка существования функции
bool function exists (string function name)
Возвращает TRUE, если функция с именем function_name была декларирована. if ( function_exists( 'imap_open')) { echo "IMAP функции доступны. \n" } else { echo "IMAP функции НЕ доступны \n"-j }
Заметьте, что если имя функции декларировано, это еще не означа-/ ст, что ее можно использовать, и это зависит от конфигурации РНР.
См. также method_exists().
call_user_func
Косвенный вызов функции
mixed call_user_func (string functioiyiame [, mixed parameter [, mixed
Вызывает функцию с именем function_name, передавая ей все последующие аргументы. function AAA ($t) { print "Аргумент - $t": } call_user_fur>c САДА'. "МОЙ аргумент");
create_function
Динамическое создание функции
string create_function (string args, string code)<$M2-36> Создает анонимную функцию и возвращает подобранное для нее имя. Обычно перечисление в строке args аргументов функции передается в одинарных кавычках в качестве ограничителей; и то же рекомендуется для кода тела функции, передаваемого в строке code. Это делается для того, чтобы предотвратить замену интерпретатором переменных на значения; в противном случае необходимо предварять указание переменных слешем: Uavar. Возвращаемые имена функций обычно имеют префикс lambda
Таким образом, можно создавать функции на основе информации, полученной во время исполнения. Snewfunc = create_function('$a.Sb', 'return "ln($a) + ln($b) = " log($a * $b),'); echo "Новой анонимной функции присвоено имя: $newfunc\n"; echo $newfunc(2.M_E)."\n"; // Выводит следующее // Новой анонимной функции присвоено имя- alambda_l // ln(2) + ln(2.718281828459) = 1 6931471805599
Ниже приводится пример функции обработчика, создающей набор функций на основе информации, хранимой в переменных и массиве, а затем пакетно применяющей этот набор к паре аргументов.
function process($varl. $var2. $farr) { // функция обработчик for ($f=0: $f < count($farr); $f++) echo $farr[$f]($varl.$var2)."\n". } // создать набор математических функций $fl = 'if ($a >=0) {return "b*a".5 = ".$b*sqrt($a),}'. ' else {return FALSE:}'; $f2 = "return \"min(bx2+a. a~2+b) = \" min(\$a*\$a+\$b.\$b*\$b+\$a):"; $f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = " log($a)/$b;}'. I else {return FALSE;}'. Sfarr = array( create_function('$x.$y', 'return "немного тригонометрии: ". (sin($x) + $x*cos($y)):'). create_function('$x.$y'. 'return "гипотенуза: ". sqrt($x*$x + $y*$y).'). create_function('$a.$b', $fl). create_function('$a.$b', $f2), create_function('$a.$b'. $f3) ): echo "\пИспользование первого набора матем. функций \n"; echo "parameters: 2.3445. M_PI\n"; process(2 3445. M_PI, Sfarr): // теперь создать набор строковых функций Sgarr = array( create_function ('$b.$a'.'if (strncmp($a.$b,3) == 0)' ' return "** \"$a\" и \"$b\"\n** Похоже строки одинаковы!' ' (после проверки первых трех символов)";'). create_function('$a.$b'.'; return "CRC: ".crc32($a).". ". crc32(b):'), create_function('$a.$b', '; return "sirmlar(a.b) = ". siimlar_text($a.$b,&$p) "($p*)":') ). echo "\пИспользование первого набора строковых функций \n": processC'OnbiT - это сын ошибок". "Опыт - это эксперимент". Sgarr);
После запуска сценария будет выведен следующий текст:
Использование первого набора матем. функций parameters: 2.3445. М_Р1 немного тригонометрии: - 1.6291725057799 гипотенуза 3.9199852871011 о*а'.5 = 4 8103313314525 min(b~2+a a'2+b) = 8.6382729035898 ln(a)/b = 0 27122299212594 Использование первого набора строковых функций ** "Опыт - это эксперимент" и "Опыт - это сын ошибок" ** Похоже строки одинаковы! (после проверки первых трех символов) CRC: -1865696101 . 1908338681 siimlar(a.b) = 13 (60.4651162/907*)
Но, пожалуй, наиболее полезное использование анонимных лямбда-функций — это их использование для создания функций обратного вызова, например при использовании совместно с array_walk() или usort().
//Пример 1. Использование anonymous функций, как callback функций $av = arrayC'the "."a "."that "."this "): array_walk($av. create_function('S$v.$k'.'$v = $v."thing".')): pnnt_r($av): // for PHP 3 use varjJump()// Выводит: // Array // ( // [0] => the thing // [1] => a thing // [2] => that thing // [3] => this thing // ) // массив строк отсортированный по числу символов в строке // от наиболее короткой до самой длинной $sv = arrayC'small","larger","a big string","It is a string thing"); print_r($sv); // Выводит: // Array // ( // [0] => small // [1] => larger // [2] => a big string // [3] => it is a string thing // ) // сортировать строки usort($sv. create_function ('$a.$b' . 'return strlen($b) - strlen($a): ' )): print_r($sv); // Выводит: // Array // { // [О] => it is a string thing // [1] => a big string // [2] => larger // [3] => small // )
func_get_arg
Получение аргумента функции
mixed func_get_arg (Int argjium)
Возвращает указанный argjium аргумент, переданный в текущую пользовательскую функцию в списке параметров. Перечисление параметров начинается с нуля.
Функция func_get_arg() выдаст предупреждение об ошибке при вызове вне определения функции. Также предупреждение будет выдано (а функция возвратит FALSE) при попытке узнать параметр, которого не существует в списке аргументов; для правильной работы функции прежде необходимо узнать общее количество параметров с помощью функции func_num_args().
Возвращает в массиве список аргументов, с которым была вызвана текущая пользовательская функция. Функция выдаст предупреждение об ошибке при вызове вне определения функции.
Возвращает число аргументов, переданных в текущую пользовательскую функцию. Функция выдаст предупреждение об ошибке при вызове вне определения функции.
Эта функция обычно используется совместно с функциями func_get_ arg() и func_get_args() в пользовательских функциях, принимающих неопределенное число параметров.
Массивы
См. также: is_array(), explode(), implode(0, split() и join().
Инициализация массива, добавление/извлечение элементов
array
Создание и инициализация массива array array ([mixed ...]) Языковая конструкция, возвращающая созданный массив. Индексы в ассоциированных массивах и значения элементов разделяются оператором =>. < /FONT >
Пары Index => value разделяются запятыми, они определяют индекс и значение. Индекс может быть строковым или числовым (но в ассоциированных массивах ведет себя как строковый). Если индекс не указывается, подразумевается по умолчанию подставляемое числовое значение автоинкремента (начиная с 0). Если указываются два элемента с одинаковыми индексами, последний заменяет первый. < /FONT >
Пример 1. Sfruits = array ( // создаем двухмерный ассоциативный массив "fruits" => array ("a"=>"orange". "b"=>"banana". "c"=>"apple"). // эквивалент записи: Sfruits ["fruits"]["a"] = "orange"; и т д. "numbers" => array (1.2. 3.4. 5.6). // эквивалент записи: Sfruits ["numbers"][]= 1: и т.д. "holes" = > array ("first". 5= > "second", "third") ):< /FONT >
Пример 2. Sarray = arrayt 1. 1. 1. 1. 2=>4. 19. 3=>13). print_r($array): // распечатать массив Вывод будет следующим: Array ( [0] -> 1 [1] -> 1 С2]=> 4 [3]=
> 13 [4] => 19 ) < /FONT > Пример 3 — одномерный массив.
$firstquarter = arrayd => 'January'. 'February', 'March'); pnnt_r($firstquarter): Вывод будет следующим: Array ( [1] => 'January' [2] =
> 'February' [3] => 'March1 ) < /FONT > См. также list().
array_pad
Добавление в массив нескольких элементов array array_pad (array input, int pad_size, mixed pad_value) Возвращает копию массива, в который добавлены элементы со значением pad_value, так, что число элементов в результирующем массиве становится равным pad_size. Если pad_size > 0, элементы добавляются справа, если < 0, то — слева. Если значение pad_size меньше числа элементов в исходном массиве, никакого добавления не производится (возвращается исходный массив).
См. также: array_pop(), array_shift() и array_unshift().
array_shift
Получение и удаление первых элементов массива
mixed array_shift (array a)
Возвращает первый элемент массива и удаляет его, сдвигая все последующие элементы массива а на одну позицию вперед.
Sargs - array ("-v". "-f"). $opt = array_shift (Sargs); 7 теперь $args = array ("-f");. a $opt = '-v":
См. также: array_unshift(), array_push() и аггау_рор().
array_unshift
Добавление элементов в начало массива
int array_unshift (array агг, mixed var [, mixed ...])
Добавляет перечисленные элементы var в начало массива агг, при этом все последующие элементы агг сдвигаются на число добавленных. Возвращает новое число элементов в массиве.
См. также: array_shift(), array_push() и array_pop().
list
Занесение элементов массива в переменные
void "list(...);
Подобно функции arrayO, это языковая конструкция. Она назначает перечисленным переменным значения элементов массива. Первой указанной переменной назначается значение первого элемента массива, второй — второго и т. д.
Создает массив из указанных переменных, имена которых указаны как аргументы varname, со значениями этих переменных. Число аргументов неопределенное. Аргументами могут быть строки или массивы строк. Если в аргументе указано имя несуществующей переменной, он пропускается. Действие функции противоположно функции extract(). .
void extract (array var_array [, int extractjtype [, string prefix]])
Эта функция экспортирует из ассоциативного массива var_array элементы, делая их глобальными переменными. Индекс элемента используется как имя переменной, а значение элемента — как значение переменной (глобальные переменные — это элементы «символьной таблицы» — массива глобальных переменных $GLOBALS[], и функция extract() копирует элементы массива var_array в массив $GLOBALS[]). Действие функции extract() противоположно compact().
В ходе выполнения функция проверяет элементы массива var_array на наличие коллизий — совпадений с уже существующими переменными. Параметр extract_type определяет, каким образом коллизии будут обрабатываться, и может принимать одно из следующих значений:
EXTRJ3VERWRITE — при коллизии перезаписывать существующую переменную (по умолчанию);
EXTR_SKIP — при коллизии НЕ перезаписывать существующую переменную;
EXTR_PREFIX_SAME — при коллизии добавлять к имени создаваемой переменной префикс prefix;
EXTR_PREFIX_ALL — добавлять к именам всех создаваемых переменных префикс prefix.
Заметьте, что аргумент prefix требуется только тогда, когда аргумент extract_type имеет значение EXTR_PREFIX_SAME или EXTR_PREFIX_ALL
Функция проверяет имя каждой создаваемой переменной на соответствие правилам для имен переменных, и если имя недопустимо, то переменная не создается.
Пример возможного совместного использования с функцией wddx_ deserialize():
Определение числа элементов в комплексной переменной
int count (mixed var)
Возвращает число элементов в массиве или объекте var. Если var -скалярная неременная, то возвращает 1, если такая переменная существует, или 0, если такой переменной нет.
Заметьте, что 0 возвращается и в случае, если переменная не существует, и в случае, когда указан массив, не содержащий элементов. Используйте isset() для проверки существования переменной.
$а[0] = 1; $а[1] - 3; $3^2] = 5 Sresult = count~($a); //возвратит 3 а[2] =1: // такой элемент уже существует $а[4] = "": // пустой элемент $а[6] = 5: $result = count ($a), //теперь возвратит 5
См. также: sizeof(), isset() и is_array().
sizeof
Число элементов массива
int sizeof (array array)
Возвращает число элементов массива аналогично функции count ().
array_count_values
Вычисление числа одинаковых значений массива
array array_count_values (array input)
Возвращает массив, имеющий в качестве индексов уникальные значения массива input, а в качестве значений — количество одинаковых элементов (значений) в массиве input (то есть частоту встречаемости).
$агтау = атау (1. "hello". I. "world", "hello"); array_count_values (Sarray): /7 возвращает array (1=>2. "hello" =
>2. "world" =
>1< /P>< /P>
in_array
Проверка массива на наличие значения
bool in_array (mixed needle, array haystack)
Возвращает TRUE, если в массиве haystack содержится элемент со значением needle.
Возвращает в массиве (все) индексы массива input. При указании необязательного аргумента search_value в массиве возвращаются только индексы элементов массива input, имеющих значение search_ value.
Возвращает в массиве случайным образом выбранные индексы (!) элементов массива input. Число этих элементов указывается аргументом num_req (по умолчанию 1). Если выбирается один элемент, то возвращается не массив, а значение.
Возвращает массив, содержащий все элементы перечисленных массивов. Элементы последующего массива добавляются к концу предыдущего. При наличии элементов с одинаковыми строковыми индексами последующий элемент перезаписывает предыдущий. Для массивов с числовыми индексами совпадающие индексы делаются уникальными и общее число элементов таким образом сохраняется.
Функция сходна с arrayjnergeO с тем дополнением, что она работает с многомерными и древовидными массивами, а элементы с одинаковыми строковыми индексами превращаются в подмассивы (см. пример). Для числовых индексов поведение функции аналогично аггау_ merge().
array array_slice (array array, int offset [, int length])
Возвращает массив, содержащий последовательность элементов массива array, начиная с элемента, имеющего позицию offset, в количестве length элементов.
Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, если < 0, то отчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний здесь (-1).
Если указывается length>0, то это число возвращаемых в массиве элементов; если length < 0, то это позиция последнего возвращаемого элемента в массиве array от его конца. Если length не указывается, то возвращаются элементы вплоть до конца массива array.
Удаление части массива или замена ее частью другого
array array_splice (array array, int offset [, int length [. array replacement]])
Удаляет последовательность элементов массива array путем замены их на элементы из массива repl acement, начиная с элемента массива array, имеющего позицию offset, в количестве length элементов. Воз-вращает массив удаленных элементов.
Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива; если < 0, то отсчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний — (-1).
Если указывается length > 0, то это число удаляемых элементов массива array; если length<0, то это позиция последнего удаляемого элемента в массиве array от его конца. Если length не указывается, то удаляются элементы вплоть до конца массива array. Чтобы удалить все элементы массива array, начиная от позиции offset и вплоть до конца массива array, при указанном аргументе replacement используйте аргумент length, равный count($input).
Реально выяснилось, что при указании отрицательных аргументов offset, length функция работает неправильно.
Если указан массив replacement, то удаляемые элементы заменяются на элементы массива repl acement. Если offset и length такие, что удалять нечего, то элементы массива replacement вставляются в позицию, указанную аргументом offset. Если массив replacement состоит из одного элемента, его можно указать как простую переменную, не заключенную в структуру аггау(). Действие следующих функций эквивалентно:
Устанавливает внутренний курсор массива array на его начало и возвращает значение начального элемента.
См. также: current(), each(), next(J и prev().
end
Перемещение курсора массива в конец
mixed end (array array)
Перемещает внутренний курсор массива array на последний элемент и возвращает этот элемент (его значение).
См. также: current(), each(), end(), next() и reset().
next
Перемещение курсора массива вперед
mixed next (array arr)
Возвращает значение элемента массива arr, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично current(), но затем функция next() перемещает курсор массива на следующий элемент.
Если перемещение курсора вперед приводит к выходу за границы массива, возвращается значение FALSE. FALSE также возвращается, если встречается элемент с пустым значением, поэтому для правильной работы с массивами, содержащими пустые значения или значение индекса 0, используйте функцию each().
См. также: current(), end (), prev() и reset ().
prev
Перемещение курсора массива назад mixed prev (array array)
Возвращает значение элемента массива агг, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично currento, но затем функция prev() перемещает курсор массива на предыдущий элемент. В огличие от next(), prev() перемещает курсор не вперед, а назад.
Если перемещение курсора приводит к выходу за границы массива, возвращается значение FALSE. FALSE также возвращается, если встречается элемент с пустым значением, поэтому для правильной работы г массивами, содержащими пустые значения или значение индекса (), используйте функцию each().
См. также: currento, end(), next() и reset().
current
Определение текущего элемента массива
mixed current (array array)
Каждый массив имеет внутренний указатель на «текущий» элемент этого массива — курсор. Функция возвращает элемент, на который указывает курсор массива, не сдвигая курсор.
Если курсор оказался вне пределов массива, функция возвращает FALSE. Если массив не имеет элементов, функция также возвращает значение FALSE, что делает невозможным различить, пуст массив или уже достигнут конец массива. Для правильного перебора элементов массива используйте функцию each().
См. также: end(), next(), prev() и reset().
pos
Синоним функции currentf)
mixed pos (array array)
См. также: end(), next(), prev() и reset().
key
Получение индекса текущего элемента массива
mixed key (array array)
См. также: current ()и next ().
each
Получение текущего элемента массива array each (array array)
Возвращает в массиве пару «индекс и значение» текущего элемента массива (на который указывает внутренний курсор) и сдвигает курсор массива на следующий элемент. Возвращаемый массив имеет четыре элемента:
[0] => индекс [1] => 'значение' [key] => индекс [value] => 'значение'
Когда курсор достигает конца массива, функция each() возвращает значение FALSE.
Функция each() обычно используется в паре с list() для перебора элементов массива, например $HTTP_POST_VARS[]:
echo "Values submitted via POST method: ". reset ($HTTP_POSM/ARS). while (list ($key. $val) - each ($HTTP_POST_VARS)) { echo "$key =•> $val "
См. также: key(), list(), current(), reset(), next() и prev().
array _walk
Применение функции к элементам массива
Int array_wa!k (array arr, string func, mixed userdata)
Применяет пользовательскую функцию func к каждому элементу массива arr. В пользовательскую функцию с именем func передаются три (два) аргумента: значение текущего элемента, его индекс и аргумент userdata, если он указан.
См. пример использования с функцией create_function().
Если func требует более трех (двух) аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, ставьте знак «@» перед функцией аггау_ walkO или используйте функцию error_reporting().
Функция func будет получать значения и индексы массива arr «по значению», то есть не сможет вносить в него изменения; если это необходимо, передавайте аргумент агг «по ссылке», указав перед его именем «&», и тогда все изменения отразятся на массиве.
В РНР 4 необходимо явно вызвать функцию reset(), чтобы установить внутренний курсор массива на первый элемент.
См. также: arsort(), asort(), ksort(), sort() и usort().
asort
Сортировка ассоциативного массива по возрастанию
void asort (array array [, int sort_flags])
Сортирует элементы массива агг с сохранением ассоциативных индексов. По умолчанию — в алфавитном порядке. Значения флагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().
Sfruits = array ("d"=>"lemon". "a"=> "orange". "b"=>"banana". "c"=>"apple"). asort (Sfruits): eset (Sfruits): while (list ($key. $val) = each (Sfruits)) { echo "$key = $val\n". }
Напечатано будет (значения в алфавитном порядке, индексы сохранены):
При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.
См. также: arsort(), rsort(), ksort() и sort()
arsort
Сортировка ассоциативного массива по убыванию
void arsort (array arr [, int sort_flags])
Сортирует элементы массива arr с сохранением ассоциативных индексов. По умолчанию в обратном алфавитном порядке. Значенияфлагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().
При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.
См. также: asort(). rsort(), ksort() nsort().
ksort
Сортировка массива по возрастанию индексов
int ksort (array array [, int sort_flags])
Сортирует массив array по значениям индексов с сохранением индексных ассоциаций. Аргумент sort_f"lags указывает параметры сортировки — см. функцию sort ().
fruits[a] = ora fruits[b] = ban fruits[c] = app fruits[d] - lem
См. также: asort(), arsort(), sort(), natsort() и rsort().
krsort
Сортировка массива по убыванию индексов
int krsort (array array [, int sort_flags])
Сортирует массив array по значениям индексов в обратном порядке с сохранением индексных ассоциаций. Аргумент sort_flags указывает параметры сортировки — см. функцию sort()
fri/itstd] lem frintsfcl = app fruitstb] j can fruits[a] = ora
См. также: asort(), arsort(), ksort(), sort(), natsortion rsort().
natsort
«Естественная» сортировка массива
void natsort (array array)
Функция сортировки массива array в «естественном» для человека порядке. Пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным»:
Более подробную информацию можно получить на странице Мар-О типа Пула «Natural Order String Comparison» (http://www.linuxcare.com.au/projects/natsort/).
См. также: natcasesort(), strnatcmp() и strnatcasecmp().
natcasesort
«Естественная» сортировка массива, нечувствительная к регистру
void natcasesort (array array)
Функция сортировки массива array в «естественном» для человека порядке с игнорированием регистра. Аналог функции natsort(), см. пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным» в описании функции natsort().
Более подробную информацию можно получить на странице Мартина Пула «Natural Order String Comparison» (http://www.linuxcare. com.au/projects/natsort/).
См. также: sort(), natsort(), strnatcmp() и strnatcasecmp().
Сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function.
Посмотрите примеры в описаниях функций usort() и uksort().
См. также: usort(), uksort(), sort(), asort(), arsort(), ksort() и rsort().
uksort
Пользовательская сортировка массива по индексам
void uksort (array array, function cmp_function)
Сортирует массив arr по индексам с сохранением индексных ассоциации, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.
См. также: usort(), uasort(), sort(), asort(), arsort(), ksort(), natsort() и rsort(),
usort
Пользовательская сортировка массива
void usort (array array, string cmp_function)
Сортирует массив агг с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых значения элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.
См. пример использования с функцией create_function().
Сортирует многомерные массивы (один или более) с сохранением индексной ассоциации, возвращая TRUE при отсутствии ошибок.
Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется! Приоритетом сортировки пользуются первые массивы. Флаги сортиро.'жи могут указываться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.
Флаги определения порядка сортировки (аргументы ох):
SORT_ASC — сортировка в порядке возрастания (по умолчанию);
SORT_DESC - сортировка в порядке убывания.
Флаги типа сортировки (аргументы тх):
SORT_REGULAR — сравнивать элементы как есть (по умолчанию);
Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированы.
// Пример 2 $ar = array (array ("10". 100. 100. "a"), array (1. 3. "2". D): anrayjiultisort ($ar[0]. SORT_ASC. SORT_STRING. $ar[l]. SORT_NUMERIC. SORT_DESC); $ar[0] = ("10", 100, 100, "a") — сортируются как строки по возрастанию, $аг[1] = (1, 3, "2", 1) — сортируются как числа по убыванию.
Математические функции GMP
Эти функции позволяют работать с целыми числами повышенной точности определенного формата, используя библиотеку GNU MP. Для использования их в РЫР необходимо перекомпилировать его с ключом — with-gmp.
Коды библиотеки и документацию можно загрузить с сайта http:// www.swox.com/gmp/. Требуется версия 2 или выше.
Эти функции (их большинство) могут также работать с обычными целочисленными и строковыми (содержащими целые числа) аргументами, которые автоматически преобразуются в формат GMP. Но наивысшая производительность все же достигается при непосредственном использовании чисел формата GMP; см. также gmp_init(). <'php function fact ($x) { // функция вычисления факториала if ($x <= 1) // (достаточно быстро вычисляет return 1; // факториалы до 1000) else return gmpjnul ($x. Tact ($x-D); } print gmp_strval (fact (1000)) "\n": ?>
Значения чисел GMP
gmpjnit
Создание числа GMP
resource gmp_init (mixed number)
Число GMP создается из целочисленного или строкового аргумента. В строке число может быть указано в десятичном или шестнадцате-ричном (тогда оно должно иметь префикс Ох) формате. $а - gmp init (123456); $b - grapjrvtt ("OxFFFFDEBACDFEDF7200");
Заметьте, не всегда необходимо явно вызывать эту функцию, если нужно использовать в функциях GMP (например, gmp_add()) обычные числа или строки вместо чисел GMP. Аргументы функций GMP автоматически конвертируются при необходимости (и возможности) с использованием тех же правил, что и для функции gmp_init().
gmp_intval
Конвертация числа GMP в целое
int gmp_intval(resource gmpnumber)
Возвращает целое число, если оно не превышает его максимально возможную размерность (тип знакового длинного (32 бита) — signed long type). Если необходимо всего лишь распечатать значение, используйте gmp_strval().
gmp_strval
Конвертация числа GMP в строку
string gmp_strval (resource gmpnumber [, int base])
Возвращает строковое представление числа GMP в системе счисления base (по умолчанию, в десятичной). Возможные системы счисления — от 2 до 36.
gmp_ abs
Получение абсолютного значения числа
resource gmp_abs (resource a)
Возвращает абсолютное ( то есть неотрицательное) значение числа.
gmp_sign
Получение знака числа
int gmp_sign (resource a)
Возвращает 1, если число положительное, или -1, если число отрицательное.
gmp_neg
Получение отрицательного значения числа
resource gmp_neg (resource a) Возвращает (-а).
Арифметика
gmp_add
Сложение
resource gmp_add (resource a, resource b)
Возвращает GMP число - сумму аргументов а и b.
gmp_sub
Вычитание
resource gmp_sub (resource a, resource b)
Возвращает GMP число - разность (a-b).
gmp_mul
Умножение
resource gmp_mul (resource a. resource b)
Возвращает GMP число - произведение аргументов а и b.
gmp_div
Синоним функции gmp_div_q
resource gmp_div (resource a, resource b [, int round])
gmp _div_q
Деление
resource gmp_div_q (resource a, resource b)
Возвращает результат деления а на b. Результат округляется в зависимости от указанного аргумента:
GMP_ROUND_ZERO - цифры после точки отбрасываются;
GMP_ROUND_PLUSINF - результат округляется в большую сторону;
GMP_ROUND_MINUSINF - результат округляется в меньшую сторону.
Имеется синоним функции - gmp_div().
См. также: gmp_div_r(), gmp_div_qr().
gmp_div_r
Получение остатка целочисленного деления
resource gn,p_div_r (resource n, resource d [. int round])
Функция сходна с gmp_div_q(). Остаток будет иметь знак аргумента n.
См. также: gmp_div_q(), gmp_div_qr().
gmp_div_qr
Деление с остатком
array gmp_div_qr (resource n, resource d [, int round])
Функция комбинирует действие функций gmp_div_q() и gmp_div_r() и возвращает массив, в котором элемент [0] — целое частное, а [1] - остаток.
Функция эквивалентна gmp_div_r(), знак результата которой отбрасывается.
gmp_ divexact
Безостаточное деление
resource gmp_divexact (resource n, resource d)
Так как функция использует алгоритм «точного» деления, результат будет достоверным, только если заранее известно, что d нацело делит n.
gmp_cmp
Сравнение
int gmp_cmp (resource a, resource b)
Возвращает положительное значение, если а > b; ноль, если а = b; и отрицательное значение, если а < b.
Математика
gmp_fact
Вычисление факториала
resource gmp_fact (int a)
gmp_sqrt
Вычисление квадратного корня
resource gmp_sqrt (resource a)
gmp_sqrtrm
Вычисление квадратного корня с остатком
array gmp_sqrtrm (resource a)
Возвращает массив, в котором элемент [0] — целый квадратный корень аргумента (который также возвращается функцией gmp_sqrt()), а элемент [1] — разность между аргументом и элементом [0] в квадрате.
gmp_perfect_square
Определение, является ли число полным квадратом
bool gmp_perfect_squar~e (resource a)
Возвращает TRUE, если а является квадратом целого числа, иначе, FALSE.
См. также: gmp_sqrt(), gmp_sqrtrm().
gmp_pow
Возведение числа в степень
resource gmp_pow (resource base, int exp)
Возвращает результат возведения основания base в степень exp. Для аргументов (0,0) возвращается 1. ехр не должен быть отрицательным.
Возвращает результат: остаток от деления (основание base, возведенное в степень ехр) на mod. При отрицательном ехр результат не определен.
gmp_prob_prime
Проверка «вероятно» простого числа
int gmp_prob_pnme (resource a [, Int reps])
Функция возвращает 0, если а сложное число (имеющее более двух целых делителей). Если возвращается 1, то а, возможно, простое число. Если возвращается 2, то тогда а, без сомнения, простое число. Возможные значения аргумента reps: от 5 до 10 (по умолчанию 10) определяют качество проверки (чем больше это число, тем выше достоверность результата, то есть непринятия сложного числа за вероятно-простое).
Функция использует алгоритм вероятностного теста Мпллера-Рабина (Miller-Rabin).
gmp_ gcd
Нахождение наибольшего общего делителя
resource gmp_gcd (resource a, resource b) Возвращает всегда положительный результат.
gmp_ gcdext
Нахождение наибольшего общего делителя со множителями
array gmp_gcdext (resource a, resource b)
Возвращает в массиве значения g, s, t, такие, что a*s + b*t = g = НОД(а.b), где НОД — наибольший общий делитель.
gmp_invert
Инверсия по модулю
resource gmp_invert (resource a, resource b)
Возвращает дополнение а до значения, делящегося нацело на b. Возвращает FALSE, если результат не может быть найден.
gmp_ legendre
Получение числа Лежандра
int gmpjegendre (resource a, resource p)
Возвращает число Лежандра (Legendre symbol), р должно быть четным положительным.
gmp_jacobi
Получение числа Якоби
int gmpjacobi (resource a, resource p)
Возвращает число Якоби (Jacob! symbol), p должно быть четным положительным.
gmp_random
Генерация случайного числа
resource grap_random (int limiter)
limiter указывает длину генерируемого числа (если значение отрицательное, генерируется отрицательное число).
gmp_popcount
Получение популяции
int gmp_popcount (resource a)
Возвращает числитель популяции.
gmp_ hamdist
Вычисление дистанции
int gmp_hamdist (resource a, resource b)
Возвращает дистанцию (hamming) между а и b. Оба аргумента должны быть неотрицательными.
Бинарные операции
gmp_ and
Логическое И (AND)
resource gmp_and (resource a, resource b)
gmp_or
Логическое ИЛИ (OR)
resource gmp_or (resource a, resource Из)
gmp_xor
Логическое исключающее ИЛИ (XOR) resource gmp_xor (resource a. resource b)
gmp_setbit
Установка бита
resource gmp_setbit (resource &a, int index [, bool set_clear])
Устанавливает бит в позиции index в числе а. Аргумент set_clear указывает, в какое значение устанавливать бит: 0 или 1 (по умолчанию, в 1).
gmp_ clrbit
Сброс бита
resource gmp_c!rbit (resource &a, int index) Устанавливает бит в позиции index в числе а в значение 0.
gmp_scan0
Поиск бита 0
Oint grap_scanO (resource a, int start)
Ищет в числе а бит 0, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.
gmp_scan1
Поиск бита 1
lint gmp_scanl (resource a, int start)
Ищет в числе а бит 1, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.
Математические функции повышенной точности BCMath
При компиляции с параметром --enable-bcmath эти функции доступны в РНР. В последних версиях РНР этот модуль встроен в РНР.
По причинам изменения лицензии сама библиотека ВСМАТН распространяется отдельно от стандартного пакета РНР. Загрузить архив библиотеки можно с адреса url: http://www.php.net/extra/number4. tar.gz. Прочтите файл README . ВСМАТН в дистрибутиве РНР для получения более подробной информации.
bcscale
Установка точности вычислений по умолчанию
string bcscale (int scale)
Устанавливает точность, которая будет использоваться по умолчанию функциями be math.
bcadd
Сложение
string bcadd (string left operand, string right operand [, int scale])
Возвращает строковое значение суммы (right_operand + left_operand) с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.
См. также bcsub().
bcsub
Вычитание
string bcsub (string left_operand, string right_operand [, int scale])
Возвращает строковое значение разности (right_operand_left_operand) с точностью (числом десятичных знаков после запятой в результате), указанной в apгументе scale.
См. также bcadd().
bcromul
Умножение
string bcmul (string left operand, string right operand [, int scale])
Возвращает строковое значение произведения (right_operand * left_ operand) с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.
См. также bcdiv().
bcdiv
Деление
string bcdiv (string left operand, string right operand [, int scale])
Возвращает строковое значение результата деления left_operand на right_operand с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.
См. также bcmul ().
bcmod
Получение остатка целочисленного деления
string bcmod (string left_operand, string modulus)
Возвращает остаток от целочисленного деления делимого left_operand на делитель modulus.
См. также bcdiv().
bccomp
Сравнение
int bccomp (string left_operand, string right_operand [, int scale])
Сравнивает два числа (right_operand и left_operand) с точностью (числом десятичных цифр после запятой, используемых при сравнении), заданной необязательным аргументом scale.
Возвращается целочисленный результат: 0, если два аргумента равны; + 1, если аргумент left_operand больше, чем аргумент right_operand; и -1, если left_operand меньше, чем right_operand.
bcsqrt
Извлечение квадратного корня
string bcsqrt (string operand, int scale)
Возвращает квадратный корень аргумента operand. Необязательный аргумент scale указывает число цифр после десятичной точки, которые возвращаются в результате.
См. также bcpow()
bcpow
Возведение числа в степень
string bcpow (string x, string у [, int scale])
Возвращает результат возведения числа х в степень у. Необязательный аргумент scale указывает число цифр после десятичной точки, которые возвращаются в результате.
См. также bcsqrt().
Математические функции
Эти математические функции предназначены только для работы с числовыми данными, которые имеет ваш компьютер. Если вам требуется дополнительная точность в расчетах, обратитесь к «математическим функциям повышенной точности BCMath».
Математические функции могут быть разделены на несколько групп: математические константы, алгебраические функции, функции генерации случайных чисел, тригонометрические функции, функции конвертации чисел.
Математические константы
Следующие значения определяются математическим модулем РНР как константы:
Константа
Значение
Описание
М_Р1
3.14 159265358979323846
Пи
М_Е
2.7182818284590452354
E
M_LOG2E
1. 4426950408889634074
log_2 e
M_LOG10E
0.43429448190325182765
log_10 e
M_LN2
0.693 1471 8055994530942
log_e 2
М LN10
2.30258509299404568402
log_e 10
М PI 2
1.57079632679489661923
Пи/2
М_Р1_4
078539816339744830962
Пи/4
М_1_Р1
0.31330988618379067154
1/Пи
М 2 PI
0.63661977236758134308
2/Пи
M_SQRTPI
1.77245385090551602729
Sqrc(nn)
M_2_SQRTPI
1.12837916709551257390
2/sqrt(nii)
M_SQRT2
1 .4 1 42 1356237309504880
Sqrt(2)
M_SQRT3
1.73205080756887729352
Sqrt(3)
M_SQRT1_2
0.70710678118654752440
l/sqrt(2)
M_LNPI
1.144729885849400174)4
log_e(IIn)
M_EULER
0.57721566490153286061
Константа Эйлера
Алгебра
abs
Получение абсолютного значения числа
mixed abs (mixed number)
Возвращает абсолютное значение аргумента number. Если аргумент имеет дробный тип, возвращается дробь; иначе целое. $I=abs(-546). // $I=dnt) 546; $D=abs(123 456); // $D=(double) 123.456:
max
Получение наибольшего аргумента
mixed max (mixed argl, mixed arg2.....mixed argn)
Возвращает наибольший из аргументов. Число аргументов неограниченно. Если в качестве первого параметра передается массив, функция возвращает наибольшее значение из этого массива. Если аргумент не массив, то необходимо как минимум два аргумента, иначе выдается предупреждение. В случае, когда в аргументах передастся более одного массива, возвращается тот массив, который содержит наибольшее значение. Комбинировать в аргументах массивы и скалярные значения не рекомендуется. Возвращается значение с тем типом, который имеет наибольшую точность среди аргументов (double или integer), и этот же тип используется для сравнения аргументов.
min
Получение наименьшего аргумента
mixed min ( mixed argl, mixed arg2, mixed argn)
Возвращает наименьший из аргументов. Функция действует подобно функции тах().
round
Округление дробного числа до целого
double round (double val [, int precision])
Округляет дробное число val до указанной аргументом precision точности (число десятичных знаков после занятой).
Возвращает целое значение аргумента number, у которого безусловно отбрасываются все цифры после запятой. Указывать в аргументе целые числа — бесполезная операция.
$foo = floor (I 95583): // $foo == 1
См. также: ceil ()и round().
ceil
Дополнение дробного числа до следующего целого
int ceil (float number)
Возвращает целое значение аргумента number, дополненного до следующего целого числа. Указывать в
аргументе целые числа бессмысленно.
$х = ceil(4.25): // $х=5
См. также: floor() и round().
Pi
Получение значения числа Пи
double pi (void)
Возвращает значение числа Пи (3.1415926535898).
sqrt
Извлечение квадратного корня числа
float sqrt (float arg)
Возвращает квадратный корень из аргумента arg.
echo sqrt(90),// выведет 9.4868329805051
log
Вычисление натурального логарифма
float log (float arg)
Возвращает значение натурального логарифма аргумента arg.
echo log(2 7); // выведет 0.99325177301028
log 10
Вычисление десятичного логарифма
float logl() (float arg)
Возвращает значение десятичного логарифма аргумента arg.
echo loglO(lOOO). // выведет 3
ехр
Вычисление экспоненты
float exp (float arg)
Возвращает число с, возведенное в степень arg.
echo exp(l): //' выведет 2.71828)828459
См. также pow().
pow
Возведение числа в степень
float pow (float base, float exp)
Возвращает результат возведения основания base в степень ехр.
ecno pow(2.8).// выведет 256
См. также ехр().
Генерация случайных чисел
srand
Инициализация генератора случайных чисел
void srand (int seed)
Инициализирует генератор случайных чисел значением seed.
См. также: rand(), getrandmax(), mt_rand(), mt_srand() и mt_getrandmax().
getrandmax
Получение максимального случайного числа int getrandmax (void)
Возвращает максимальное значение, которое может возвратить вызов функции генератора случайных чисел rand(). Обычно это 32 767.
См. также: rand(), srand(), mt_rand(), mt_srand() n mt_getrandmax().
rand
Генерация случайного числа
int rand ([int min [, int max]])
При вызове с необязательными параметрами rain, max, определяющими соответственно минимальное и максимальное значение, генерирует и возвращает целочисленное псевдослучайное значение, лежащее включительно в указанных пределах. Если аргументы не указываются, то используются значения по умолчанию: 0 и RAND MAX.
Не забывайте заранее инициализировать генератор случайных чисел функцией srand().
См. также: srand(), getrandmax(), mt_rand(), mt_srand() и rat_getrandmax().
mt_srand
Инициализация МТ-генератора случайных чисел
void mt_srand (int seed)
Инициализирует МТ-генератор случайных чисел значением seed.
См. также: mt_rand(), mt_getrandmax(), srand(), rand() и getran dmax().
mt_ getrandmax
Получение максимального МТ-случайного числа int mt_getrandmax (void)
Возвращает максимальное значение, которое может быть получено при вызове функции, генерирующей случайные числа, — mt_rand(). Обычно это 2 147 483 647.
См. также: mt_rand(), mt_srand(), rand(), srand() и getrandmax().
mt_ rand
Генерация МТ-случайного числа
int mt_rand ([int min [, int max]])
При вызове с необязательными параметрами min, max, определяющими соответственно минимальное и максимальное значение, генерирует и возвращает целочисленное псевдослучайное значение, лежащее включительно в указанных пределах. Если аргументы не указываются, то используются значения по умолчанию: 0 и RAND_MAX.
Не забывайте заранее инициализировать генератор случайных чисел функцией rat_srand().
Многие функции генераторов случайных чисел из старых библиотек Hbcs имеют непонятные или неизвестные характеристики, и, что более важно, они медленно работают. По умолчанию РНР использует случайный генератор из библиотеки libc в функции rand(). Функция mt_rand() является заменой. Она использует известный алгоритм Мерсена Твистера (Mersenne Twister), придумавшего его для криптографических задач, и в среднем эта функция в 4 раза быстрее, нежели аналог из библиотеки libc. Для более подробной информации смотрите домашнюю страничку автора (http://www.math.keio.ac. jp/~matumoto/emt.html), а исходный оптимизированный код алгоритма МТ доступен по адресу: http://www.scp.syr.edu/~marc/hawk/twister. html.
См. также: mt_srand(), mt_getrandmax(), srand(), rand() и getrandmax().
lcg_value
Генерация случайного дробного числа
double Icg_value(void);
Возвращает псевдослучайное дробное число в диапазоне от 0 до 1.
Тригонометрия
sin
Получение синуса аргумента
float sin (float arg)
Возвращает значение синуса аргумента агд, вычисленное в радианах.
См. также: cos() и tan().
cos
Получение косинуса аргумента
float cos (float arg)
Возвращает значение косинуса аргумента агд, вычисленное в радианах. ,
См. также: sin() и tan().
tan
Получение тангенса аргумента float tan (float arg)
Возвращает значение тангенса аргумента arg, вычисленное в радианах.
Возвращает значение арксинуса аргумента агд, вычисленное в радианах.
См. также: acos() и atan().
acos
Получение арккосинуса аргумента
float acos (float arg)
Возвращает значение арккосинуса аргумента аrg, вычисленное в радианах.
См. также: asin() и atan().
atan
Получение арктангенса аргумента float atan (float arg)
Возвращает значение арктангенса аргумента агд, вычисленное в радианах.
См. также: asin() и acos().
atan2
Получение арктангенса двух чисел float atan2 (float у, float x)
Возвращает значение арктангенса двух аргументов х и у, вычисленное в радианах.
Ее действие сходно с вычислением арктангенса частного (у/х), за исключением того, что знаки обоих аргументов используются для определения квадранта результата.
См. также: acos() и atan().
Конвертация чисел
base_convert
Конвертация числа из одной системы счисления в другую
string base_convert (string number, int frombase, int tobase)
Возвращает строку, содержащую представление числа number, переведенного из системы счисления frombase, в систему tobase. Для аргументов frombase и tobase допускаются значения от 2 до 36 включительно. Цифры в числах с основанием большим, чем 10, представляются буквами от «а» до «z»; «а» означает 10, «b» — ll и т. д. до «z», означающей 35.
Sbinary - base_convert (Shexadecimal. 16. 2).
decbin
Конвертация десятичного числа в двоичное
string decbin (int number)
Возвращает строку, содержащую двоичное представление целого числа, указанного аргументом number. Наибольшее значение, которое число number может иметь, это 2 147 483 647 в десятичном представ лснии (в двоичном - это строка из 31-й единицы).
См. также bindec().
dechex
Конвертация десятичного числа в шестнадцатеричное , string dechex (int number)
Возвращает строку, содержащую шестнадцатеричное представление F целого числа, указанного аргументом number. Наибольшее значение которое число number может иметь, это 2 147 483 647 в десятичном представлении (в шестнадцатеричном - это строка 7fffffff)
См. также hexdec().
decoct
Конвертация десятичного числа в восьмеричное string decoct (int number)
Возвращает строку, содержащую восьмеричное представление ц лого числа, указанного аргументом number. Наибольшее значение которое число number может иметь, это 2 147 483 647 в десятичном представлении (в восьмеричном - это строка 17777777777).
См. также octdec().
bindec
Конвертация двоичного числа в десятичное int bindec (string_ binary_string)
Возвращает десятичный целочисленный эквивалент двоичного числа, представленного строковым аргументом binary_string. Максимальное число, которое может быть конвертировано, это строка из 31-и единицы, равная в десятичном представлении 2 147 483 647.
См. также decbin().
hexdec
Конвертация шестнадцатеричного числа в десятичное int hexdec (string hex_string)
Возвращает десятичное целочисленное значение шестнадцатеричного числа, представленного строкой hex string. Максимальное значение аргумента - «7fffffff», или 2 147 483 647 в десятичном *™
См. также dechex().
octdec
Конвертация восьмеричного числа в десятичное int octdec (string octal_string)
Возвращает десятичное целочисленное значение восьмеричного числа, представленного строкой octal_string. Максимальное значение аргумента — «17777777777», или 2 147483647 в десятичном исчислении.
См. также decoct().
deg2rad
Преобразование градусов в радианы
double deg2rad (double number)
Возвращает значение number, указанное в градусах, преобразованным в радианы.
См. также rad2deg().
rad2deg
Преобразование радианов в градусы
double rad2deg (double number)
Возвращает значение number, указанное в радианах, преобразованным в градусы.
См. также deg2rad().
number_ format
Форматирование числа
string number_format (float number, int decimals, string dec_point, string thousands_sep)
Возвращает строку, содержащую отформатированное значение числа number. Функция может принимать либо один, либо два, либо четыре аргумента (но не три).
Если указывается один аргумент, число number будет отформатировано без указания цифр после десятичной точки, но каждая тройка тысячных цифр будет разделена запятой. Например,
Если указывается два аргумента, число number будет отформатировано с указанием decimals цифр после десятичной точки и каждая тройка тысячных цифр будет разделена запятой (заметьте, числа округляются и добавляются незначащие нули в конце).
echo riumber_format( 96739590. 3945.1); // выведет 9b. 739. 590. 4 echo number format (96739590 3.4); // выведет 96. /29.590.3000
Если указываются все четыре аргумента, число number будет отформатировано с указанием decimals цифр после десятичной точки (в качестве которой будет использован символ dec_point), и каждая тройка тысячных цифр будет разделена символом thousands_sep (заметьте, числа округляются и добавляются незначащие нули в конце).
Описываемые в разделе функции позволяют получать информацию о классах и экземплярах объектов. Можно узнать, к какому классу принадлежит объект, его свойства и методы, а также их наследственную принадлежность.
В этом примере сначала определяется базовый класс, а затем его наследник.
правляемость; //неизменное логическое значение var $Яркость; // конструктор function ИсточникСвета ( $управляемость. $яркость="неяркий" ) { $this->Управляемость = $управляемость; $this->flpKOCTb = $яркость: } function 15_управляемо() { return $1гп5->Улравляемость. } function whatjipKOCTbО { return $this->Яркость; } } // конец определения класса ИсточникСвета // Расширение базового класса class Лампочка extends Источник Света { var $Включена = FALSE. // конструктор function Ла»мпочка() ( $this->ИсточникСвета( TRUE, "яркий" ): // Лампочка - это ИсточникСвета (управляемый, "яркий") } function включить() { $this->Включена = TRUE. } function 15_вклочена () { return $this->Включена; } } // конец определения класса Лампочка ?>
Следующий сценарий создает экземпляры объектов на основе определенных классов, а затем выводит основную информацию, которую можно узнать о классах и объектах средствами РНР 4. forear.h ($c.isb as $cis name) echo "\t- *cls_namei)\n": // инициализируем 2 объекта $солние = new ИсточникСвета СTRUE."очень яркий"); $эл_лампочка * new Лампочка () // выясняем информацию об объектах echo "\пКЛАСС объекта 'солнце'. ' " get_class($coлнце) '"\n". еспо "КЛАСС обьекта 'эл_лампочка' ' .get сlаss(эл_ ланлочка); echo "'. Родительский Класс '" get parent сlass(эл_лампочка).°)\гГ; // проследить свойства объекта 'солнце' echo "\n Свойства объекта 'солнце' \п"; print \'аг5($солнце). // и свойства объекта 'эл_лампочка echo "\n Методы объекта 'эл_лампочка': \n": pnnt_methocls(эл_лампочка): echo "\n Наследственность:\n": сlass _раrentаgе ("эл_лампочка", "Лампочка"): сlаss _раrentаgе ("эл_лампочка". "ИсточникСвета"):
При запуске сценария в системе РНР 4.0.4 для Windows он выводит:
Доступные сценарию классы class. stdClass() class: OverloadedTestClass() class: Directory()class COMO class: ИсточникСвета() class: Лампочка()КЛАСС объекта 'солнце': 'ИсточникСвета' КЛАСС объекта 'эл_лампочка': 'Лампочка'. Родительский Класс (ИсточникСвета) Свойства обьекта 'солнце': - свойство 'Управляемость' = "1" - свойство 'Яркость' = "очень яркий" Методы объекта 'эл_лампочка': - метод ИсточникСвета() - метод. 13_управляемо() - метод: what_яpKocTb() - метод: Лампочка() - метод: включить() метод- 15_включена() Наследственность: Объект эл_лампочка не принадлежит к подклассу: Лампочка Объект 'эл_лампочка' принадлежит к классу: 'Лампочка', подкласса: 'ИсточникСвета'
get_ declared_classes
Получение списка доступных классов
array get_declared_classes (void)
Возвращает в массиве перечисление имен классов, декларированных для текущего сценария.
В РНР 4 в начале возвращаемого массива указываются имена трех дополнительных классов: stdClass (определен в Zend/zend.c), Over-loadedTestClass (определен в ext/standard/basic_functions.c) и Directory (определен в ext/standard/dir.c); для системы Windows доступен также класс Com.
class_ exists
Проверка существования класса
booll_ class_exists (string class_name)
Возвращает TRUE, если для класса classjiame имеется определение; иначе — FALSE.
get_class_methods
Получение списка методов класса
array get_class_methods (string class_name)
Возвращает в массиве перечисление методов класса с именем class_ name.
См. также: get_class_vars(), get_object_vars().
get_class_vars
Получение списка свойств класса
array get_class_vars (string class_name)
Возвращает в массиве перечисление свойств класса с именем class_ name.
См. также: get_classjnethods(), get_object_vars().
get _class
Получение класса объекта
string get_class (object obj)
Возвращает имя класса, к которому принадлежит объект obj.
См. также: get_parent_class(), is_subclass_of().
get_parent_class
Получение имени родительского класса объекта
string get_parent_c!ass (object obj)
Возвращает имя родительского класса для класса, которому принадлежит объект obj.
Возвращает TRUE, если объект obj принадлежит к классу, наследному от класса superclass, иначе возвращает FALSE.
См. также: get_class(), get_parent_class().
get_object_vars
Получение списка свойств объекта
array get_object_vars (object obj)
Возвращает в ассоциативном массиве инициализированные для объекта obj свойства. Если переменным класса, к которому принадлежит объект obj, не были присвоены значения, то такие переменные в возвращаемый массив не включаются.
Вызывает метод method_name объекта obj. Возможные параметры методу можно передать в последующих аргументах parameter.
NAME = $name; $this->TLD = Hid; } function pnnt_info($prestr="") { echo Sprestr "Country: ",$this->NAHE. "\n": echo Sprestr."Top Level Domain: ".$this->TLD."\n": } } // создаем экземпляр класса Sentry = new CountryC'PoccMfl". "ru"); echo "* Прямой вызов метода класса \n", Scntry->print_info(), echo "\n* Косвенный вызов того же метода класса \n": calljjserjnethod ("pnntjnfo". Sentry. "\t"): ?>
См. также call_user_func().
Переменные
Манипуляции с переменными
get_defined_vars
Получение перечисления всех доступных переменных array get_defined_vars (void ) Возвращает многомерный ассоциативный массив, содержащий ВСЕ переменные, доступные сценарию.
См. также: get_defined_functions().
empty
Проверка, имеет ли переменная значение
int empty (mixed var)
Возвращает FALSE, если переменная имеет непустое или отличное от нуля значение. Иначе возвращает TRUE. Фактически функция проверяет, имеет ли переменная значение, которое может быть приравнено к 0, то есть: (var==0). <
/FONT>
$var = 0. if (empty($var)) { // = TRUE echo '$var - либо О. либо не имеет значения; if (Msset($var)),{ // = FALSE echo '$var не имеет значения'; } } <
/FONT >
Заметьте, что эту функцию бесполезно использовать с аргументом, отличным от переменной, например выражение empty (adds!ashes ($name)) бессмысленно, так как здесь проверяется значение, возвращаемое функцией. Единственное, что может выявить в данном варианте функция empty(), это имеет ли выражение значение, эквивалентное TRUE (не равное нулю), а это может быть проверено и без использования функции.
См. также: isset() и unset().
isset
Проверка существования переменной int isset (mixed var) Возвращает TRUE, если переменная, указанная аргументом var, существует.
Фактически функция проверяет, имеет ли переменная значение, идентичное null, то есть : (var=nuH). Отметьте различие между равенством и идентичностью. < /FONT>
Для уничтожения переменной используйте функцию unset(). $а = "test". echo isset ($a); // TRUE unset ($a); echo isset ($a). // FALSE < /FONT >
См. также: empty() и unset().
unset
Уничтожение переменной int unset (mixed var [, mixed var [, ...]]) Уничтожает указанные переменные var и возвращает TRUE.
// Уничтожить одну переменную unset ($foo). // Уничтожить один элемент массива unset ($bar['quux']); // Уничтожить несколько переменных unset (Sfool. $foo2, $foo3):
Поведение функции unset () внутри пользовательской функции может быть различным в зависимости от типа переменной, которую предстоит уничтожить. Так, при попытке уничтожить глобализированную переменную уничтожается только ее локальная копия, на глобальном же уровне воздействия на неременную не оказывается. То же происходит, если даже переменная была передана по ссылке.
Возвращаемый в строке тип переменной var обозначается следующими значениями:
«boolean»;
«integer»;
«double»;
«string»;
«array»;
«object»;
«resource;
«unknown type».
См. также: settype().
settype
Явная установка типа переменной
int settype (string var, string type)
Устанавливает для переменной с именем var тип type. Возвращает TRUE при успехе; иначе FALSE.
Возможные значения типа, передаваемого в аргументе type:
«integer»;
«double»;
«string»;
«array»;
«object».
См. также: gettype().
intval
Получение целочисленного значения переменной в указанной системе счисления
int intval (mixed var [, int base])
Возвращает целочисленное значение аргумента var, используя указанное основание системы счисления base (ио умолчанию 10 — «десятичное»). Аргумент var может быть любым скалярным типом; передавать в качестве аргумента массивы или объекты не допускается. Если аргумент var - числовой, то преобразование не производится, для строк основание системы счисления указывает на ту систему счисления, в которой находится число в строке.
См. также: doublevaK), strval(), settype() и «Определение типа».
doubleval
Извлечение значения дробного числа из переменной
double doubleval (mixed var)
Возвращает дробное (double floating point) значение числа, извлеченного из аргумента var, который может иметь любой скалярный тип. Указывать в аргументе объект или массив нельзя.
Возвращает строковое значение переменной var, которая может иметь любой скалярный тип. Не допускается передача в функцию объектов или массивов.
См. также: doubleval(), intva(), settype() и «Определение типа».
serialize
Генерация хранимого образа переменной
string serialize (mixed value)
Возвращает строку, содержащую байтовую репрезентацию содержимого указанной value переменной, для того чтобы это значение могло быть сохранено (например, в базе данных или файле), а впоследствии, возможно, восстановлено с помощью функции unserializeO.
Это полезно для сохранения или передачи значений РНР без потери их типа и структуры. Функция работает с типами: integer, double, string, array (также многомерными) и object (свойства объектов сохраняются, но методы — нет).
// В Ssession_data содержится многомерный массив с данными сессии // и информацией о текущем пользователе. Мы используем serialize() // для сохранения, при завершении сценария, запросов пользователя. $сопп - odbc_connect ("webdb". "php". "chicken"). Sstmt - odbc_prepare (Sconn, "UPDATE sessions SET data = ? WHERE id = ?") ; $sqldata = array(serialize($sessior_data). $PHP_AUTH_USER). if (!odbc_execute (Sstmt. Msqldata)) f Sstmt =
odbc_prepare(Sconn. "INSERT INTO sessions (id. data) VALUES(?. 7)"); if (!odbc_execute(Sstmt. &$sqldata)) { /* однако. Ошибочка */ } } <
/FONT >
Для «пытливых умов», которых все же интересует, в каком формате функция сохраняет данные, приводим следующий пример.
> II выводит строку, j // a.3 (i O.l,l:i:l:i:2;1:2:a:3 {i 0:s:1:"a".i:l;s:l:"b";1:2:S:1:"c".}} < /FONT >
unserialize
Создание переменной из ее сохраненного образа
mixed unserialize (string str)
Функция возвращает значение сериализированной ранее (функцией serialize()) переменной. Возвращаемое значение может иметь тип: integer, double, string, array или object. Если был сериализирован объект, то восстанавливаются только его свойства (но не методы).
// Здесь используется unserialize() для загрузки данных сессии // из базы данных в массив $session_data Этот пример дополняет // соответствующий, приведенный в описании функции serialize() Sconn « odbc_connect ("webdb". "php". "chicken"). Sstmt = odbc_prepare ($conn. "SELECT data FROM sessions WHERE id = ?"); Ssqldata = array ($PHP_AUTH_USER); if (!odbc_execute (Sstmt. &$sqldata) || !odbc_fetch_into (Sstmt. &$tmp)) { // если execute or fetch fails, инициализируем пустой массив $session_data =
arrayO: } else { // здесь мы должны иметь // сериализированные данные в массиве StmpLOJ. $session_data = unserialize ($tmp[0]). if (!is_array ($session_data)) { // где-то ошибка произошла, инициализируем пустой массив $session_data » array(); } } <
/FONT >
print_r
Отображение информации о переменной и ее содержимом
void printer (mixed expression)
Функция отображает информацию о переменных и их значениях в доступном для чтения человеком варианте. Если указывается переменная, содержащая строку или числовое значение, распечатываются их значения. При указании массива распечатываются значения индексов и значений элементов (также и для вложенных массивов), как в примере ниже. Для объектов распечатываются имена и значения свойств, как для массивов.
Учтите, что функция будет выполняться бесконечно, если в указанном массиве или объекте имеются прямые или косвенные ссылки на себя. То же справедливо и для вложенных объектов и массивов. Например, это касается вызова print_r($GLOBALS), так как массив SGLOBALS является глобальной переменной и содержит ссылку на себя.
var_dump
Отображение структурированной информации о переменной
void var_dump (mixed expression)
Выдает структурированную информацию о выражении (переменной), включающую его тип и значение. Массивы обрабатываются рекурсивно для каждого значения.
Возвращает TRUE, если переменная var имеет скалярный тип (числа, строки, логические значения), но не комплексный (массивы или объекты).
is_null
Проверка, является ли переменная пустой
bool is_null (mixed var)
Возвращает TRUE, если переменная var не существует (или ей явно присвоено пустое значение null). Функция эквивалентна выражению: (var = null), а также is_set(var). < /FONT >
is_ numeric
Проверка, является ли переменная числовой
bool isjiumeric (mixed var)
Возвращает TRUE, есл и переменная var имеет численный тип (integer, double), или строковый с числовым значением.
is_bool
Проверка, является ли переменная логической
bool is_bool (mixed var)
Возвращает TRUE, если переменная var имеет тип логического значения (TRUE либо FALSE), иначе FALSE.
is_nt
Синоним функции isjong ()
booll is_int (mixed var)
Возвращает TRUE, если переменная var имеет целочисленный тип.
is_integer
Синоним функции isjong ()
bool is_integer (mixed var)
Возвращает TRUE, если переменная var имеет целочисленный тип.
is_long
Проверка, является ли переменная целочисленной
bool isjong (mixed var)
Возвращает TRUE, если переменная var имеет целочисленный тип (integer, long). Синонимы функции: is_int(), is_integer().
is_real
Синоним функции is_double()
bool is_real (mixed var)
is_float
Синоним функции is_double()
bool is_float (mixed var)
is_double
Проверка, является ли переменная дробной
bool is_double (mixed var)
Возвращает TRUE, если переменная var имеет тип double, иначе FALSE.
is_string
Проверка, является ли переменная строковой
bool is_string (mixed var)
Возвращает TRUE, если переменная var — это строка, иначе FALSE.
is_array
Проверка, является ли переменная массивом
bool is_array (mixed var)
Возвращает TRUE, если переменная var — это массив, иначе FALSE.
is_object
Проверка, является ли переменная объектом
bool is_object (mixed var)
Возвращает TRUE, если переменная var — это объект, иначе FALSE.
is_resource
Проверка, является ли переменная указателем на ресурс
bool is_resource (mixed var)
Возвращает TRUE, если переменная var указывает на ресурс, выделенный и возвращенный предназначенной для этого функцией.
Ресурсы — это объекты, подобные файлам или результатам запросов к базам данных, выделяемые и освобождаемые внутренними функциями РПР. Когда программе больше не требуется какой-либо ресурс, хорошей практикой программирования является его явное освобождение предназначенными для этого функциями. Но в большинстве случаев интерпретатор РНР самостоятельно, по мере необходимости освобождает ненужные ресурсы (обычно при завершении сценария). Попробуйте, например, разобраться, чем отличаются устойчивые подключения к серверам баз данных и временные.
get_resource_type
Определение типа дескриптора ресурса
string get_resource_type (resource $handle)
Возвращает строку, содержащую описание типа ресурса. Если в аргументе передается неверный указатель на ресурс, то возникает ошибка.
Расширение регулярных выражений POSIX
ereg
Регулярный поиск
int ereg (string pattern, string string [, array regs])
Возвращает TRUE, если в строке string находится фрагмент, подходящий шаблону pattern, иначе — FALSE. В случае успеха массив regs заполняется совладениями с нодшаблонами. Элемент [0] массива regs содержит совпадение с полным шаблоном, а все последующие (1-9) — совпадения с подшаблонами. Массив regs всегда будет иметь 10 элементов, и это не зависит от числа подшаблонов.
Следующий пример печатает дату формата ISO (YYYY-MM-DD) в виде DD.MM.YYYY:
Sdate = "1982-11-29",
if (ereg
("([0-9]{4})-([0-9]{1.2})-([0-9]{1.2})",
$date. Sregs»
{ echo "$regs[3j.$regs[2].$regs[l]": } else f
echo "Дата в неправильной формате: $date". }
См. также: eregi(), ereg_replace(), eregi_replace().
eregi
Нечувствительный к регистру регулярный поиск
int eregi (string pattern, string string [, array regs])
Функция подобна ereg(), за исключением того, что она нечувствительна к регистру буквенных символов при поиске фрагментов совпадения с шаблоном.
См. также: ereg(), ereg_replace(). eregi_replace().
В строке string ищутся фрагменты совпадения с pattern и возвращается строка string, в которой фрагменты совпадения (если таковые нашлись) заменены на replacement. Допускается использовать ссылки (0-9) на совпадения с подшаблонами. Ссылка \\0 означает совпадение с целым шаблоном.
tstring - "This is a test".
echo ereg_repl асе ("( )
is". '\\lwas". $st'~ing):
Однако если replacement содержит целочисленное значение, оно будет воспринято как код символа заместителя.
Функция подобна ereg_replace(), за исключенном того, что она нечувствительна к регистру буквенных символов при поиске фрагментов совпадения с шаблоном.
См. также: ereg(), eregi(), ereg_replace().
split
Нарезка в массив регулярным выражением
array split (string pattern, string string [, int limit])
Возвращает массив частей строки string, на которые она была разделена последовательностями, совпадающими с регулярным выражением pattern. В аргументе можно указать максимальное число частей, возвращаемое в массиве; если таких частей обнаружилось больше, последний элемент массива будет содержать оставшуюся неразделенной часть строки string. При ошибке возвращается FALSE.
// выделить четыре первых поля
строки файла /etc/passwd
$pasc,wd_list = split (":". $passwd_line. 5):
//разделить на переменные строку даты-времени
list ($month. $day. Syear, Shour. Srmnutes, Sseconds)
= split ('[/. -]'. "04/30/1973 14 23 88").
Заметьте, иногда проще использовать функцию explodeO. См. также: splitiO, explodeO, implodeO.
spliti
Нечувствительный к регистру аналог split()
array spliti (string pattern, string string [, int limit])
Функция подобна splitO, за исключением того, что она нечувствительна к регистру буквенных символов при поиске фрагментов совпадения с шаблоном.
См. также: split(), explode(), implode().
sql_ regcase
Игнорирование регистра для SQL выражений
string sql_regcase (string string)
Каждый буквенный символ строки string превращается в пару символов в верхнем и нижнем регистре, заключенную в квадратные скоб-ч ки. Используется для преобразования регулярных выражений для функций, чувствительных к регистру, при необходимости его игнорирования.
Например, это позволяет при указании в SQL выражениях игнорировать регистр строки поиска. Например, выражение: SELECT * FROM tbl WHERE fieldl='Abc' часто чувствительно к регистру, а его аналогия: SELECT * FROM tbl WHERE fieldl»1 [Aa][Bb][Cc]' - нет. Но для многих СУБД поиск и так нечувствителен к регистру, например: SELECT * FROM tbl WHERE fieldl LIKE 'Abc'
pcho sql_regcase ("Fv Жъ '");
//выводит: [Ff][Vv] [ВДГЪь] !
Синтаксис регулярных выражений
Регулярное выражение должно состоять из: ограничителей шаблона, самого шаблона и необязательных модификаторов.
/шаблон/модификаторы
Ограничителями могут служить: прямые слеши «/», а также любые не алфавитно-цифровые символы, кроме обратного слеша «\». Часто в качестве ограничителей служат символы: \, %, $. Завершающий ограничитель должен быть представлен тем же символом, что и начинающий; ограничитель должен быть первым символом регулярного выражения. Если необходимо использовать символ, выбранный ограничителем в шаблоне, ему должен предшествовать обратный слеш «\» (например: «/\d{l,2}V\d{2}/»).
Заметьте, что перед тем, как значение строки шаблона будет передано в функцию, РПР интерпретирует строку регулярного выражения как любую другую строку. Поэтому будьте осторожны с использованием метасимволов и внимательно используйте обратный слеш. Например: Sbegin = "OOps"; Spattern = "/Sbegnn/".
Теперь шаблон Spattern будет искать последовательность Oops в любом месте текста вместо ожидаемого фрагмента begin в начале текста. В данном случае строку следует записывать как Spattern = "ASbegin/"; либо как: Spattern = '/$begin/':. Подобных примеров можно привести множество, поэтому не брезгуйте заглянуть в раздел «Типы: Строки», чтобы вспомнить, как РНР интерпретирует строки, и, в частности, как следует использовать слеши.
Синтаксис шаблона
Символы в шаблоне делятся на два вида: обозначающие самих себя и метасимволы, имеющие специальное значение в регулярных выражениях. Именно в использовании метасимволов заключается вся мощь использования регулярных выражений.
Метасимвол
Значение
\
подстановка;
.
любой символ: [*\n] или [\0-\xFF];
I
альтернатива;
0
ограничители подшаблона;
|]
ограничители класса символов;
{}
числители повторения «от X до У раз»;
?
числитель «1 или 0 раз»; или мишшизатор числителя; или расширение значения метасимвола «(»;
*
числитель «0 или более pa:i>>;
+
числитель «1 или более раз»;
<
претензия «в начале строки»;
$
претензия «в конце строки».
<
В классах символов метасимволом является знак диапазона «минус» (-), а метасимвол инвертирует класс методом «все символы, кроме указанных».
Обычно пробелы в шаблоне рассматриваются как значащие. При установке же модификатора х все пробелы в шаблоне и все символы от знака # и до конца строки воспринимаются как комментирующие. Тем не менее, в классах символов пробел и знак # всегда являются значащими. В маркерах специальных подшаблонов не допускается использование пробелов, так как тогда нарушается смысл маркеров (сравните: (?<= ххх) и (? < = ххх)).
Например, шаблон (неплохой пример, хотя он и неадекватно работает с одинаковыми вложенными тегами): '% < ([*> ]+) (['>]*) > # открывающий тег (и атрибуты тега) (.*) # содержимое тега < / \1 > # закрывающий тег ?xis'
эквивалентен шаблону:
'*<(Г> ]+)(Г>]*)>(.*Н?#содержимое Tera)\l>*is'
Далее рассматриваются способы использования метасимволов.
Подстановки
Символ (\) помимо операций подстановки, рассмотренных ниже, используется для превращении метасимволов в обычные. Например, для того, чтобы использовать точку в шаблоне как «точку», а не как «оператор подстановки любого символа», перед ней следует ставить слеш (\). Так же желательно поступать со всеми спецсимволами (то есть не являющимися буквенно-цифровыми), даже если они и не являются метасимволами. (При установленном модификаторе х слешем также следует предварять пробел и символ #, если только они не обозначают комментарий.)
Подстановки, обозначаемые символом обратного слеша (\), бывают пяти видов.
1. Подстановка непечатного символа.
Вместо следующих последовательностей вставляется:
\а - символ BEL (07 в ASCII);
\е — символ escape (hex IB в ASCII);
\f — символ прогонки страницы formfeed (hex ОС в ASCII);
\n — символ перевода строки newline (hex OA в ASCII);
\г — символ возврата каретки (hex OD в ASCII);
\t — символ табуляции (hex 09 в ASCII);
\сх — символ «Control-X», где х — любой буквенный символ.
Фактическое же действие последовательности \сх следующее: если «х» в нижнем регистре, он преобразуется в верхний, затем бит 6 (hex 40) этого символа инвертируется. Таким образом «\cz» становится шестнадцагеричным 1А, а «\с{»становится \хЗВ, тогда как «\с;» становится \х7В.
2. Подстановка символа с указанным кодом.
Для подстановок этого вида используются две записи:
\хшш, где шш — одна или две шестнадцатиричных цифры, буквы можно указывать в верхнем или нижнем регистре;
\ДДД, где ДДД — одна-три восьмеричных цифры.
Эти записи заменяются символом с указанным кодом. Вторую запись желательно не использовать, дабы не спутать ее с подстановкой найденного фрагмента (см. следующий пункт). Если же вы все-таки хотите использовать восьмеричную запись, указывайте ее в виде трех цифр (при необходимости добавляя впереди нули).
3. Подстановка фрагмента совпадения с подшаблоном (обратная ссылка).
Указываются в виде: \ДД, где ДД — одна-две десятичных цифры (1-99) без незначащих нулей. Таким образом, обратных ссылок не может быть более 99. См. подробную информацию в разделе «Подшаблоны».
4. Подстановка класса символов.
\d — любой цифровой символ, [0-9];
\0 — любой НЕцифровой символ, [*0-9];
\s — любой пробельный символ, [\t\ \r\f\n];
\S — любой НЕпробелышй символ;
\w — любой алфавитно-цифровой символ;
\W — любой НЕалфавитно-цифровой символ.
Алфавитно-цифровым символом считается буква, цифра или знак подчеркивания, также в этот набор могут входить локальные буквенные символы (например, символы кириллицы), и это определяется символьными таблицами PCRE.
Эти подстановки можно включать в класс символов.
5. Обозначение общего вида претензий.
\b — «на границе слова»;
\В — «не на границе слова»;
\А — в начале текста;
\Z — в конце текста или перед символом перевода строки;
\z — в конце текста.
Последовательности \А, \Z и \z, в отличие от метасимволов $ и А, действуют вне зависимости от режима многострочности (см. модификатор т).
Эти последовательности не должны использоваться в классах символов.
См. также раздел «Претензии».
Если после слеша указывается буква и эта последовательность не имеет специального значения подстановки, обычно слеш игнорируется и последовательность воспринимается как обычная буква. При установке же модификатора X такая последовательность вызывает ошибку. Это сделано для того, чтобы в дальнейшем, если когда-то такая последовательность приобретет специальное значение, она не использовалась бы неумышленно.
Альтернативы и классы символов
Допустим, в тексте нужно найти слово: «АА», «Бб» или «ВвВ», тогда в шаблоне следует указать 'АА|Бб|ВвВ', используя как обозначение альтернативы знак |, Допустимо любое число альтернатив и пустая альтернатива (соответствующая пустому фрагменту). Перебор альтернатив производится слева направо, и используется первая подходящая.
Для удобства можно заключать список альтернатив в скобки (то есть образовывать, таким образом, подшаблон), и в дальнейшем ссылать-ся на найденную альтернативу с помощью обратной ссылки. Например, шаблон: '*<(Н1|Н2|НЗ)>( .*)\\l>*imUs' будет искать содержимое тегов заголовков.
Иногда необходимо искать символ, который может принимать различные значения, тогда используется класс символов, обозначаемый символами «[» и «]». Чтобы использовать символ ] в классе символов в качестве «самого себя», следует ставить перед ним слеш: \].
Если первый символ класса «А», то это означает: «любой символ, кроме тех, которые указаны в классе». Символ минус обозначает (если он не является первым или последним символом класса) символьный диапазон. Например, класс [лО-9] соответствует любому нецифровому символу (также можно записать как [А\хЗО-\х39]). Любую английскую букву можно указать как [a-z] |[A-Z]'. Если необходимо включить в класс символы «А» и «-», то первый не должен быть первым символом класса, а второй должен стоять в начале или конце класса.
В классе символов или вместо них допускается использование подстановок: \d, \D, \s, \S, \w. \W. Например, можно использовать последовательность \D вместо [лО-9]; или [\da-fA-F] для указания «любой шсстнадцатеричной цифры».
Класс символов в отличие от альтернатив сопоставляется только одному символу! Для того чтобы найти несколько символов из класса, используйте числители.
Прочие метасимволы (например, «$» или «}») в классе метасимволами не являются, но все же их желательно предварять слешем.
Особое значение имеет метасимвол «точка» (вне класса символов). Фактически он эквивалентен классу [*/n], представляющему собой совпадение с любым символом (включая также непечатные). Но, по умолчанию, если не используется модификатор s, ему не может соответствовать символ перехода на новую строку (\n); при указании же модификатора s точка соответствует абсолютно любому символу (то есть классу [\0-\xFF]).
Повторения и числители
Предположим, вы хотите найти в тексте номер, состоящий из 3-5 десятичных цифр, тогда в шаблоне необходимо указать \d{3,5}. Как вы можете догадаться, повторения символа (или, возможно, подшаб-лона) обозначаются указанием после него чисел в фигурных скобках, где первое число — минимально допустимое повторение символа (подшаблона), а после запятой — максимальное. Числители могут представляться также в следующем виде:
{n} — повторение, указанное n число раз;
{n,} — повторение, не меньше чем n раз.
Пропуск числителя до запятой не допускается. Первый числитель должен быть меньше второго. Вместо распространенных числителей можно также указывать их заменители:
Заменитель числителя
Значение
Эквивалент
у
« 1 или 0 раз»
{0,1}
*
«0 или более раз»
{0,}
+
«1 или более раз»
1.}
Будьте осторожны с неопределенными числителями, чтобы не спровоцировать бесконечный цикл.
При конструировании шаблонов с диапазонными повторениями необходимо учитывать такой фактор, как жадность числителей, то есть такой случай, когда шаблону может соответствовать как меньшее, так и большее число повторений. Положим, у нас имеется текст: <Р> Текст <Р> абзацаР> со вложениями Р>
Тогда шаблон /(.*)<\/p>/i может (теоретически) вернуть 4 варианта совпадения. По умолчанию ищется максимальное повторение (то есть в данном варианте — строка целиком). Чтобы находилось минимально повторяющееся значение, используйте модификатор U. Для снижения «жадности» не всех числителей а только избранных ставьте после них знак вопроса, например: /(.*?)<\/p>/i; этот способ изменяет «жадность» числителя на противоположную от основной.
Числитель может указываться не только после символа, класса, под-шаблона, но и после обратной ссылки.
Подшаблоны и обратные ссылки
Сами по себе подшаблоны (части шаблона, заключенные в круглые скобки) не влияют на функционирование регулярных выражений и могут служить исключительно для удобства группировки (они могут быть вложенными). Подшаблон может использоваться для ограничения набора альтернатив. При использовании же с обратными ссылками подшаблоны являются действенным инструментом поиска. Например, для поиска содержимого парных тегов может использоваться запись: *<([*>]*)>(.*)\\1>*.
Подшаблоны нумеруются но порядку открывающей круглой скобки, и для доступа к фрагменту текста, совпадающему с подшаблоном, используются обратные ссылки формата: слеш, за которым следует число, большее 0 и меньшее 100, указывающее, к какому подшаблону ссылка относится (первой цифрой числа не должен быть ноль).
Заметьте, вместо ссылки подставляется фрагмент реального текста; например, регулярное выражение /слов(о|а) и числ\1/ будет подходить фразе: «слово и число» и «слова и числа», но не «слова и число»; а регулярное выражение /(A+)6\l/i не будет подходить строке «Аба», хотя и указано игнорирование регистра.
Ссылка может быть использована тогла и в том месте шаблона, когда ей уже можно будет однозначно сопоставить фрагмент текста. Например, конструкции (а\1) и (а|(b+))\2 неправильны.
Обратите внимание на то, как используются подшаблоны и ссылки с числителями:
(.*), (.)*, ([abc]*), ([abc])* (\2|\1+), (\2|\1)+.
Когда на подшаблон не имеется ссылок, его можно пометить указанием после открывающей скобки последовательности ?:, это исключает подшаблон из списка ссылок. Например, регулярное выражение /a((b+)(?:c*))(d?)/ будет иметь три ссылки: 1 -- на подшаблон ((b+)(?:с*)), 2 — на (b+) и 3 —.на (d?). Это может использоваться для увеличения общего числа подшаблонов до 200 (99 со ссылками и 101 без них). В такой форме записи становится возможным указывать внутренние модификаторы между ? и :, например: (?i:c|e|) эквивалентно (?:(?i)c|e|).
При необходимости указания внутри шаблона комментария (и возможном нежелании использовать модификатор х) допустимо исполь-
зовать подшаблоны комментариев (?#мой комментарий), игнорируемые при обработке.
Претензии
«Претензии» (assertions) представляют собой дополнительные проверки символов, окружающих место совпадения фрагмента с той позицией шаблона, в которой указана претензия.
Простейшие из них " и $ обозначают, что фрагмент должен находиться соответственно в начале или в конце текста. Так, шаблон /*А/ указывает на то, что ищется символ «А» в начале текста, а шаблон /Z$/ на то, что ищется символ «Z» в конце текста. Как видно из примеров, сами символы л и $, должны находиться соответственно в начале или конце шаблона. Шаблон /привет$/ будет проверять, состоит ли текст целиком из слова «привет».
У этих претензий есть одна особенность: что считать началом и концом текста (строки)? Установка модификатора m указывает на то, что конец и начало строки могут обозначаться символом (\п). Например, шаблон /~А/т ищет букву «А» либо в начале текста, либо после каждого символа (\п). При установленном модификаторе D знак $ обозначает исключительно фактический конец текста, иначе же (если указан модификатор т) он также может обозначать конец строки, то есть то, что непосредственно после фрагмента должен следовать символ перевода строки (\п). В отличие от модификатора D, влияющего только на претензию конца строки, модификатор m влияет на обе. Если текст не содержит символов перевода строки, эти модификаторы не имеют значения.
Следующими претензиями, аналогичными описанным выше, являются подстановки \А, \Z, \z, обозначающие соответственно фактическое начало текста, конец текста или перевод строки, и фактический конец текста. Эти претензии не зависят от модификаторов. Например, шаблон /\A.*T\Z.+\z/ra будет искать символ «Т» в конце строки, но не текста.
Дополнительными похожими претензиями являются подстановки \b и \В, обозначающие соответственно «на» и «не на» границе «слова». Словом считается последовательность, ограниченная пробельными символами (включая переводы строк) или началом или концом текста. А границей — промежуток между двумя символами, один из которых пробельный, а другой нет. Например, шаблон /\bпре(\^)ый\b/ ищет все слова, имеющие приставку «пре-» и окончание «-ый».
Более сложные виды претензий указываются в виде подшаблонов, и они дополнительно проверяют фрагмент текста до или после точки совпадения:
(?=текст) — текст после точки совпадения должен соответствовать указанному;
(?!текст) — текст после точки совпадения не должен соответствовать указанному;
(?<=текст) — текст до точки совпадения должен соответствовать указанному;
(?
Их отличие от простого указания последовательностей в подшабло-не в том, что фрагмент совпадения с такой претензией не возвращается в результате. Например, шаблон /(?<=\()\w+(?=\))/ возвращает всякое слово, стоящее в скобках без пробелов, но сами скобки не возвращаются.
В претензиях возможно указывать альтернативы и все то, что может использоваться в обычных шаблонах, кроме повторений. Для претензий предшествия альтернативы не должны иметь неопределенную длину, например, следующая претензия допустима: (?
Допустимо использовать последовательности претензий, например (?<=\d{3}) (?
Также возможны вложения, например (?<=(?
Специальные структуры подшаблонов
Присутствие в шаблоне множества неопределенных числителей усложняет обработку регулярных выражений (в особенности, когда обрабатываемый текст велик) и увеличивает время обработки. Указание модификаторов «жадности» не позволяет избавиться от этого, так как все равно перебираются все возможные комбинации повторений, прежде чем возвратится результат обработки.
Поэтому в подшаблонах возможно использовать последовательности, блокирующие дальнейший перебор повторений подшаблона после того, как уже было найдено первое соответствие фрагменту текста. Такие подшаблоны маркируются последовательностью после открывающей скобки. Модификаторы «жадности» сохраняют при этом свое значение. Иными словами, вместо того, чтобы семь раз отмерять, мы сразу нарезаем строку на фрагменты.
Использование этого метода накладывает на выражение то ограничение, что после того, как найдено совпадение подшаблона с фрагментом текста, все дальнейшие проверки проводятся относительно этого места совпадения, поэтому здесь обоснованно использование сложных претензий. Не стоит забывать, что при этом (это и достоинство, и недостаток этого метода), если найдено совпадение с таким подшаблоном, но в целом шаблон не соответствует фрагменту, то поиск завершается неудачей, хотя, возможно, при обычном поиске совпадение с шаблоном могло бы быть найдено в другом месте текста (другом возможном значении числителя).
Допустим, необходимо определить, оканчивается ли длинный текст на символы «Хх». При обычном шаблоне /Хх$/ проверка будет проходить от начала текста (сначала будет искаться символ, а потом определяться, стоит ли он в конце). Если усложнить шаблон до Г(. .*)Хх$/, это не сильно ускорит обработку, так как большую часть времени будет перебираться повторение первого подшаблона, и только потом определяться окончание текста. Если же написать шаблон как: /А(?>.*)(?<=Хх}$/, то первый подшаблон сразу же захватит весь текст целиком, а затем будет проверено окончание.
Последней замечательной особенностью регулярных выражении являются условные структуры, позволяющие выбирать подходящий под-шаблон в зависимости от результатов поиска. Они записываются так:
(? (условие) подшаблон!) или (?(условие)подшаблон1|подшаблон2).
При выполнении условия используется первый подшаблон, в противном случае (если он указан) — второй. Условия бывают двух типов.
Если условием является числовая последовательность, то условие верно при нахождении подшаблона с указанным номером, то есть когда существует непустая ссылка с таким номером. Например, следующий шаблон разделяет текст со скобками (невложенными): / ( ( \( )? # необязательная открывающая скобка ( [*()]+ ) # все. кроме скобок С?(2) \) )# если была открывающая скобка, должна быть закрывающая )+ I повторим? /х
Если условие нечисловое, то это должна быть сложная претензия. Например, следующий шаблон ищет десятичное число либо шест-надцатеричное (с префиксом х): / (?(?=х) # если префикс х [\da-fA-F]+ # то шестнадцатеричное число Синтаксис регулярных выражений (PCRE) I \d+ # иначе - десятичное ) /x
Модификаторы
Функционирование регулярных выражений можно видоизменять модификаторами трех уровней: глобальными, внешними и внутренними.
Модификатор
Внутреннее имя
Воздействие
i
PCRE_CASELESS
Игнорировать регистр
S
PCRE_DOTALL
Точка = [\0-\xFF], а не [А\п]
и
PCRE_UNGREEDY
Минимизировать числитель
га
PCRE_MULTILINE
А, $ учитывают \п
D
PCRE_DOLLAR_ENDONLY
$ не учитывает \п
А
PCRE_ ANCHORED
Привязать шаблон к началу текста
е
Только для preg_rep!ace()
X
PCRE_EXTENDED
Разрешить комментарии: пробел и #
X
PCRE_EXTRA
Воспринимать неверную подстановку как ошибку
S
Предварительная оптимизация шаблона перед исполнением
<
Значение модификаторов и их использование описаны в соответствующих разделах.
Модификатор га обладает большим приоритетом, чем 0. Модификатор А предназначен для ускорения обработки, но более выгодно явное конструирование оптимизированных шаблонов, например /.*шаблон/з для однострочного текста.
Внешние модификаторы (указываемые после завершающего ограничителя) воздействуют на весь шаблон и нейтрализуют установленные по умолчанию йа глобальном уровне (при компиляции PCRE).
Модификаторы i, m, s, x, U, X можно устанавливать внутри шаблона, внутри подшаблона модификаторов (? ... ), после знака вопроса. Если в таком подшаблоне присутствует знак «минус», то модификаторы, стоящие за ним, сбрасываются. Действие таких модификаторов распространяется на промежуток шаблона от места его указания до его следующего возможного указания (со знаком минус) или до конца шаблона. Например: /аб(?51)вгде(?х-1т)ж(?тт: .*)з/га. При указании внутренних модификаторов внутри подшаблона их действие (в отличие от Perl) распространяется только на этот подшаблон. Например, шаблон /(а(?1)б)в/ соответствует только фрагментам «абв» и «аБв», а шаблон /(а(?1)б|г)/ соответствует фрагментам: «аб», «аБ», «г» или «Г».
Строковые функции
Вывод
print
Вывод строки, значения переменной или выражения
print (string arg)
Выводит аргумент arg, в качестве которого может быть указана переменная или выражение.
См. также: echo(), printf() и flush().
echo
Вывод одного или нескольких значений
echo (string argl, string [argn]...)
Выводит значения перечисленных параметров.
EchoO — это фактически языковая конструкция, поэтому для нее не обязательны скобки, даже если используется несколько аргументов. echo "Hello World": echo "Перенос на следущую строку. имеющийся в коде, сохраняется и используется при выводе". " чтобы избежать этого используйте ". "оператор конкатенации": echo "This spans\nmultiple lines. The newlines will be\noutput as well.": См. также: print(), printf() и flush().
printf
Вывод отформатированной строки
int printf (string format [, mixed args...])
Выводит строку согласно формату, указанному в строковом аргументе format, который рассмотрен в описании функции sprintf().
См. также: print(), sprintf(), sscanf(), fscanf() и flush().
sprintf
Форматирование строки с подстановкой переменных
string sprintf (string format [, mixed args...])
Возвращает строку, форматированную по шаблону, содержащемуся в строковом аргументе format, в которую, при указании дополнительных аргументов args, могут быть включены значения переменных и выражений.
Строка форматирования может состоять из неопределенно длинной последовательности символов и директив: ординарных символов (это любые символы, за исключением «%»), которые просто копируются в возвращаемую строку, и «спецификаций отображения», для каждой из которых в функции должен быть указан соответствующий параметрт касается как функции sprintf(), так и printf().
Каждый спецификатор состоит из знака процента (%), за которым следуют один или более следующих элементов в указанном порядке.
Необязательный спецификатор заполнителя, определяющий, каким символом будут дополняться строки до необходимой длины. Это может быть пробел или нулевой символ. По умолчанию используется пробел. Альтернативные символы-заполнители могут быть >к.') юны, если перед ними ставится знак одинарной кавычки ('). Например, printf CTz5d",12); // выведет: zzz!2.
Необязательный спецификатор выравнивания. Если он не указывается, ч о значение будет выравниваться по правой стороне, если он указан (как символ «а»), то по левой (действует не всегда).
Необязательный спецификатор ширины значения указывает минимальное число символов, которое должно выводиться в значении
Необязательный спецификатор точности определяет, сколько цифр после запятой должно выводиться для дробных чисел (для чисел других типов не действует). (Для форматирования чисел также полезна функция number_format().)
Спецификатор типа — сообщает, в качестве какого типа должен рассматриваться аргумент. Возможные типы:
X — сам знак процента;
b — целочисленный аргумент в двоичном формате;
с — выводит символ, целочисленный ASCII-код которого указан;
d — целочисленный аргумент в десятичном формате;
f — дробное число в формате числа с плавающей точкой;
о — целочисленный аргумент в восьмеричном формате;
s — аргумент выводится как строка;
х — целочисленный аргумент в шестнадцатеричном формате (с маленькими буквами);
X — целочисленный аргумент в шестнадцатеричном формате (с большими буквами).
См. также: printf(), sscanf(), fscanf() и number_format().
Интерпретация строки согласно формату и занесение значений в переменные
mixed sscanf (string str. string format [, string varl...])
Функция является противоположностью printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются в массиве.
// получение серийного номера Ssenal = sscanf ("SN/235-0001".nSN/*3d-«4d"): echo Sseria1[0]*lGOOO+$senal[l]; // выводит: 2350001 // и даты изготовления Smandate = "January 01 2000": list($month. $day. Syear) = sscanf(Smandate."%s Id %d"): echo "Дата: Syear-" substr($month.0.3)."-$day\n". // выводит: 2000-Jan-Ol
При указании дополнительных необязательных параметров (их следует передавать по ссылке) функция возвращает их число. Те переменные, которые не получают значений, в возвращаемом значении не учитываются.
// генерировать XML запись из строки Sauth = "765\tLewis Carroll": $n = sscanf (Sauth. "*d\«s Zs" . &$id. &$first. &$last); echo "$fi rst $last \n";
См. также: fscanf(), printf() и sprintf().
bin2hex
Преобразование символьных данных в шестнадцатеричный вид
string bin2bex (string str)
Возвращает строковое шестнадцатеричнос представление символьно-байтовых данных, содержащихся в строке str. Конвертация производится нобайтово, старший полубайт указывается первым.
echo Din2hex("AaBblM"): // выводит. 4161426286а6
chr
Получение символа с указанным кодом ascii
string chr (int ascii)
$str = cnr (27). /* добавляет esc-символ в конец строки $str */ $str = sprintf ("Строка завершается esc-символои. 3tc". 27); Функция дополняет ord().
См. также sprintf ()с форматом %с.
ord
Получение ascii кода символа
int ord (string string)
Возвращает ASCII код первого символа строки string. Эта функция дополняет chr ().
if (ord ($str) == 10) { // символ «\n» echo "Первый символ строки \$str - переход на новую строку.\n": }
См. также chr ().
substr
Получение части строки
string substr (string string, int start [, int length]) Возвращает часть строки string от позиции start длиной length.
Если аргумент start положительный, то возвращается часть строки string начиная с позиции start, с отсчетом от нуля.
Если указывается необязательный аргумент length и он положительный, то это определяет длину возвращаемой строки. Если он отрицательный, то тогда он указывает на позицию последнего возвращаемого символа от конца исходной строки (и тогда -1 — это предпоследний символ).
string str_repeat (string input, int multiplier) .
echo str_repeat ("-=". 3). // выведет "-=-=-=".
str_pad
Дополнение строки другой строкой до определенной длины
string str_pad (string input, int padjength [, string pad_string [, int pad_type]])
Аргумент input содержит исходную строку. Аргумент pad_length указывает, какую длину должна иметь возвращаемая строка, и если он имеет значение меньшее, чем исходная строка, никакого добавления не производится.
Необязательный аргумент pad_string указывает, какую строку использовать в качестве заполнителя; по умолчанию используются пробелы. Необязательным аргументом pad_type могут быть значения: STR_ PADJtIGHT (по умолчанию), STR_PAD_LEFT или STR_PAD_BOTH, указывающие соответственно, что строку следует дополнять справа, слева или с обеих сторон.
string chunk_split (string string [, int chunklen [, string end]])
Возвращает строку, в которой между каждым блоком строки string длиной chunklen (по умолчанию 76) вставляется последовательность разделителей end (по умолчанию: «\г\п»). Это может быть полезно при конвертировании в формат «base64» для соответствия правилам RFC 2045.
Эта функция работает значительно быстрее, чем ereg_replace().
См. также wordwrap().
strtok
Получение строки по частям
string strtok (string argl, string arg2)
При первом вызове функция принимает два аргумента: исходную строку argl и разделитель агд2. При каждом последующем вызове аргумент argl указывать не следует, иначе будет возвращаться первая часть строки. При каждом вызове (включая первый)
возвращается часть строки до разделителя агд2, при каждом последующем -следующая часть до следующего разделителя, и так до конца строки. Когда возвращать больше нечего, возвращается значение FALSE. Заметьте, если часть строки состоит из 0 (или это пустая строка), то это будет воспринято как значение FALSE.
Стоит отметить, что в качестве разделителей указывается последовательность символов, каждый из которых в отдельности может являться разделителем, но когда в строке последовательно встречаются два и более разделителей, функция возвращает пустую строку (что может прекратить цикл обработки, как в примере).
См. также: split() и explode().
explode
Разделение строки в массив
array explode (string separator, string string [, int limit])
Возвращает массив строк, каждая из которых соответствует фрагменту исходной строки string, находящемуся между разделителями, указанными аргументом separator. При указании аргумента limit возвращаемый массив будет содержать не более указанного limit числа элементов с оставшейся неразделенной частью строки в последнем элементе.
Возвращает строку, содержащую последовательно все элементы массива pieces, между которыми вставляется значение строкового аргумента glue.
$colon_separated= implode (" ". lady);
См. также: explode(), join() и split().
join
Синоним функции implode()
string join (string glue, array pieces)
См. также: explode(), implode() и split().
setlocale
Установка региональных настроек
string setlocale (string category, string locale)
Устанавливает указанную аргументом category региональную установку для строковых преобразований, которая может принадлежать к одной из следующих категорий:
LC ALL — для всех установок (например: "Russian _Russia.l251");
LC_COLLATE — сравнение строк (пока не реализовано в РНР);
LC_CTYPE — классификация и преобразование символов, например strtoupper();
LC_MONETARY — для функции localeconv() (пока не реализовано в РНР):
LC_ NUMERIC — десятичный разделитель чисел;
LC_TIME — форматирование даты и времени функцией strftime().
В аргументе locale указывается то значение настройки, которое необходимо установить. При передаче пустой строки «» региональные установки будут установлены в соответствии с имеющимися в системе по умолчанию. Если передается ноль (строковый или числовой), региональные настройки не изменяются, а возвращается текущее значение установки.
Функция возвращает новое установленное значение настройки или FALSE при ошибке. Если указывается неправильное значение категории, выдается предупреждение.
Вычисления строковых сумм и хешей
strlen
Вычисление длины строки
int strlen (string str)
count_chars
Получение информации о символах строки
mixed count_chars (string string [. mode])
Вычисляет частоту встречаемости каждого байта (0-255) в строке string и возвращает в массиве результат согласно аргументу mode:
0 — массив с байтами в качестве индексов и частотой в качестве значений элементов массива (по умолчанию, если аргумент mode не указан);
1 — то же, что и 0, но отсутствующие в строке string байты не возвращаются;
2 — то же, что и 0, но возвращаются только тс байты, которые отсутствуют;
3 - возвращается строка, состоящая из всех обнаруженных символов;
4 - возвращается строка, состоящая из всех отсутствующих символов.
сгс32
Получение полиминала строки сгс32 int crc32 (string str)
Вычисляет 32-битовый циклический код избыточности строки str, обычно используемый для проверки целостности переданных данных.
Возвращает вычисленный строковый MD5-xem строки str, используя «RSA Data Security, Inc. MD5 Message-Digest Algorithm», описанный в файле RFC1321 (http://www.faqs.org/rfcs/rfcl321.html). Часто используется для генерации уникальных идентификаторов. Возвращается 32-значнос число, состоящее из шсстнадцатеричных цифр.
См. также сгс32().
crypt
Симметричное шифрование
string crypt (string str [, string salt])
Функция является реализацией имеющегося в Unix алгоритма шифрования DES1. Аргумент str — это шифруемая строка, a salt — начальное (двухбайтовое)2 основание шифра (если оно не указано, то оно случайным образом генерируется). Функция рассмотрена в справочной системе Unix (man). Некоторые системы заменяют
стандартный метод шифрования DES методом MD5.
В системах, поддерживающих несколько алгоритмов шифрования, следующие константы устанавливаются равными 1 или 0, в зависимости от того, поддерживается данный алгоритм или нет:
Функция, сходная по действию с soundex(), вычисляет код произношения слова, переданного в строке str, но с повышенной точностью вычислений, так как использует правила произношения английского языка. Возвращаемое строковое значение может быть переменной длины.
Алгоритм функции разработан Лоуренсом Филипсом (Lawrence Philips, lphilips@verity.com) и описан в книге: «Practical Algorithms for Programmers», Binstock & Rex, Addison Wesley, 1995.
soundex
Вычисление хеша сходности произношения
string soundex (string str)
Функция может быть использована для проверки правописания, когда приблизительно известно как звучит слово, но не известно, как оно пишется, и имеется словарь (база данных), относительно которого возможно осуществлять проверку. Возвращается строка из 4 символов: первая буква слова и 3 цифры.
Алгоритм функции описан Дональдом Кнауфом (Donald Knuth) в книге «The Art of Computer Programming, vol. 3: Sorting and Searching», Addison-Wesley (1973).
Возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и (), если они равны. Регистр в строках учитывается.
См. также: ereg(), strcasecmp(), substr(), stristr(), strncasecmp(), strncmp() и strstr().
strncmp
Сравнение начала строк
Int strncmp (string strl, string str2, int Ten)
Функция отличается от strcmp() тем, что строки strl и str2 сравниваются не целиком, а только их первые len байтов. Если len меньше, чем длина меньшей из строк, они сравниваются целиком. Возвраща-ет <0, если strl «меньше» str2; >0 если strl «больше» str2, и 0, если они равны. Регистр в строках учитывается.
См. также: ereg(), strncasecmp(), strcasecmp(), substr(), stristr(), strcmp() и strstr().
strcasecmp
Сравнение строк без учета регистра
int strcasecmp (string strl, string str2)
Возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и (), если они равны. Регистр символов строк не учитывается.
$varl = "HellO"; $var2 = "hello". if (fstrcasecmp (Svarl. $var2)) { echO 'Svarl == $var2 при сравнении строк без учета регистра'. }
См. также: ereg(), strcrap(), substr(), stristr(), strncasecmp() и strstr().
strncasecmp
Сравнение начал строк без учета регистра
int strncasecmp (string strl, string str2, int len)
Функция является комбинацией strcasecmp() и strncmp().
См. также: ereg(), strcasecmp(), strcmp(), substr(), stristr() и strstr().
strnatcmp
«Естественное» сравнение строк
int strnatcmp (string strl, string str2)
Функция имитирует такое сравнение строк, какое использовал бы человек, как показано ниже:
Для более подробной информации смотрите страницу Мартина Пула «Natural Order String COmparisOn» (http://www.linuxcare.cOm.au/ prOjects/natsOrt/).
Во всем остальном функция ведет себя подобно всем остальным функциям сравнения: возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и 0, если они равны. При этом регистр сравниваемых строк учитывается.
См. также: егед(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcasecmp(), strstr(), natsOrt() и natcasesort().
strnatcasecmp
«Естественное» сравнение строк без учета регистра int strnatcasecmp (string strl, string str2)
Дополнение функции strcmp(), которое игнорирует при сравнении регистр.
См. также: егед(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcmp() и strstr().
simila_r text
Определение схожести двух строк
int similar_text (string first, string secOnd [, dOuble percent])
Функция вычисляет схожесть двух строк по алгоритму, описанному Оливером (Oliver [1993]). Но вместо стека (как в псевдокоде Оливера) она использует рекурсивные вызовы. Сложность алгоритма делает функцию медленной, и ее скорость пропорциональна (N3), где N — длина наибольшей строки.
Возвращается число символов, совпавших в обеих строках. При передаче по ссылке третьего необязательного аргумента в нем сохраняется процент совпадения строк.
levenshtein
Определение различия Левенштейна двух строк int levenshtein (string strl, string str2)
int levenshtein (string strl, string str2, int cOst_ins, int cOst_rep, int cOst_del)
int levenshtein (string strl, string str2. function cOst)
«Различие Левенштейна» — это минимальное число символов, которое требовалось бы заменить, вставить или удалить для того, чтобы превратить строку strl в str2. Сложность алгоритма пропорциональна произведению длин строк strl и str2 (это делает функцию более быстродействующей, чем similar_text()).
Первая форма функции возвращает число необходимых операций над символами строк для трансформации strl в str2.
Вторая форма имеет три дополнительных параметра: стоимость операций вставки, замены и удаления, что делает ее более адаптированной для вычисления, но при этом менее быстродействующей. Возвращается интегральный показатель сложности трансформации.
Вариант три, который еще не реализован, позволит указывать функцию, используемую для расчета сложности трансформации. Функция cOst будет вызываться со следующими аргументами:
применяемая операция (вставить, изменить, удалить): «I», «R», «D»;
фактический символ первой строки;
фактический символ второй строки;
позиция строки 1;
позиция строки 2;
оставшаяся длина строки 1;
оставшаяся длина строки 2.
Вызываемая функция должна будет возвратить стоимость этой операции.
Если длина одной из строк более 255 символов, функция levenshtein() возвращает -1, но такая длина более чем достаточна.
См. также: sondex(), similar_text() и metaphone().
Поиск
strchr
Поиск первого вхождения символа в строку
string strchr (string haystack, string needle) Функция является синонимом для strstr().
strstr
Нахождение первого вхождения подстроки
string strstr (string haystack, string needle)
Возвращает оставшуюся часть строки haystack, которая начинается с первого фрагмента, указанного в аргументе needle. Если это не удается, то возвращает FALSE. Функция чувствительна к регистру.
Если needle не строка, то тогда значение преобразуется в целое и используется как код искомого символу.
$email = 'ntymail@designmultimedia.com'. $dOmain = strstr (Semail. '(?'). tdOmain = strstr (Semail. Ord('P')): // можно и так print SdOmain: // выводит- @designinultimedia.com
См. также: stristr(), strrchr(), substr() и ereg().
stristr
Аналог strstr, нечувствительный к регистру
string stristr (string haystack, string needle)
Возвращает оставшуюся часть строки haystack, которая начинается с фрагмента, указанного в аргументе needle. Если это не удается, то возвращает FALSE. Функция Нечувствительна к регистру.
Если needle не строка, то тогда его значение преобразуется в целое и используется как код искомого символа.
См. также: strchr(), strrchr(), substr() и ereg().
strrchr
Поиск последнего вхождения подстроки
string strrchr (string haystack, string needle)
Возвращает оставшуюся часть строки haystack, которая начинается с последнего фрагмента, указанного в аргументе needle. Если это не удастся, то возвращает FALSE. Функция чувствительна к регистру.
Если needle не строка, то тогда его значение преобразуется в целое и используется как код искомого символа; если это строка, содержащая более одного символа, то используется первый.
// получить последний каталог в $РАTH $aiг = substr (strrchr (SPATH. ":"). 1): // получить все после последнего перевода строки $text = "Line IXnLine 2\nLine 3". $last = substr (strrchr (Stext. 10). 1 ):
См. также: substr(), stristr() и strstr().
strpos
Определение первой позиции фрагмента в строке
int strpOs (string haystack, string needle [. int Offset])
Возвращает численную позицию первого вхождения строки needle в строку haystack. Возвращает FALSE, если вхождение не найдено. Заметьте, что функция возвратит одинаковое значение 0, если строка haystack начинается с фрагмента needle. В примере ниже показан метод обработки случая:
$pOs = strpOs (Smystnng. "b"): if (SpOs = FALSE) ( // идентичность- три знака равемс'-..: // nOt fOund . }
Если аргумент needle — не строка, то тогда его значение преобразуется в целое и используется как код искомого символа.
Необязательный аргумент Offset позволяет указать, с какой позиции строки haystack начинать поиск.
См. также: strrpos(), strrchr(), substr(), stristr() и strstr().
strrpos
Определение последней позиции фрагмента в строке
int strrpos (string haystack, char needle)
Возвращает численную позицию последнего вхождения симиола needle в строку haystack. Возвращает FALSE, если вхождение не найдено. Заметьте, что функция возвратит одинаковое значение 0, если символ является первым в строке и если он в строке не присутствует. В примере ниже показан метод обработки этого случая:
$pos = strrpos ($mystnng. 'b"). it (SpOs = FALSE) { // идентичность- три знака равенства // not found . }
Если аргумент needle — не строка, то тогда его значение преобразуется в целое и используется как код искомого символа; если это строка, содержащая более одного символа, то используется первый.
См. также: strpos(), strrchr(), substr(), stristr() и strstr().
substr count
Определение числа вхождений фрагмента в строку
int substr_count (string haystrack, string needle)
Возвращает число фрагментов needle, присутствующих в строке haystrack.
print substr_count("This is a test", "is"). // = 2
strspn
Определение присутствия начальных символов в строке
int strspn (string strl, string str2)
Возвращает длину начального фрагмента строки strl, состоящего полностью из символов, имеющихся в строке str2.
strspn ("42 is ...". "1234567890"). // = 2
См. также strcspn().
strcspn
Определение отсутствия начальных символов в строке int strcspn (string strl, string str2)
Возвращает длину начального фрагмента строки strl, состоящего полностью НЕ из символов, имеющихся в строке str2.
См. также strspn().
Простые манипуляции
Itrim
Удаление начальных пробелов
string Itrim (string str)
Возвращает исходную строку str, из которой удалены начальные пробельные символы (такими символами являются: «\n», «\r», «\t», «\v», «\0» и пробел).
См. также: chop(), rtrim() и tnm().
rtrim
Синоним функции chop()
string rtrim (string str)
$tnimed -- rtrim ;$line).
См. также: trim(), Itrim().
chop
Удаление конечных пробелов
string chop (string str)
Возвращает полученную строку без завершающих пробельных символов, включая переходы на новую строку. (Одноименная функция в Perl, помимо этого, удаляет последний символ строки.)
См. также: trim(), Itrim(), rtrim() и chop().
trim
Удаление начальных и конечных пробелов
string trim (string str)
Возвращает исходную строку str, из которой удалены начальные и конечные пробельные символы (такими символами являются: «\п», «\г>>, «\t», «\v», «\0» и пробел).
См. также: chop(), rtrim() и Itrim().
strrev
Реверс строки
string strrev (string string)
Возвращает строку string «задом наперед».
strtolower
Преобразование символов сгроки в нижний регистр
string strtolower (string str)
Возвращает строку string, в которой все алфавитные буквы делаются маленькими (lowercase). Понятие «алфавитные» определяется локальными установками. Обычно символы кириллицы не конвертируются (или конвертируются неправильно).
Возвращает строку string, в которой все алфавитные буквы делаются большими (uppercase). Понятие «алфавитные» определяется локальными установками. Обычно символы кириллицы не конвертируются (или конвертируются неправильно).
Если первый символ строки — строчная буква, то в возвращаемой строке она становится заглавной. Символы кириллицы могут быть неправильно конвертированы.
Словом считается та последовательность символов, которой предшествует пробельный символ (то есть: пробел, прогонка страницы, переход на новую строку, возврат каретки, горизонтальная и вертикальная табуляция).
См. также: strtoupper(), strtolower() и ucfirst().
strtr
Замена указанных символов
string strtr (string str, string from, string to)
string strtr (string str, array from)
Возвращается строка str, в которой каждый символ, присутствующий в строке from, заменяется на корреспондирующий из строки to. Если строки from и to различной длины, то «лишние» конечные символы длинной строки игнорируются.
$addr = strtr(Saadr. "абвгд". "fbcde"):
Во второй форме функция возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. В этом случае функция пытается заменить сначала наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях с сроки.
$trans = array ("hello" => "hi", "hi" => "hello"): echo strtrC'hi all. ! said hello". Strans) . "\n": // выведет "hello all I said hi".
Возвращает строку haystack, в которой все фрагменты needle заменены значением строки str. Также функция может работать с двоичными строками. Эта функция в простых случаях может успешно заменить ereg_replace().
string substr_replace ( string string, string replacement, int start [, int length])
Возвращает строку string, в которой часть от символа с позицией start и длиной length (или до конца, если аргумент длины не указан) заменяется строкой replacement.
Если значение start положительно, отсчет производится от начала строки string, иначе — от конца (-1 — последний символ строки).
Если значение length неотрицательно, тогда оно указывает длину заменяемого фрагмента. Если оно отрицательно, то это число символов от конца строки string до последнего символа заменяемого фрагмента (со знаком минус).
Добавление слешей перед специальными символами строки
string addslashes (string str) .
Возвращает строку, в которой перед символами, имеющими специальное значение для строк, вставляется слеш. Такими символами являются: одиночная (') и двойная (") кавычки, обратный слеш (\) и нулевой байт NUL (\0). Это часто требуется, чтобы затем правильно передать строку в запросе к базе данных и т. д.
См. также: stripslashes(), htmlspecialchars() и quotemeta().
addcslashes
Форматирование строки слешами в С-представление
string addcslashes (string str, string charlist)
Возвращает строку str, в которую вставлены символы обратного слеша «\» перед перечисленными в строке-списке charlist символами. Это позволяет преобразовать непечатные символы в их визуальное С-представлсние.
В примере, приведенном ниже управляющие символы: «\n>>, «\r», и другие с кодами ASCII до 32 и выше 126, а также знак восклицания и «собака», конвертируются в их специальное или восьмеричное представление. Будьте осторожны с алфавитно-цифровыми символами и кодами (например, символы кириллицы имеют коды выше 126). Строка charlist содержит диапазоны кодов в формате "\0..\37", что в данном случае означает: коды от 0 до 31.
$not_escaped = " Эта строка \t is (@) much complex \r to \x9f be \n presented! \n\n". echo $not_escaped. Sescaped = addcslashes ($not_escaped. "\0 .\37!@\177..\377"): echo Sescaped;
При запуске сценарий выводит следующее:
Эта строка is (@) much complex to Я be presented1 \235\342\240 \341\342\340\256\252\240 \t is (\@) much \r\n complex \r to \237 be \n presented\!\n
См. также: stripcslashes(), stripslashes(), html special chars(), htralspe-cialchars() и quotemeta().
stripslashes
Удаление обратных слешей
string stripslashes (string str)
Возвращает строку, из которой удалены обратные слеши. Двойные слеши делаются одиночными.
См. также addslashes().
stripcslashes
Преобразование специальных символов в их двоичное представление string stripcslashes (string str)
Возвращает строку, в которой те специальные символы, которые закомментированы (для визуального отображения) обратным слешем, преобразуются в их естественное двоичное представление. Распознаются С-подобные записи, например: \n, \r ..., восьмеричные и шсст-надцатеричные последовательности.
Возвращает строку str, в которую добавлены обратные слеши «\» перед каждым из следующих символов:
\\ + *?["]($)
Может использоваться для подготовки шаблонов в регулярных выражениях.
См. также: addslashes(), htmlentities(), htmlspecialchars(), nl2br() и stripslashes().
wordwrap
Расстановка переносов строк по ширине
string wordwrap (string str [, int width [. string break [, int cut]]])
Возвращает строку str, в которой расставлены символы перехода на новую строку («\п» или тот, который указан аргументом break), таким образом, что число символов на строке не превышает значения width (по умолчанию оно равно 75). Перенос осуществляется по словам; если указывается параметр cut, равный 1, то перенос строки выполняется всегда, как бы длинно слово ни было.
$text = "The quick brown fox jumped over the lazy dog "; Snewtext = wordwrapf Stext. 20 ); echo "$newtext\n";
Будет выведено
The quick brown fox jumped over the lazy dog.
Следующий пример демонстрирует использование последнего аргумента cut=l:
Stext = "A very long woooooooooooord ". Snewtext = wordwrap! $text. 8. "\n". 1). echo "$newtext\n":
Будет выведено
A very long
wooooooo ooooord
См. также: nl2br(), chunk_split().
convert_cyr_string
Конвертация строк из одной кодировки кириллицы в другую
Аргументы from и to — одиночные символы, представляющие соответственно исходную и целевую кодировки. Поддерживаемые типы кодировок, используемые в аргументах from и to:
k — koi8-r;
w — windows-1251;
i — iso8859-5;
a — x-cp866;
d — x-cp866;
m — x-mac-cyrillic.
hebrev
Конвертация логического текста Hebrew в отображаемый
string hebrev (string hebrew_text [, int max_chars_per_line])
Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.
См. также hebrevc().
hebrevc
Аналог функции hebrev с расстановкой переносов
string hebrevc (string hebrew_text [, int max_chars_per_"hne])
Функция сходна с hebrev() с тем отличием, что она преобразует символы перевода строк «\п» в « \n». Необязательный аргумент тах_ chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.
См. также hebrev().
quoted printable decode
Преобразование цитированной строки в 8-битную
string quoted_printable_decode (string str)
Функция сходна с imap_qprint(), но не требует модуля ШАР.
Функции URL
parse_url
Разделение строки URL на ее компоненты
array parse_ur! (string url)
Возвращает ассоциативный массив, содержащий различные присутствующие в URL компоненты. Такими компонентами могут быть: «scheme», «host», «port», «user», «pass», «path», «query» и «fragment».
parse_str
Занесение строки URL в переменные
void parse_str (string str [, array arr])
Интерпретирует строку str, как если бы эта строка содержала переменные и их значения и передавалась в URL; устанавливает для найденных переменных значения. Если указывается второй аргумент, то значения сохраняются не в глобальных переменных, а в элементах указанного массива.
Возвращает строку, в которой вес не алфавитно-цифровые символы (за исключением дефиса «-», знака подчеркивания «_» и точки «.») заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричпыс цифры (обозначающие код символа). Схема этого кодирования описана в файле RFC1738, и она предназначена для того, чтобы буквенные символы не обрабатывались в качестве разделителей строки URL и не искажались при передаче в сетях (что характерно для некоторых систем электронных сообщений).
Функция удобна для предотвращения неправильного вывода текста, введенного пользователем, если он содержит элементы форматирования HTML (например, в досках объявлений, гостевых книгах, чатах). Необязательный аргумент quote_style указывает, как поступать с кавычками: режим по умолчанию ЕМТ_СОМРАТ, служащий для обратной совместимости, разрешает трансляцию только двойных кавычек; ENT_QUOTES разрешает трансляцию любых кавычек; a ENT_NOQUOTES запрещает трансляцию любых кавычек.
Такую же операцию производит функция htmlentities().
См. также: html entities ()и nl2br().
htmlentities
Конвертация символов, имеющих HTML-представление
string htmlentities (string string [, int quote_style])
Функция подобна htmlspecialchars() с тем отличием, что она производит не выборочную трансляцию, а полную — для всех символов, которые могут иметь эквивалентные HTML-представления. Необязательный аргумент quote_style указывает, как поступать с кавычками: режим по умолчанию ENT_COMPAT, служащий для обратной совместимости, разрешает трансляцию только двойных кавычек; ENT_ QUOTES разрешает трансляцию любых кавычек; a ENT_NOQUOTES запрещает трансляцию любых кавычек. В настоящее время используется кодировка ISO-8859-1.
См. также: htmlspecialchars() и nl!2br().
Учебник по основам PHP. PHPBeginner
Файл конфигурации php.ini
В комплекте поставки этот файл называется php.ini-dist, при ручной установке его необходимо переименовать в php.ini и разместить в каталоге но умолчанию. Обычно РНР ищет этот файл в текущем каталоге (например, там, где находится сам интерпретатор). Также этот файл может распо.чагаться в системном каталоге (это свойственно Windows). При запуске интерпретатора из командной строки с параметром -с можно указать иной путь. Кроме того, путь можно задать и переменной окружения PHPRC.
Файл конфигурации PHP ISAPI модуля загружается однажды, при запуске web-сервера; а для CGI-верспи — при каждом запуске. Начальные параметры конфигурации php.ini-dist соответствуют параметрам компиляции по умолчанию. Для сервера Apache некоторые параметры РНР можно также указать в файлах конфигурации web-сервера и файлах .htaccess (в виде php_value name value, где name — название параметра РНР, a value — ее значение).
Параметры для загружаемых модулей помечаются их названиями, коюрые заключены в квадратные скобки. Эти названия в скобках (пока) игнорируются. После символа «точка с занятой» указываются комментарии.
Значения параметров указываются в виде: директива = значение. Регистр учитывается. Значением может быть: < /FONT >
строка;
число:
РНР константа (например: E_ALL, М_Р!);
одна из INI констант (On, Off, True, False Yes, No, None);
выражение (например: E_ALL & -E_NOTICE);
строка в кавычках (например: "Строка").
В выражениях можно указывать группирующие круглые скобки, битовые операторы: | (ИЛИ), & (И), - (НЕ) и логический оператор: ! (НЕ). Если требуется использовать константы РНР, определяемые
загружаемыми библиотеками, то их можно использовать только после строки, загружающей соответствующий модуль. Для установки логических параметров можно использовать значения 1, On, True, Yes; а для их сброса — 0, Off. False, No. Пустая строка может быть обозначена простым неуказанием значения после знака равенства или значением None. Узнать текущие параметры конфигурации можно функциями phpinfoO, get cfg var() и т. п.
Общие параметры
anow_call_time_pass_reference = On < /FONT >
Разрешает передачу аргументов по ссылке при вызове функций. Этот параметр устарел и в будущем не будет поддерживаться. Рекомендуется указывать возможность передачи значений в функцию по ссылке в объявлении функций, а этот параметр отключить.
;arg_separator.output = "&агар;" < /FONT >
Разделитель аргументов, используемый в URL, генерируемых РНР. По умолчанию: «&>> в представлении HTML (параметр добавлен в РНР 4.0.5).
;arg_separator.input = ";&" < /FONT >
Перечисляет разделители, используемые РНР для разделения аргументов в строке URL и последующего занесения в переменные. Каждый символ указанной строки считается разделителем (параметр добавлен в РПР 4.0.5).
aTlow_url_fopen = On < /FONT >
Разрешает указание адресов URL в функциях открытия файлов (потоков). По умолчанию возможно использование удаленных файлов ftp и http; некоторые дополнительные модули могут расширять возможности, например, модуль zlib позволяет открывать сжатые файлы.
asp_tags = Off < /FONT >
Разрешает использование ASP-подобных тегов <% и %> в дополнение к основным . Это также позволяет выводить значение переменных методом ASP: <%- %value %>.
auto_append_filе = string < /FONT >
Указывается имя файла, текст которого автоматически добавляется перед началом каждого интерпретируемого файла (как если бы его подключали директивой include(); путь include_path также используется). Может использоваться для отслеживания посещений, инициализации переменных основного сценария или простого добавления «верхушек» страниц. Но если сценарий завершается функцией exit(), добавление не производится.
auto_arepend_file = string < /FONT >
Указывается имя файла, текст которого автоматически добавляется после конца каждого интерпретируемого файла, подобно параметру auto_append_fiIe.
cgi_ext = string < /FONT >
Параметр пока не определен, defaultjnimetype = "text/html" ;default_charset = "iso-8859-1" < /FONT >
Строки mimetype и charset, посылаемые в http заголовке каждой страницы, генерируемой РНР. Можно явно проверить, какой заголовок выводится РНР, запустив сценарий из командной строки, не указывая параметр -q. Полезно для указания charset-a кириллицы (например: «windows-1251»).
display_errors = On < /FONT >
Разрешает вывод сообщений об ошибках как обычный текст. Рекомендуется отключить этот параметр после отладки, так как это может использоваться злоумышленниками для получения конфиденциальной информации.
display_startup_errors = Off < /FONT >
Даже когда все сообщения об ошибках разрешены, ошибки времени инициализации РНР не отображаются. Параметр разрешает вывод сообщений об этих ошибках как обычный текст. Рекомендуется отключить этот параметр после отладки, так как это может использоваться злоумышленниками для получения конфиденциальной информации.
;doc_root = string < /FONT >
Указывает корневой каталог РНР на сервере. При указании с параметром safejnode = On сценарии в других каталогах не запускают ся. < /FONT >
engine = On < /FONT >
Параметр полезен только для PHP-модуля сервера Apache. Он позволяет разрешить (или запретить) интерпретацию сценариев РНР в определенных web-каталогах или на отдельных виртуальных web-серверах. Обычно эта директива указывается в соответствующем разделе файла httpd.conf.
;error_log = string < /FONT >
Имя файла, в который заносятся сообщения об ошибках. При указании специального значения syslog сообщения направляются в журнал системных событий (в UNIX это syslog(3), а в Windows NT это Event Log; Windows 95 параметр не поддерживает).
error_reporting = E_ALL &-E_NOTICE < /FONT >
Устанавливает битовую маску ошибок, о которых сообщается во время исполнения. По умолчанию выдаются все сообщения, кроме простых. Возможны разнообразные комбинации. Константы и значения приводятся в главе «Обработка ошибок».
;error_prepend_string = "" < /FONT>
Добавляет указанную строку в начале сообщения, выводимого при ошибке.
;error_append_string = "" < /FONT >
Добавляет указанную строку в конце сообщения, выводимого при ошибке.
expose_php = On < /FONT >
Разрешает включать в http-заголовки упоминание о том, что РНР установлен на сервере.
file_uploade = On < /FONT >
Разрешает пли запрещает поддержку HТТР-загрузки файлов на сервер.
gpc_order = "GPS" < /FONT >
Параметр устарел и заменен параметром variabдes_order.
ignore_user_abort = On
Запрещает завершать сценарий при разрыве подключения.
См. функцию ignore_user_abort().
inplicit_flush = Off < /FONT >
Эквивалент вызова функции ob_implicit_f"lush(). Установка этого параметра сильно снижает быстродействие и используется в основном при отладке.
include_path = string < /FONT >
Указывает перечисление каталогов, в которых ищутся файлы, подключаемые с помощью requireO, include() и fopen_with_path(). Формат аналогичен используемому в системной переменной окружения PATH: для UNIX разделитель — это двоеточие, для Windows — точка с запятой.
В UNIX: include j33th= .:/home/httpd/php-lib.< /FONT>
В Windows: include_path= ".;c:\www\phplib". < /FONT>
Значение по умолчанию — только текущий каталог.
isapi_ext = string < /FONT >
Параметр пока не определен.
log_errors = Off < /FONT >
Определяет, помещать ли сообщения об ошибках в журнал событий web-сервера. Зависит от вида сервера.
magic_quotes_gpc = On < /FONT >
Разрешает при регистрации глобальных переменных из внешних значений (Get/Post/Cookie) модифицировать получаемые строки, а именно добавлять обратный слеш перед каждым символом: одинарной или двойной кавычки, обратного слеша «\» и нулевого символа \0. Если также разрешен параметр magic_quotes_sybase, то одинарные кавычки удваиваются вместо предварения слешем.
magic_quotes_runtime = Off < /FONT >
Разрешает или запрещает преобразование строковых данных, возвращаемых большинством функций из внешних источников (текстовых файлов, баз данных), по принципу параметра magic_quotes_ gpc. Предпочтительно делать это вручную.
magic_quotes_sybase = Off < /FONT >
Если этот параметр разрешен совместно с magic_quotes_gpc (или magic_quotes_runtime), то одинарные кавычки удваиваются вместо предварения слешем.
max_execution_time = 30 < /FONT >
Устанавливает максимально допустимое время исполнения сценария (тайм-аут) в секундах. При превышении этого времени сценарий будет прерван.
memory_limit = 8М
Устанавливает максимальный объем памяти, который может быть выделен одному сценарию (8 Мбайт). Это предотвращает поглощение большого объема памяти сервера неоптимизированными сценариями.
nsapi_ext = string < /FONT >
Параметр пока не определен.
open_basedir = string < /FONT >
Указывает перечисление тех каталогов, в которых может быть открыт файл. Если указывается непустая строка, при открытии
файла (например, функциями fopen() или gzopen()) местоположение файла проверяется и он открывается, только если обнаруживается в каталоге из указанного списка. Специальное значение «точка» означает текущий каталог, в котором находится сценарий.
В Windows разделителем списка каталогов служит точка с запятой, в других системах — двоеточие. При запуске РНР как модуля Apache пути наследуются от корневого web-каталога.
output_buffering = Off < /FONT >
Разрешает или запрещает буферизацию выводимого текста. Разрешение этого параметра позволяет посылать HTTP-заголовки (или cookie) из любого места сценария, но снижает быстродействие. Возможно разрешение буферизации во время исполнения.
output_handler = string < /FONT >
Определяет функцию, которая будет использоваться для вывода. Таким образом можно, например, перенаправлять весь выводимый текст в log-файл. При указании в качестве такой функции "ob_gzhandler" весь выводимый текст будет неявно сжиматься перед посылкой браузеру методом gzip или deflate (обычно браузеры способны автоматически декомпрессировать такие данные). Установка этого параметра автоматически разрешает параметр output_ buffering.
precision = 14 < /FONT >
Число значащих цифр, выводимое в дробных числах.
register_globals = On
Разрешает регистрировать внешние переменные ( в порядке, указанном параметром variables_order) в качестве глобальных переменных сценария. Рекомендуется, по соображениям безопасности, отключить этот параметр и осуществлять доступ к внешним переменным (для этого должен быть разрешен параметр track_vars) через соответствующие ассоциативные массивы: SHTTP_ENV_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, SHTTP_COOKIE_VARS, $HTTP_SERVER_VARS.
post_max_size = 8M < /FONT >
Устанавливает максимальный объем файла (8 Мбайт), который может быть передан на сервер методом POST.
register_argc_argv = On < /FONT >
Разрешает регистрацию переменных argv и агдс, содержащих параметры запуска из командной строки или параметры строки запроса методом GET. Если эти переменные не используются, отключите параметр для повышения быстродействия.
short_open_tag = On < /FONT >
Разрешает использовать короткую форму записи тегов-ограничителей РНР: и ?>. Если необходима последующая совместимость РНР с XML, этот параметр следует заблокировать, и тогда будет разрешено использовать только теги .
track_errors = Off < /FONT >
Сохраняет последнее сообщение об ошибке в переменной $php_ errormsg.
track_vars = On < /FONT >
Разрешает сохранять внешние переменные (Environment, GET, POST, Cookie, Server) в ассоциативных массивах: $HTTP_ENV_ VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_ COOKIE_ VARS и $HTTP_SERVER_VARS.
В РНР 4.0.3 этот параметр разрешен всегда.
;upload_tmp_dir = string [ < /FONT >
Устанавливает каталог временных файлов, загружаемых на сервер методом HTTP upload. Этот каталог должен быть доступен для записи как открытый (public). По умолчанию используется системный: TEMP или ТМР.
upload_max_filesize = 2М < /FONT >
Устанавливает максимально допустимый размер файлов, загружаемых на сервер методом HTTP upload.
user_dir = string < /FONT >
Устанавливает имя корневого каталога пользователей, в котором РНР открывает файлы формата user-name, например: publicjitml.
variables_order = "EGPCS"; иногда указывается "GPC" < /FONT >
Указывает порядок инициализации переменных сценария РНР. Порядок указывается заглавными символами, являющимися сокращениями для соответственно переменных окружения (Environment), переменных, полученных методами GET и POST, затем Cookie, и собственно внутренних переменных РНР (Server Built-in). Инициализация происходит в порядке слева направо, и старые значения заменяются одноименными новыми. Ранее имя этого параметра было gpc_order.
warn_plus_overloading = Off
Выводит предупреждение, если оператор плюс (+) используется в качестве оператора конкатенации строк (вместо оператора «точка»). Полезно для отладки.
y2k_compliance = Off < /FONT >
Разрешает или запрещает поддержку совместимости с браузерами, не способными разрешить проблему 2000 года.
zlib.output_compression = Off < /FONT >
Неявно сжимает весь выводимый текст, посылаемый браузеру, используя библиотеку zlib. Допустимые значения: off, on или размер буфера, используемый для сжатия (по умолчанию 4 Кбайт)
Цветовыделение
Следующие параметры определяют цвета, которыми выделяется синтаксис РНР при использовании функции highlight_file() и подобных ей. Допустимы любые значения цвета, распознаваемые в теге
???>.<
/FONT>
highlight.string = #DDOOOO для строк (красный)
highlight.comment = #FF8000 для комментариев (оранжевый)
highlight.keyword = #007700 для зарезервированных слов (зеленый)
highlight.bg = #FFFFFF цвет фона (белый)
highlight.default = #ООООВВ для обычного кода РНР (синий)
highlight.html = #000000 для обычного текста, не кода (черный) < /FONT >
Безопасный режим
safejnode = Off < /FONT >
Разрешает безопасный режим РНР.
safejnode_exec_dir = string
При исполнении РНР в безопасном режиме функции, запускающие внешние приложения (например: systemO), будут запускать только те из них, которые размещены в указанном каталоге.
safe-mOde_allowed_env_vars = РНР_
Автоматическая установка значений неременных может быть небезопасна, поэтому в данном параметре можно через запятую перечислить те префиксы имен переменных, которые можно автоматически инициализировать в безопасном режиме. При пустой строке это ограничение снимается.
safe_mode protected env vars = LD LIBRARY PATH< /FONT >
В этой строке через запятую перечисляются имена тех переменных среды окружения, которые пользователю запрещено изменять, используя функцию putenv().
disable_functions = string < /FONT >
Блокирует запуск перечисленных через запятую функций. Не зависит от разрешения безопасного режима.
sql. safejnode = Off < /FONT >
Включает безопасный режим для выполнения команд работы с базами данных.
Mail
[mail function]
SMTP = local host/ < /FONT >
Только для Windows: путь DNS или IP-адрес сервера SMTP, используемого PHP для отправки почты функцией mail ().
sendmail_from = me@localhost.com < /FONT >
Только для Windows: обратный адрес отправителя почты (поле From:) по умолчанию.
;sendmail_path = 'sendmail -t < /FONT >
Только для Unix. Почтовая программа, используемая для отсылки писем. В этой строке можно указать полный путь, а также параметры запуска. Обычные варианты в Unix: usr/sbin/sendmail, /usr/1ib/sendmail, /var/qmai1/bin/sendmail.
Отладчик
[Syslog]
define_syslog_variables = Off < /FONT >
Определяет переменные syslog (например, $LOG_PID, $LOG_CRON и т. д.). Обычно параметр блокируется для повышения быстродействия. Во время исполнения можно воспользоваться функцией define_ syslog_variables().
Разрешает или запрещает выдачу предупреждения PHP для каждои ошибки в assert().
;assert.bail = Off < /FONT >
Устанавливает, считать ли значение False в assert() ошибкой.
;assert.call back = О < /FONT >
Вызывает указанную функцию для отладки.
:assert.quiet_eval = 0
Обрабатывает ошибки, содержащиеся в eval(), согласно установкам в error_reporting(). Установка значения этого параметра TRUE и последующий вызов error_reporting(0) будут игнорировать эти ошибки.
Прочие настройки модулей
[bcmath]
bcmath.scale = О < /FONT >
Число десятичных цифр для функций bcmath. [browscap]
Разрешает использовать системную функцию чтения read() вместо функции PHP php_read().
[com]
: com. type! ib_file = < /FONT >
Путь к файлу, содержащему значения GUID, IID, или файлу типа Type Lib. ;com.aTlow_dcom = TRUE < /FONT
>
Разрешает вызовы «распределенного» COM (DCOM).
Настройки модулей баз данных
[ODBC]
uodbc.default_db = string < /FONT >
Источник данных ODBC по умолчанию для функций odbc_connect() и odbc_pconnect(). Параметр еще не реализован.
uodbc.default_user = string < /FONT >
Имя пользователя по умолчанию для функций odbc_connect() и odbc_pconnect(). Параметр еще не реализован.
uodbc.default_pw = string < /FONT >
Пароль пользователя по умолчанию для функций odbc_connect() и odbc_pconnect(). Параметр еще не реализован.
odbc.allow_persistent = On < /FONT >
Допускает или запрещает устойчивые ODBC-подключения.
odbc.check_persistent = On
Проверяет или не проверяет сохранность устойчивых подключений до их использования.
uodbc.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений ODBC на один процесс (значение -1 означает отсутствие ограничений).
uodbc.maxjinks = -1 < /FONT >
Максимальное число подключений ODBC на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
I odbc.defaultlrl = 4096 < /FONT >
Обработка полей типа LONG (возвращает число байтов в переменных). О означает метод passthra. См. функцию odbcJongreadlen().
odbc.defaultbinmode = 1 < /FONT >
Способ обработки двоичных данных. О означает метод passthru, 1 — «как есть», 2 — преобразование в текстовые символы.
См. функцию odbc_binmode().
[MySQL]
параметры defaultjiost, default_user, default_password блокируются ; в безопасном режиме, и вообще их не рекомендуется указывать здесь
mysql.defaultjiost = string < /FONT >
Имя хоста по умолчанию, где должен размещаться сервер MySQL
mysql.default_user = string < /FONT >
Имя пользователя по умолчанию для функций подключения
mysql.default_password = string < /FONT >
Пароль пользователя по умолчанию для функций подключения
mysql.default_socket = < /FONT >
Имя сокета для локальных подключений к MySQL
mysql.default_port = < /FONT >
Номер порта по умолчанию. Если параметр не установлен, то используется (по порядку) значение из переменной $MYSQL_TCP_PORT, либо из файла /etc/services, либо из константы компиляции MYSQL_ PORT (в Win32 только из MYSQL_PORT).
mysql.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к MySQL
mysql.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к MySQL на один процесс (значение -1 означает отсутствие ограничений).
mysql.maxjlinks = -1 < /FONT >
Максимальное число подключений к MySQL на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
[mSQL]
msql.al 1ow_persi stent = On < /FONT >
Допускает или не допускает устойчивые подключения к mSQL.
I msql .max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к mSQL на один \ процесс (значение -1 означает отсутствие ограничений).
msql.maxjlinks = -1 < /FONT >
Максимальное число подключений к mSQL на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
[PostgresSQL]
pgsql.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к Postgres.
pgsql.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к Postgres на один процесс (значение -1 означает отсутствие ограничений).
pgsql .maxjinks = -1 < /FONT >
Максимальное число подключений к Postgres на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
[SESAM]
sesam_oml = string < /FONT >
Имя библиотеки BS2000 PLAM, содержащей загружаемые драйверы SESAM. Требуется для использования функций SESAM. Библиотека BS2000 PLAM должна быть сконфигурирована какACCESS=READ,SHARE=
YES.
sesam_configfile = string < /FONT >
Файл конфигурации приложений SESAM. Необходим для использования функций SESAM. Он должен быть доступен для чтения.
Разрешает или не разрешает совместимость с версиями РНР 3.0. Если совместимость разрешена, РНР автоматически назначает типы результатов согласно типологии Sybase вместо того, чтобы рассматривать их все как строки. Рекомендуется отключать этот параметр.
[Sybase-CT] sybct.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к Sybase-CT. sybct.maxjersistent = -1 < /FONT >
Максимальное число устойчивых подключений к Sybase-CT на один процесс (значение -1 означает отсутствие ограничений).
sybct.max_links = -1
Максимальное число подключений к Sybase-CT на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
sybct.min_server_severity = 10 < /FONT >
Отображает как предупреждения сообщения об ошибках с уровнем, равным или большим чем указанный.
См. функцию sybase_min_server_severity(). sybct.min_client_severity = 10 < /FONT >
Отображает как предупреждения сообщения об ошибках клиентской библиотеки с уровнем, равным или большим чем указанный.
См. функцию sybase_min_client_severity().
Значение 10 обычно блокирует вывод предупреждений.
sybct.login_timeout = 60 < /FONT >
Максимальное время ожидания подключения в секундах (не забывайте также про параметр max_execution_time).
sybct.timeout = < /FONT >
Максимальное время ожидания исполнения операции базы данных подключения в секундах, по умолчанию не ограничено (не i забывайте также про параметр max_execution_time).
sybct.hostname = string < /FONT >
Имя хоста, с которого производится подключение.
См функцию sp_who().
[Informix] ifx.defaultjiost = string < /FONT >
Имя хоста по умолчанию, где должен размещаться сервер Informix (блокируется в безопасном режиме).
ifx.default_user = string < /FONT >
Имя пользователя но умолчанию для функций подключения (блокируется в безопасном режиме).
ifx.default_password = string < /FONT >
Пароль пользователя по умолчанию для функций подключения (блокируется в безопасном режиме).
ifx.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к Informix.
ifx.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к Informix на один процесс (значение -1 означает отсутствие ограничений).
ifx.maxjinks = -1 < /FONT >
Максимальное число подключений к Informix на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
ifx.textasvarchar = О < /FONT >
Возвращает или не возвращает поля TEXT (blob) как нормальные строки (при значении TRUE) в запросах SELECT. Иначе (по умолчанию) необходимо использовать для доступа blob id.
См. также ifx_textasvarchar().
ifx.byteasvarchar = 0 < /FONT >
Возвращает или не возвращает поля BYTE (blob) как нормальные строки (при значении TRUE) в запросах SELECT. Иначе (по умолчанию) необходимо использовать для доступа blob id.
См. также ifx_textasvarchar().
ifx.charasvarchar = О < /FONT >
S1 Удаляет или не удаляет пробелы в конце строк нолей CHAR (fixed-length).
ifx.blobinfile = О < /FONT >
Фактически установка этого параметра (TRUE) принуждает сохранять значения не в памяти, а в файле.
См. также ifx_blobinfile_mode().
ifx.null format = 0 < /FONT >
Возвращает поля NULL как строку "NULL" (при значении TRUE) или же как пустую строку "" (по умолчанию).
См. также ifx_nuTl format().
[MSSQL] mssql.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к MSSQL.
mssql.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к MSSQL на один процесс (значение -1 означает отсутствие ограничений).
mssql. maxj inks = -1 < /FONT >
Максимальное число подключений к MSSQL на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
mssql.min_error_severity = 10 < /FONT >
Минимальный уровень отображаемых сообщений об ошибках.
mssql .nrin_message_severity = 10 < /FONT >
Минимальный уровень отображаемых сообщений, mssql.compatabilityjnode = Off < /FONT >
Длина текстовых строк по умолчанию. Допустимые значения: от О до 2 147 483 647.
;mssql.batchsize = 0 < /FONT >
Размер порций (число записей), возвращаемых запросом. О — все записи запроса возвращаются единовременно.
[Ingres II]
Ingres.allow_persistent = On < /FONT >
Допускает или не допускает устойчивые подключения к Ingres II.
Ingres.max_persistent = -1 < /FONT >
Максимальное число устойчивых подключений к Ingres II на один процесс (значение -1 означает отсутствие ограничений).
ingres.maxjinks = -1 < /FONT >
Максимальное число подключений к Ingres II на один процесс, включая устойчивые (значение -1 означает отсутствие ограничений).
Ingres.default_database = < /FONT >
Устанавливает базу данных по умолчанию. Указывается в строке формата: [nodejid: ]dbname[/srv_c"lass].
ingres. defauU_user = < /FONT >
Устанавливает имя пользователя но умолчанию,
ingres.default_password = < /FONT >
Устанавливает пароль пользователя по умолчанию.
Параметры сессий
[Session] session.auto_start = 0 < /FONT >
Автоматически инициализирует сессию при запуске сценария ('если не O)
session, savejiandler = files < /FONT >
Функция-обработчик для сохранения/восстановления данных. По умолчанию данные сессии сохраняются в файлах.
session.save_path = /tmp < /FONT >
Аргумент, передаваемый в функцию save_handler. Для файлов, в которых сохраняются данные сессий, это каталог их размещения.
session.use_cookies = 1 < /FONT >
Разрешает использовать cookie
session.name = PHPSESSID
Имя сессии ( используется как имя основного cookie, содержащего идентификатор сессии). В имени могут использоваться только алфавитно-цифровые символы.
session.cookie_lifetime = 0 < /FONT >
Время жизни cookie в секундах, при 0 — пока работает браузер
session.cookie_path = < /FONT >
Путь в URL, для которого действителен cookie сессии.
session.cookie_domain = < /FONT >
Домен, для которого действителен cookie.
session.serialize_handler = php
Обработчик сериализации данных, php — стандартный обработчик PHP. Также можно указать wddx.
session.gc_probability = 1 < /FONT >
Процентная вероятность того, что при каждой инициализации сессии будет запускаться процедура «сбора мусора».
session.gcjnaxlifetime = 1440 < /FONT >
Число секунд, по прошествии которых сохраненные данные сессии будут считаться «мусором» и могут быть удалены процессом «сбора мусора».
session.referer_check = < /FONT >
Проверяет или не проверяет значение HTTP Referer (адрес страницы, с которой был осуществлен переход на текущую). Обычно используется для проверки внутренне хранимых URL, содержащих идентификаторы.
session.entropy_length = 0 < /FONT >
Число читаемых из файла байтов.
;session.entropy_file = /dev/urandom < /FONT >
Программа, использующаяся для генерации идентификаторов сессии. Для Unix допустимо использовать /dev/random или /dev/urandom.
;session.entropy_length = 16 < /FONT >
Размер в бантах идентификатора сессий
session.cachejlimiter = nocache < /FONT >
Установка системы кэширования HTTP. Возможные значения: nocache, private, public. Если указывается пустое значение, то клиент использует собственную систему кэширования, заданную в его системе по умолчанию.
session.cache expire = 180 < /FONT >
Время устаревания кэшированных страниц в минутах.
session.use_trans_sid = 1
Использовать автоматическое добавление в ссылки идентификаторов сессии. Для этого РНР должен быть скомпилирован с параметром --enable-trans-sid.
Эта директива особенно полезна для модуля РНР сервера Apache. С ее помощью можно разрешить загрузку дополнительных модулей для одних виртуальных серверов (или каталогов) и запретить для других. Для модуля РНР сервера IIS этот параметр также автоматически блокируется.
Основная причина блокирования этого параметра — безопасность, так как при разрешении динамической загрузки ограничения safe_ mode и open_basedir исчезают. В безопасном режиме этот параметр автоматически блокируется.
extension_dir = < /FONT >
Каталог, в котором размещаются загружаемые модули РНР. Обычно каталог называется extensions.
extension = extensionfilename < /FONT >
Указание модуля, который должен быть загружен при старте РНР. Рекомендуется указывать имя файла без пути. Например, для Windows: extension=msql.cm, а для UNIX: extension= msql.so.< /FONT>
Функции POSIX
Данная группа функций позволяет работать с реализацией интерфейса POSIX.1, соответствующей спецификации IEEE 1003.1. Так как разработка этого модуля еще не завершена, документация по многим функциям находится в стадии разработки.
posix_kill
Посылка процессу сигнала завершения
boo! posixjdll (int pid, int sig)
Возвращает TRUE при успешной посылке сигнала sig процессу с идентификатором pid или FALSE при ошибке.
См. также раздел kill(2) справочной системы man по системе POSIX относительно отрицательных значений идентификаторов процессов и специальных значений pid 0. pjd -In номера сигнала 0.
posix_getpid
Получение идентификатора текущего процесса
int posix_getpid (void )
posix_getppid
Получение идентификатора родительского процесса
int posix_getppid (void )
posix_getuid
Получение ID реального пользователя текущего процесса int posix_getuid (void )
См. также posix_getpwuid().
posix_geteuid
Получение ID эффективного пользователя текущего процесса
int posix_geteuid (void )
См. также posix_getpwuid().
posix_getgid
Получение ID группы реального пользователя текущего процесса int posix_getgid (void )
См. также posix_getgrgid().
posix_getegid
Получение ID группы эффективного пользователя текущего процесса
int posix_getegid (void )
См. также posix_getgrgid().
posix_setuid
Установка ID реального пользователя текущего процесса
bool posix_setuid (int uid)
Для выполнения этой функции необходимо иметь соответствующие привилегии (обычно root). Возвращается TRUE или FALSE — при ошибке.
См. также posix_setgid().
posix_setgid
Установка ID эффективного пользователя текущего процесса bool posix_setgid (int gid)
Для выполнения этой функции необходимо иметь соответствующие привилегии (обычно root). Возвращается TRUE или FALSE — при ошибке. Заметьте, обычно сперва вызывается posix_setgid(), а затем posTX_setuid().
posi_ getgroups
Получение набора группы текущего процесса array posix_getgroups (void )
Возвращает массив, содержании целочисленные групповые идентификаторы текущего процесса.
См. также posix_getgrgid().
posix_getlogin
Получение имени login
string posix_get"login (void )
Возвращает имя (login), от которого был запущен текущий процесс.
См. также posix_getpwnam().
posix_getpgrp
Получение группового идентификатора текущего процесса
int posix_getpgrp (void )
См. также документацию POSIX.1 и раздел getpgrp(2) справочной системы man.
Posix_setsid
Назначение текущего процесса лидером сессии
int posix_setsid (void )
Возвращает идентификатор сессии.
См. также документацию POSIX. 1 и раздел setsid(2) справочной сис-тшы man.
posix _setpgid
Установка идентификатора группы процесса int posix_setpgid (int pid, int pgid)
Присоединяет процесс pid к группе процессов pgid. При ошибке возвращает FALSE.
См. также документацию POSIX.1 и раздел sctsid(2) справочной системы man.
posix_getpgid
Получение идентификатора группы процесса
int posix_getpgid (int pid)
Это не функция POSIX, но она распространена в системах BSD и System V. Если она не поддерживается системой, то РНР всегда будет возвращать FALSE.
posix_getsid
Получение идентификатора sid процесса
int posix_getsid (int pid)
Если pid равен 0, то возвращается идентификатор sid текущего процесса.
Это не функция POSIX, но она распространена в системах BSD и System V. Если она не поддерживается системой, то РНР всегда будет возвращать FALSE.
posix_uname
Получение информации о системе
array posix_uname (void )
Возвращает массив, содержащий следующие элементы:
sysname — название операционной системы (например, Linux);
nodename — имя системы (например, valiant);
release — версию операционной системы (например, 2.2.10);
version — дату создания (например, #4 Tue Jul 20 17:01:36 MEST 1999);
machine — архитектуру системы (например, i586);
domainname — имя домена DNS (например, php.net);
domainname — это расширение GNU, не являющееся частью POSIX.1, поэтому этот элемент доступен только на системах GNU или при использовании библиотеки GNU libc. Posix предупреждает, что формат значений может значительно различаться в разных системах.
posix_times
Получение времени процесса
array posix_times (void )
Возвращает ассоциативный массив строк, содержащих информацию
об использовании ресурсов CPU текущим процессом:
ticks — число тиков часов, прошедших с момента загрузки;
titime — время, расходуемое пользовательской частью текущего процесса;
stime — время, расходуемое системной частью текущего процесса;
cutime — общее время, расходуемое пользовательской частью текущего процесса и его дочерними процессами;
cstime — общее время, расходуемое системной частью текущего процесса и его дочерними процессами.
posix_stermid
Получение имени терминала ;
string posix_ctermid (void )
posix_ ttyname
Определение устройства терминала string posix_ttyname (int fd)
posix_ isatty
Проверка, является ли дескриптор файла терминалом
bool posix_isatty (int fd)
posix_ getcwd
Выяснение пути текущего каталога string posix_getcwd (void )
posix_mkfifo
Создание специального файла fifo (named pipe)
bool posix_getcwd (string pathname, int mode)
posix_getgrnam
Получение информации о группе по имени
array posix_getgrnam (string name)
posix_getgrgid
Получение информации о группе по идентификатору
array posix_getgrgid (int gid)
posix_getpwnam
Получение информации о пользователе по имени
array posix_getpwnam (string username)
Возвращает ассоциативный массив, содержащий информацию о пользователе, имеющем строковое имя, указанное в аргументе username.
Возвращаемый массив содержит следующие элементы:
name — имя пользователя username;
passwd — пароль пользователя в зашифрованном виде (иногда «*»);
uid — числовой идентификатор пользователя;
gid — числовой идентификатор группы пользователя. См. также posix_getgrgid();
gecos — устаревшее значение, но формализованное POSIX, содержащее информацию finger для систем Honeywell. Содержит перечисление через запятую (полное имя пользователя и, не всегда, рабочий и домашний телефон);
dir — абсолютный путь домашнего каталога пользователя;
shell — путь к программной оболочке пользователя по умолчанию.
posix_getpwuid
Получение информации о пользователе по идентификатору
array posix_getpwuid (int uid)
Возвращает ассоциативный массив, содержащий информацию о пользователе, числовой идентификатор, указанный в аргументе uid.
Структура возвращаемого массива аналогична таковому в функции posix_getpwnam().
posix_getrlimit
Получение массива информации об ограничениях ресурсов системы
array posix_getrlimit (void )
Функции сервера Apache
apache_lookup_uri
Запрос URI и получение о нем информации
class apache_lookup_uri (string filename)
Выполняет специальный запрос URI, указанный в аргументе filename. Функция позволяет узнать, как бы поступил сервер, получив соответствующий запрос. Возвращается объект, имеющий следующие свойства:
status — код статуса исполнения HTTP-запроса;
the_request — полный текст HTTP-запроса;
statusjline — строка, комментирующая статус исполнения HTTP-запроса;
В настоящее время функция работает, только если РНР установлен как модуль Apache.
virtual
Выполнение подзапроса Apache
int virtual (string filename)
Выпо.''"яет директиву SSI файлов , обрабатываемую модулем Apache modjndude. Это полезно для включения в текущий файл CGI сценариев или файлов .shtml. Если необходимо включить файл РНР, используйте директивы include() или require().
ascii2ebcdic
Преобразование строки ASCII в EBCDIC
int ascin2ebcdic (string ascii_str)
Функция доступна только в системах, поддерживающих EBCDIC (OS/390, BS2000). Возвращает строку ascii_str, конвертированную в двоичный формат EBCDIC.
См. также обратную функцию ebcdic2ascii().
ebcdic2ascii
Преобразование строки EBCDIC в ASCII
int ebcdic2ascii (string ebcdic_str)
Функция доступна только в системах, поддерживающих EBCDIC (OS/390, BS2000).
См. также обратную функцию ascii2ebcdic().
Использование интерфейса HTTP
Эти функции позволяют отсылать данные браузеру клиента непосредственно на уровне протокола HTTP.
headers_sent
Проверка отсылки заголовков
boolean headers sent (void)
Возвращает TRUE, если заголовки HTTP уже были отосланы; иначе — FALSE.
См. также header().
header
Посылка простого заголовка HTTP
int header (string string)
Функция используется в начале сценария HTML (до вывода прочего текста) для низкоуровневой посылки строк заголовков по протоколу HTTP. Спецификация заголовков HTTP 1.1 (http://www.w3.org/ Г Protocols/rfc2616/rfc2616) определяет их формат и назначение.
Не забывайте, что вывод может происходить также из вложенных файлов, если они были подключены директивой include() или с помощью параметра auto_prepend.
Наиболее общие варианты использования заголовков представлены ниже.
Переадресация. Если браузер получает заюлонок Location, то он пытается загрузить страницу с нового указанного адреса (сервер Apache при этом также получает код статуса REDIRECT).
header ("Location: http://www.p.net/new.php"); echo "Эта страница была перенесена в другое место. Обновите ссылки.": exit;>
Выполнение команды HTTP/ (регистр не важен).
header ("HTTP/1.0 404 Not Found"). // страница не найдена header ("HTTP/1.0 403 Forbidden"): // доступ к этому адресу запрещен
Управление кэшированием (на браузере или прокси-сервере). Следующие четыре команды запрещают кэширование различными способами.
header ("Expires: Mon. 26 Jul 1988 05:00:00 GMT"). // Уже устаоело header ("Last-Modified- " . gmdateC'D. d M Y H:vs") " GMT"): // только что модифицировано header ("Cache-Control: no-cache, must-revalidate"). // HTTP/1.1 header ("Pragma: no-cache"): // HTTP/1.0
См. также headers_sent().
HTTP-аутентификация в PHP
Осуществлять аутентификацию HTTP можно, только если PHP установлен как модуль web-сервера Apache. Для версии CGI и на других серверах (например, IIS) это невозможно. Аутентификация происходит путем посылки (с помощью функции Heatier()) заголовка Authentication Required, что заставляет браузер вывести окно для ввода имени пользователя и его пароля. После того как пользователь вводит эти данные, браузер заново запрашивает страницу, передавая серверу переменные $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE, соответственно со значениями имени пользователя, его пароля и метода аутентификации. В настоящее время поддерживается только аутентификация простого типа «Basic».
См. также функцию Header().
AUTH_USER)) { Header C'WWW-Authenticate: Basic rea)m=\"My RealmV"): Header("HTTP/1.0 401 Unauthorized"): echo "Вы отменили ввод идентификационной информации.\n"; exit: } else { // здесь обычно ".роверяется имя пользователя и пароль echo "Привет $PHP_AUTH_USER."; echo "Вы вели пароль: $PHP_AUTH_PW."; } ?>
Cookies
PHP полностью поддерживает cookies. Cookies — это механизм HTTP для сохранения информации о пользователе на его клиентской машине. Они работают следующим образом:
при загрузке страницы браузером в заголовках передаются cookies (это должно выполняться сценарием РНР);
браузер сохраняет полученные cookies в определенном для них месте (обычно в маленьких файлах);
при загрузке следующей страницы (из того же домена и пути, что и страница, содержавшая cookies) браузер возвращает те cookies, которые у него имеются.
При получении cookies PHP преобразовывает их в переменные, как и переменные, полученные HTTP методами GET и POST (они также сохраняются в глобальном массиве $HTTP_COOKIE_VARS[]). Таким образом можно ассоциировать определенную информацию с конкретным пользователем (а реально его браузером) и передавать данные между страницам» одного сайта.
Например, так можно сохранять настройки пользователя для сайта или для электронных магазинов, информацию о том, что находится в «покупательской корзине» пользователя. В противном случае пришлось бы передавать всю эту информацию (часто достаточно объемную) в строке адреса URL. Имеется также альтернативный и часто более предпочтительный вариант — использование сессий (см. ниже).
Не забывайте, что cookies являются частью заголовков HTTP, и передавать их следует до того, как началась передача текста страницы (а также до того, как функцией header() будут посланы обычные заголовки). Таковы правила HTTP. Стоит отметить, что для одной страницы не может быть установлено более 20 cookies. А также, что значения cookies можно будет получить только при загрузке следующей страницы удалять cookies нужно с теми параметрами, с которыми они были созданы.
setcookie
Посылка cookie /
int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure])
Функция посылает переменную cookie в заголовке HTTP. Все аргументы, кроме имени name, необязательны (если какие-то указывать не требуется, то тогда их значением может быть пустая строка "" для строковых аргументов и 0 для числовых). Если у браузера уже имелся cookie с таким именем, он будет заменен новым.
В аргументе value можно указать значение, которое необходимо сохранить. Время, до которого браузер должен хранить у себя cookie, указывается в аргументе expire (в формате Unix time, возвращаемом функциями time() или mktirae()). Если в аргументе secure указывается ненулевое значение, то cookie будет передаваться в зашифрованном виде через протокол HTTPS.
В аргументах path и domain можно указать, страницам из каких каталогов какого домена необходимо возвращать значения cookies.
Следующие примеры устанавливают cookies:
setcookie ("TestCookiel". "Test Value"): setcookie ("TestCooHeZ1 , $value.fime()+3GOO); /* устаревает через час */ setcookie ("TestCook'eS". $value.time()+3600. "/-rasmus/". " utoronto.ca". 1):
Удалить cookies из примера выше можно следующим образом:
setcookie ("TestCookiel"): // set the expiration date to one hour ago setcookie ("TestCookie2". "". timeO - 3600): // время уже прошло setcookie ("TestCookleS". "". timeO - 3600. "/-nasmus/". " utoronto.ca". 1);
Можно сохранять в одном cookie одномерный массив (но устанавливать значение каждого элемента нужно по отдельности):
setcookie ("cookie[three]". "cookie_three"). setcookie ("cookie[two]". "cookie_two"): , setcookie ("coohe[one]". "cookie_one"). // проверим получение на следующей странице ] if (isset (Scookie)) { while (list ($name. Svalue) = each ($cookie)) { I echo "Sname == $vatue \n": } }
Документацию Netscape, описывающую cookies, можно найти по адресу: http://www.netscape.com/newsref/std/cookie_spec.html
Microsoft Internet Explorer 4 (c Service Pack 1) некорректно работает с cookies, имеющими установленный третий параметр. Netscape Communicator 4.05 и Microsoft Internet Explorer 3.x некорректно работают с cookies с не установленными третьим и четвертым параметрами.
Клиентский модуль Satellite CORBA
Этот модуль используется для работы с удаленными объектами архитектуры CORBA. Добавьте в файл php.ini строку idl_directory=, в которой указан путь к файлам описания интерфейсов IDL.
OrbitObject
Класс доступа к объекту CORBA
new OrbitObject (string ior)
В аргументе ior указывается строка идентификатора удаленного объекта IOR (Interoperable Object Reference), обычно включающая его имя и адрес.
# Простой файл описания интерфейса (IDL) объекта interface Mylnterface { voTd Setlnfo (scnng info): string Getlnfo(): attribute int value: } $obj = new CrDitObject ($ior). $obj->Set!nfo ("A 2GooD object"): echo $obj->GetInto(): $obj->value = 42. echo $obj->value: ?>
OrbitEnum
Класс перечисления CORBA
new OrbitEnum (string id)
В аргументе id указывается строка имени «перечисления», которая может представлять простое его имя (например, "МуЕпит") пли быть полным идентификатором депозитария (например, "IDL:MyEnum:1.0").
# Простой файл описания интерфейса (IDL) перечислителя enum MyEnum { a.b.c.d.e -N ) \ !*л ! Senum = new OrbitEnum ("MyEnum"); echo $enum->a./* выводит О */ echo $enurn->c;/* выводит 2 */ echo $enum->e;/* выводит 4 */ ?>
OrbitStruct
Класс структуры CORBA
new OrbitStruct (string id)
В аргументе id указывается строка имени структуры, которая может представлять простое ее имя (например, "MyStnict") или быть полным идентификатором депозитария (например, "IDL:MyStruct:1.0").
# Простой файл описания интерфейса (IDL) структуры struct MyStruct ( short shortvalue: string stnngvalue. }: interface Somelnterface { void SetValues (MyStruct values); MyStruct GetValuesO: } $obj - new OrbitObject ($ior); $inmal_values = new OrbitStruct ("IDL:MyStruct:1.0"); $imtial_values->shortvalue = 42. $1n!t1al va1ues->str1ngvalue = "HGTTG". $obj->SetValues ($imtnal_values); Svalues =• $obj->GetValues(); echo $values->shortvalue: echo $values->stnngvalue: ?>
satellite_caught_exception
Проверка исключения прошлой функции bool satellite_caught_exception ()
Возвращает TRUE, если при выполнении предыдущей функции в никло исключение.
# Простой файл описания интерфейса (IOL) exception OutOfCheeseError { int parameter; } interface Anotherlnterface { void AskWhyO raises (OutOfCheeseError): } OrbntObject ($тог); $obj->Askwhy(). if (satellnte_caught_exception()) { if ("IDL-.OutOfCheeseError 10" == satellite_exceptionjd()) { Sexception = satellite_exception_value(); echo $exception->parameter; ) } ?>
satellite_exception_id
Получение идентификатора депозитария последнего исключения
string satellite_exception_id ()
Возвращает строку идентификатора (например, "IDL:MyException:1.0".)
См. также sateTlite_caught exception().
satellite_exception_value
Получение структуры последнего исключения
OrbitStruct satellite_exception_value()
См. также sateTlite_cauglit_exception().
Отслеживание и обработка ошибок
РНР имеет следующие типы ошибок и предупреждений:
Значение
Константа
Описание
1
E_ERROR
Фатальная ошибка времени исполнения
2
E_WARNING
Предупреждение времени исполнения
4
E_PARSE
Сообщение интерпретации времени исполнения
8
E_NOTICE
Простое сообщение времени исполнения
16
E_CORE_ERROR
Фатальная ошибка при инициализации РНР
32
E_CORE_WARNING
Предупреждение инициализации
64
E_COMPILE_ERROR
Фатальная ошибка компиляции
128
E_COMPILE_ WARNING
Предупреждения компиляции
256
E_USER_ERROR
Ошибки, определяемые пользователем
512
E_USER_WARNING
Предупреждения, определяемые пользователем
1024
E_USER_NOT1CE
Сообщения, определяемые пользователем
2047
E_ALL
Все перечисленные сообщения
Указанные значения в виде чисел или консгант можно комбинировать, формируя битовую маску ошибок, о которых необходимо сообщать в ходе исполнения сценария. Для комбинирования используются битовые операторы, но в конфигурационном файле php.ini ' распознаются только «|», «-», «!» и <<&>>.
В PHP 4 по умолчанию разрешены сообщения вида E_ALL & -EJJOTICE, то ость сообщаться должно все, кроме обычных сообщений. Можно переопределить эту установку параметром файла конфигурации еггог_ reporting (ее также можно указывать в файлах конфигурации сервера Apache); а во время исполнения — функцией error_reporting().
Если при вызове функции перед ее именем указать символ «@», то в случае возникновения ошибки в этой функции сообщение о нем выдаваться не будет.
В настоящее время оператор игнорирования ошибок блокирует даже выдачу сообщений о критических ошибках, при возникновении которых сценарий досрочно завершается.
Если разрешен параметр конфигурации track_errors, то сообщение об ошибке сохраняется в глобальной переменной $php_errormsg.
«?php // определенный пользователем обработчик ошибок function userErrorHandler (Serrno. Serrmsg. Sfilenamp Slirenum. Svarb) { $dt = date ("Y-m-d H i:s (Т)"). // время возникновения ошибки Serrortype = array ( 1 => "Error". 2 => "Warning". 4 => "Parsing Error". 8 => "Notice". 16 => "Core Error". 32 => "Core Warning". 64 => "Compile Error". 128 => "Compile Warning". 256 => "User Error". 512 => "User Warning". 1024=> "User Notice" ); $err .= "время ($dt). номер ошибки ($errno). ": $err .= "тип ошибки C'.$errortype[$errno]."): ": $err = "\"$errmsg\", файл \"$filename\". строка (". $err .= $linenum.")\n"; I $user_errors - array (E_USER_ERROR. E_USER_WARNING. E_USER_NOTICE): if (in_array($errno. $user_errors)) echo $err; // выдать сообщения для ошибок пользователя // сохранить событие ошибки в системном журнале error_log($err. 3. "/usr/local/php4/error.log"): } // установить уровень контроля ошибок и обработчик error_reporting(0) : // не выводить сообщения РНР $old_error_handler = set_error_handler ("userErrorHandler"); // неопределенная константа вызывает предупреждение $t = _NOT_DEFINED_CONSTANT. tngger_error("Mos ошибка". E_USER_ERROR); tngger_error ("Moe предупреждение". E_USER_WARNING): ?>
Функции обработки ошибок
errorjog
Посылка сообщения об ошибке
int error_log (string message, int message_type [, string destination [, string extra_headers]])
Сообщение, посылаемое этой функцией, может быть направлено в журнал системных сообщений web-сервера, порт TCP или в файл.
В первом аргументе, message, указывается само содержание сообщения; во втором, messagejtype — куда оно должно быть направлено. Назначение обозначается следующими значениями:
0 — сообщение заносится в системный журнал событий (файл) согласно установке параметра конфигурации error_log;
1 — сообщение отправляется по электронной почте, по адресу, указанному в аргументе destination. Это единственный тип сообщения, использующий четвертый параметр, extrajieaders, в котором можно указать дополнительные заголовки (как в функции Mail());
2 — сообщение посылается через подключение отладки. Это возможно только в случае, если параметр удаленной отладки был разрешен в файле конфигурации. Для этого также должен быть определен адрес хоста (имя или его адрес IP) и порт сокета, который будет принимать сообщения отладки; это можно указать в аргументе destination или параметрах конфигурации;
3 — message добавляется в конец файла destination.
Возможные варианты применения функции:
if (!0ra_l_ogon (Susername. Spassword)) { erroMog ("Сервер Oracle недоступен!". О). } if (!($foo = allocate_new_foo()) { rroMog ("Нельзя выделить FOO!". 1. "operator@mydomain.com"). } // other ways of calling error_log(): errorjog ГУ нас ошибка!". 2. "127.0.0 1.7000"); rrorjog ("У нас ошибка1". 2. "loghost"); eri~or_loq ("У нас ошибка!". 3. "/var/tmp/my-errors.log"):
error_reporting
Установка видов сообщаемых ошибок
int errorj-eporting ([int level])
Возвращает предыдущую установку типа сообщаемых ошибок; если указан аргумент, то заново переопределяет ее. В аргументе можно указывать константу, число или битовую маску. Старайтесь использовать константы вместо численных значений, чтобы сохранить совместимость с будущими версиями РНР.
errorj-eporting (2039). // в РНР 4 эквивалент E_ALL " EJIOTICE error_reporting (E_ALL * E_NOTICE); // установка по умолчанию error_reporting(0): // отключить сообщения об ошибках errorj-eporting (EJRROR E_WARNING | E_PARSE): /* Общие ошибки выполнения */ error j-eporting (EJRROR | E_WARNING | E_PARSE | EJIOTICE); /* также сообщать о неизвестных переменных */ error_reporting (E_ALL). /* сообщать все ошибки */
set_error_handler
Установка пользовательского обработчика ошибок
string set_error_hand1er (string error_handler)
Функция возвращает имя функции, ранее определенной в качестве обработчика ошибок (или FALSE при ошибке), и устанавливает, в качестве нового обработчика, функцию с указанным в аргументе еггог_ handler именем.
Обычно пользовательский обработчик ошибок работает в паре с функцией tngger_error(), генерирующей ошибку; это может быть использовано (подобно аналогичной конструкции работы с исключениями в С) для освобождения выделенных ресурсов (например, удаления созданных файлов), если сценарий не может нормально завершиться.
Функция, устанавливаемая в качестве обработчика ошибок, должна принимать пять параметров (три последних являются дополнительными и могут не обрабатываться):
код ошибки;
строку, описывающую ошибку;
имя сценария, в котором произошла ошибка;
номер строки сценария, содержащей ошибку;
контекст (массив, содержащий значения переменных, в момент-возникновения ошибки).
\n": break: case WARNING: echo "Предупреждение [Serrno] Serrstr \n"; break: default: echo "Неизвестный тип ошибки: [Serrno] $errstr \n"; break; } } // функция для проверки обработки ошибок (масштабирование массива) function scale_by_log (Svect. Sscale) { if ( hs_numenc (Sscale) || Sscale <= 0 ) trigger_error("вычислить log(x). для x <= 0 нельзя. ". "(x = Sscale)". FATAL), if (hs_array(Svect)) { trigger error("Требуется массив ". ERROR); return null: } for ($1=0; $i{ if (!is_numenc($vect[$i])) thgger_error( "Элемент (SI) не число, и его значением". " считается О". WARNING); $temp[Si] = log(Sscale) * $vect[Si]: } return Stemp: } // установить пользовательский обработчик ошибок Sold_error_handler = set_error_handler ("myErrorHandler"); Sa = array(2.3."foo".5.5.43.3.21 11); pnnt_r(Sa). Sb = scale_by_log(Sa. M_PI); // здесь выдается предупреждение echo "Массив, масштабированный на логарифм(Пи): "; pnnt_r($b): $с = scale_by_log("not array".2 3); // здесь ошибка var_dump($c). $d = scale_by_log($a. -25) .// здесь критическая ошибка echo "Продолжение сценария .": ?>
При выполнении сценария вывод будет следующим:
Array ( )[0] => 2 [1] => 3 [2] => too [3] => 5 5 [4] => 43 3 [5] <=> 21 11 ) Прелупреждение [1024] Элемент (2) не число. v его значением считается 0 Массив, масштабированный на логарифм(Пи) Атау ( [0] => 2.2894597716988 [1J => 3.4341896575482 [2] »> О [3] => 6 2960143721717 [4 ] => 49 566804057279 [5] => 24 165247890281 ) •Ф>Ошибка Г512] Требуется массив
NULL Критическая ошибка [256] вычислить log(x) для х <= 0 нельзя, (х --- -2 5) в строке 37. файла. Е-\ooo\php39.php3. РНР 4.0.5 (WINNT)
Aborting. .
Не забывайте, что при установке пользовательского обработчика ошибок стандартный обработчик РНР не исполняется. Установки еггог_ reporting() также не будут иметь эффекта, и пользовательский обработчик должен уметь обрабатывать все виды ошибок (значение еггог_ reporting() можно выяснить и действовать соответственно). Заметьте, что код ошибки будет равен 0, если ошибка возникла в функции, выоод ошибок для которой был блокирован оператором «@».
Также помните, что завершать сценарий в обработчике необходимо t явно (например, с помощью функции сhе()), если, конечно, в этом есть необходимость. Если обработчик ошибок завершается с помощью return, то выполнение сценария продолжается с того места, в котором возникла ошибка (то есть исполняются инструкции, которые следуют за той инструкцией, в которой возникла ошибка).
См. также: error_reporting(), restore_error_handier(), trigger_error(), user_error()
error_reporting
Установка видов сообщаемых ошибок
int errorj-eporting ([int level])
Возвращает предыдущую установку типа сообщаемых ошибок; если указан аргумент, то заново переопределяет ее. В аргументе можно указывать константу, число или битовую маску. Старайтесь использовать константы вместо численных значений, чтобы сохранить совместимость с будущими версиями РНР.
errorj-eporting (2039). // в РНР 4 эквивалент E_ALL " EJIOTICE error_reporting (E_ALL * E_NOTICE); // установка по умолчанию error_reporting(0): // отключить сообщения об ошибках errorj-eporting (EJRROR E_WARNING | E_PARSE): /* Общие ошибки выполнения */ error j-eporting (EJRROR | E_WARNING | E_PARSE | EJIOTICE); /* также сообщать о неизвестных переменных */ error_reporting (E_ALL). /* сообщать все ошибки */
set_error_handler
Установка пользовательского обработчика ошибок
string set_error_handler (string error_handler)
Функция возвращает имя функции, ранее определенной в качестве обработчика ошибок (или FALSE при ошибке), и устанавливает, в качестве нового обработчика, функцию с указанным в аргументе еггог_ handler именем.
Обычно пользовательский обработчик ошибок работает в паре с функцией tngger_error(), генерирующей ошибку; это может быть использовано (подобно аналогичной конструкции работы с исключениями в С) для освобождения выделенных ресурсов (например, удаления созданных файлов), если сценарий не может нормально завершиться.
Функция, устанавливаемая в качестве обработчика ошибок, должна принимать пять параметров (три последних являются дополнительными и могут не обрабатываться):
код ошибки;
строку, описывающую ошибку;
имя сценария, в котором произошла ошибка;
номер строки сценария, содержащей ошибку;
контекст (массив, содержащий значения переменных, в момент-возникновения ошибки).
\n": break: case WARNING: echo "Предупреждение [Serrno] Serrstr \n"; break: default: echo "Неизвестный тип ошибки: [Serrno] $errstr \n"; break; } } // функция для проверки обработки ошибок (масштабирование массива) function scale_by_log (Svect. Sscale) { if ( hs_numenc (Sscale) || Sscale <= 0 ) trigger_error("вычислить log(x). для x <= 0 нельзя. ". "(x = Sscale)". FATAL), if (hs_array(Svect)) { trigger error("Требуется массив ". ERROR); return null: } for ($1=0; $i{ if (!is_numenc($vect[$i])) thgger_error( "Элемент (SI) не число, и его значением". " считается О". WARNING); $temp[Si] = log(Sscale) * $vect[Si]: } return Stemp: } // установить пользовательский обработчик ошибок Sold_error_handler = set_error_handler ("myErrorHandler"); Sa = array(2.3."foo".5.5.43.3.21 11); pnnt_r(Sa). Sb = scale_by_log(Sa. M_PI); // здесь выдается предупреждение echo "Массив, масштабированный на логарифм(Пи): "; pnnt_r($b): $с = scale_by_log("not array".2 3); // здесь ошибка var_dump($c). $d = scale_by_log($a. -25) .// здесь критическая ошибка echo "Продолжение сценария .": ?>
При выполнении сценария вывод будет следующим:
Array ( )[0] => 2 [1] => 3 [2] => too [3] => 5 5 [4] => 43 3 [5] <=> 21 11 ) Прелупреждение [1024] Элемент (2) не число. v его значением считается 0 Массив, масштабированный на логарифм(Пи) Атау ( [0] => 2.2894597716988 [1J => 3.4341896575482 [2] »> О [3] => 6 2960143721717 [4 ] => 49 566804057279 [5] => 24 165247890281 ) •Ф>Ошибка Г512] Требуется массив
NULL Критическая ошибка [256] вычислить log(x) для х <= 0 нельзя, (х --- -2 5) в строке 37. файла. Е-\ooo\php39.php3. РНР 4.0.5 (WINNT)
Aborting. .
Не забывайте, что при установке пользовательского обработчика ошибок стандартный обработчик РНР не исполняется. Установки еггог_ reportingO также не будут иметь эффекта, и пользовательский обработчик должен уметь обрабатывать все виды ошибок (значение еггог_ reportingO можно выяснить и действовать соответственно). Заметьте, что код ошибки будет равен 0, если ошибка возникла в функции, выоод ошибок для которой был блокирован оператором «@».
Также помните, что завершать сценарий в обработчике необходимо t явно (например, с помощью функции сhе()), если, конечно, в этом есть необходимость. Если обработчик ошибок завершается с помощью return, то выполнение сценария продолжается с того места, в котором возникла ошибка (то есть исполняются инструкции, которые следуют за той инструкцией, в которой возникла ошибка).
См. также: error_reporting(), restore_error_handier(), trigger_error(), user_error()
restore_error_handler
Восстановление предыдущего обработчика ошибок
void restore_error_handler (void)
Устанавливает в качестве функции обработчика ошибок ту, котораябыла таковой до последнего вызова функции set_error_handler(). Предыдущим обработчиком может быть ранее установленный нользовательский обработчик или встроенный обработчик PUP.
См. также: errorj-eporting(), set_error_handler(), trigger_error(), user_ error().
trigger_error
Генерация ошибки
void trigger_error (string errorjnsg [, int error_type])
Явно вызывает функцию, установленную для обработки ошибок, и обычно используется в паре с обработчиком ошибок (см.: set_ error_handler()). Функция способна генерировать только пользовательские типы ошибок (семейство констант EJJSER), и по умолчанию, если не указан тип ошибки error_type, он считается E_USER_NOTICE.
Возможно конструировать сложные конструкции генерации и обработки ошибок и исключительных ситуаций.
if (assert ($divisor == 0)) trigger_error ("Нельзя делить на 0 ". E_USER_FRROR)
См. также: error_reporting(), set_error_handler(), restore_error_handler(), user_error().
user_error
Синоним функции trigger_error()
void user_error (string error_msg [, int error_type])
Параметры и информация РНР
phpinfo
Вывод всей информации РНР в формате HTML int phpinfo ([int what])
Выводимая информация включает: параметры компиляции РНР и его переменные, дополнительные модули, версии, информацию сервера и системы, пути значения конфигурации, параметры вызова сценария, лицензию РНР.
Для сокращения объема выводимой информации можно указать один из следующих разделов what (если он не указывается, то подразумевается INFO_ALL):
INFO_GENERAL;
INFO_CREDITS;
INFO_CONFIGURATION;
INFO_MODULES;
INFOJNVIRONMENT;
INFO_VARIABLES;
INFO_LICENSE;
INFO_ALL
См. также: phpversion(), phpcredits(), php_logo_guid().
phpversion
Получение версии PHP string phpversion (void)
Возвращает строку, содержащую название версии интерпретатора РНР.
// выводит например. 4.0 5rel-dev' echo phpversion():
См. также: phpinfo(), phpcredits(), php_logo_guid().
phpcredits
HTML-распечатка разработчиков РНР
void phpcredits (int flag)
Выводит информацию о создателях и их вкладе в разработку пакета РНР.
phpcredits(CREDITS_GENERAL):
Флаги можно комбинировать следующим образом:
phpcredits(CREDITS_GROUP + CREOITS_DOCS + CREDITSJULLPAGE).
CREDITS_ALL — полный HTML-листинг;
CREDITS_DOCS — список разработчиков документации;
CREDITS_FULLPAGE — обычно используется в комбинации с другими флагами. Выбирает вариант, подготовленный для распечатки;
CREDITSJ3ENERAL - общая разработка языка РНР 4.0 и SAPI;
CREDITS_GROUP — список разработчиков ядра;
REDITS_MODULES — список модулей расширения и их авторов;
CREDITS SAPI — список разработчиков РНР модуля API сервера.
См. также: phpinfo(), phpversion(), php_logo_guid().
php_sapi_name
Получение типа интерфейса между web-сервером и РНР
string php_sapi_name(void);
Возвращает строку, содержащую строчными буквами тип интерфейса. Для CGI РНР, это будет строка "cgi", для mod_php под Apache -"apache" и т. п.
$sapi_type - php_sapi_name(). if ($sapi_type == "cgi") print "Это CGI PHP\n". else print "Это не CGI PHP\n":
php_uname
Определение операционной системы string php_uname(void):
Возвращает строку, содержащую название операционной системы, например «Windows NT 5.0 build 2195».
if (substr(php_uname(). 0. 7) != "Windows") { die("3TOT сценарий должен выполняться в Windows.\n"); }
ini_set
Изменение параметра конфигурации
string ini_set (string varname, string newvalue)
Устанавливает для указанного параметра varname значение newvalue. При успехе возвращает прежнее значение; при ошибке - FALSE.
См. также: ini_alter(), ini_get(), ini_restore().
ini_alter
Синоним функции ini_set
string ini_alter (string varname, string newvalue).
ini_get
Получение значения параметра конфигурации string ini_get (string varname)
Возвращает текущее значение параметра с именем varname. Эта функция позволяет получить все доступные РНР параметры. При ошибке возвращает FALSE.
См. также: ini_alter(), ini_restore(), ini_set().
ini_restore
Восстановление значения параметра конфигурации
stnng ini_restore (string varname)
Устанавливает значение параметра varname в первоначальное.
echo ini_set("precision". 20). im_get("precision"), тm_restore("precision"), im_get("precision"); // Обычно выводит 14 20 14
См. также: ini_alter(), ini_get(), ini_set().
get_cfg_var
Определение значения параметра из файла php.ini
string get_cfg_var (string varname)
Заметьте, в отличие от функции ini_get() возвращается не текущее значение параметра, а то, которое содержится в файле конфигурации. Эта функция также не возвращает прочие параметры (например, из конфигурации самого сервера).
При ошибке возвращает FALSE.
getenv
Получение значения переменной окружения
string getenv (string varname)
При ошибке возвращает FALSE.
$тр = getenv ("REM01E_ADDR"); // ip адрес пользователя
Список переменных окружения выдается функцией phpinfo(). Список этих переменных также определяется спецификацией CGI (http:// hoohoo.ncsa.uiuc.edu/cgi/). Функция не работает в модуле PHP ISAPI.
putenv
Установка переменной окружения
void putenv (string setting)
putenv ("UNIQID=$umqid"). < /FONT>
get_magic_quotes_gpc
Получение текущего значения параметра magic_quotes_gpc.
long getjnagic_quotes_gpc (void)
Возвращается: 0 для Off, 1 для On. См. главу «Файл конфигурации».
См. также: get_magic_quotes_runtime(), set_magic_quotes_runtime().
getjnagic_quotes runtime
Получение текущего значения параметра magic_quotes_runtime
long get_magic_quotes_runtime (void)
Возвращается: 0 для Off, 1 для On. См. главу «Файл конфигурации».
См. также: getjnagic_quotes_gpc(), setjnagic_quotes_runtime().
set_magic_quotes_runtime
Установка текущего значения параметра magic quotes runtime long set_magic_quotes_runtime (int new_setting)
В аргументе new_setting указывается: О для Off, 1 для On. См. главу «Файл конфигурации».
См. также: get_magic_quotes_gpc(), getjnagic_quotes_runtime().
phpjogo_guid
Получение GUID логотипа PHP
string php_logo_guid (void)
Возвращает, например, PHPE9568F34-D428-lld2-A769-OOAA001ACF42.
См. также: phpinfo(), phpversion(), phpcredits()
zend_logo_guid
Получение GUID логотипа Zend string zend_logo_guid (void)
Информация сценария PHP
define
Определение именованной константы
int define (string name, mixed value [, int case_insensitive])
Определение именованной константы сходно с определением переменной, но:
константы не имеют знака $ перед своим именем;
значения констант доступны в любом месте сценария;
константы невозможно переопределить или удалить;
константам можно присваивать только скалярные значения.
Имя определяемой константы указывается в аргументе name, а значение — в value.
При указании третьего аргумента со значением 1 имя константы становится нечувствительным к регистру. В ином случае регистр учитывается, то есть: константы CONSTANT и Constant будут представлять различные значения.
define ("CONSTANT". "Hello world "). echo CONSTANT: // outputs "Hello world." ?>
Возвращается TRUE или FALSE при ошибке (например, если константа уже была определена).
См. также: definedO и раздел «Константы».
defined
Проверка существования константы
int defined (string name)
Возвращает TRUE, если константа с именем, указанным name, была определена; иначе FALSE. /
{ // Note that it should be quoted echo CONSTANT; // } ?>
См. также: defineO и раздел «Константы».
get_required_files
Определение списка файлов, подключенных директивами require_once()
array get_required_files (void)
Возвращает ассоциативный массив имен файлов. Индексами будут аргументы, указанные в директивах require_once(), без расширения .рhр.
("local.php"), require_once (". /inc/global.php"): for ($1=1; $1<4; $1++) include "util".$i "php". echo "Файлы Required_once "; print_r (get required_files()); echo "Файлы Included_once: "; pnnt_r (get_included_tiles()): ?>
Приведенный пример должен вывести (подразумевается существование файлов):
Файлы Reqirreconce: Array ( [Lосаl] =-- local chn . ./inc/vi. bal] -=> /full/path/to/inc/giobal.php ч Файлы Included once- Array ( Cut-ill] => ut' i1 php CutiVI => uti V php [ut
См. также: require_once(), include_once(), getjncluded_files().
get_included_files
Определение списка файлов, подключенных директивами include_once()
array get included_flies (void)
Функция действует аналогично get_required_files ().
См. также: require_once(), inc1ude_once(), get_required_files().
getrusage
Определение расходования ресурсов
array getrusage ([int who])
Это интерфейс одноименной системной команды. Возвращается ассоциативный массив (см. системную документацию). Если указывается аргумент со значением 1, то происходит вызов типа RUSAGE_ CHILDREN (ресурсы, потребляемые дочерними процессами). В некоторых системах (например, Windows) функция может не работать.
$dat = jetftibdye() . echo $dat["ru_ns.vap"J: # number of swaps echo $datL"ru_najTlt"]: # number of page faults echo $ddt["r''.'.'ti!re U'_ser"|; # user time used (seconds) echo Idat["ru_utirrie U_usec"]: # user time used (microseconds)
get_current_user
Определение имени владельца текущего сценария PHP
string get_current_user (void)
Обычно это имя того пользователя, который запускает сценарий, для серверного модуля — того, кто запускает сервер.
См. также: getmyuid(), getmypid(), getmyinode() и getlastmod().
getmyuid
Определение DID владельца сценария PHP
Int getmyuid (void)
Возвращает номер-идентификатор пользователя или FALSE при ошибке.
См. также: getmypid(), get_current_user(), getmyinode() и getlastmod().
getmyinode
Определение номера inode текущего сценария PHP
int getmyinode (void)
Функция не работает в Windows.
При ошибке возвращает FALSE.
См. также: getmyuid(), get_current_user(), getmypid() и getlastmod().
getmypid
Определение дескриптора процесса PHP
int getmypid (void)
Возвращает системный номер или FALSE при ошибке.
См. также: getmyuid(), get_current_user(), getmyinode() и getlastmod().
getlastmod
Определение времени последней модификации страницы
int getlastmod (void)
Возвращает время последней модификации текущей страницы (или FALSE при ошибке) в формате «Unix timestamp», которое затем может быть передано в функцию date().
// выводит, например: 'Last modified: March 04 1998 20:43:59.' echo "Last modified: ".date ("F d Y H:i:s ". getlastmod()).
См. также: date(), getmyuid(), get_current_user(), getmyinode() и getmypid().
Поддержка СОМ для Windows
Эти функции доступны только для Windows версий интерпретатора РНР1,
Поскольку технология СОМ предназначена для реализации объектного интерфейса, то для работы с компонентами СОМ предпочтительнее использование объектного интерфейса, имеющегося в РНР (вместо непосредственного применения функций).
СОМ объект можно создать, вызвав конструктор СОМ с оператором new.
$xcl = new COM("fxcel.sheet");
Если необходимо создать удаленный компонент (DCOM), то во втором дополнительном аргументе можно указать адрес сервера, на котором он должен создаваться (для этого должен быть разрешен параметр конфигурации com.al"low_dcom = TRUE). Доступ к свойствам и методам компонента можно осуществлять гак:
$xcl->Applicat"ion->Visible = 1; // показать окно echo $xcl->Application->Version, // вывести номер версии $xcl->Worksheets->Add: // добавить лист Sell = $xcl->Activesheet->Cells(3.2): // выбрать ячейку $cll->Activate(): // выделить ее $cll->Value * "АА", // ввести значение $cll->Font->Bold = True; // выделить жирным шрифтом
com_ load
Создание новой ссылки на компонент СОМ
string com_load (string module name [, string server name])
Создает новый компонент COM (если он не был создан ранее) и возвращает ссылку на него. При ошибке возвращает FALSE.
com_invoke
Вызов метода объекта СОМ
mixed com_invoke (resource com_object, string functionjiame [, mixed function parameters. ...])
При необходимости параметры вызова метода functionjiame передаются в третьем и последующих аргументах. Функция возвращает значение, возвращаемое методом, или FALSE — в случае ошибки.
com_propget
Синоним функции comjjet
mixed com_propget (resource com_object, string property)
com_get
Получение значения свойства компонента COM
mixed com_get (resource com_object, string property)
Возвращает значение свойства property обьекта com_object или FALSE — в случае ошибки.
com_propput
Синоним функции com_set
void com_propput (resource com_object, string property, mixed value)
com_propset
Синоним функции com_set
void com_propset (resource com_object, string property, mixed value)
com_set
Присвоение значения свойству компонента COM
void com_set (resource com_object, string property, mixed value)
Присваивает значение value свойству property объекта com_object. Возвращает TRUE, если операция прошла успешно, или FALSE в случае ошибки.
Разделяемая память
Данный набор функций позволяет РНР создавать, удалять, читать и записывать данные в разделяемые блоки памяти UNIX. С помощью разделяемой памяти можно осуществлять глобальный обмен данными между приложениями. В системах Windows эти функции не работают, так как там не поддерживается разделяемая память1. Для использования этих функций необходимо скомпилировать РНР с параметром — enable-shmop. В версиях РПР 4.0.3 и ниже эти функции имели префикс shm_.
' Sshmjd = shmop_open (0xff3. "с". 0644. 100) if('$shmjd ) { echo "Couldn't create shared memory segment\n": } $shm_size = bhmop_size($shmjd): echo "Был создан SHM Block размером: ",$shm_size. "\n". $shm_bytes_wntten = shmop_write ($shffl_i(J. "my shared memory block", 0); if($shm_bytes_wntten = strlenC'my shared memory block")) { echo "Невозможно записать все данные\n". } $my_stnng = shmop_read($shmjid. 0. $shm_size): if(!$my_stnng) { echo "Невозможно прочитать даннь:е\n". } echo "Данные в блоке: ". $my_stnng. "\n": if(!shmop_delete(Ishm_1d)) { echo "Невозможно удалить блок памяти". } shmop_close($shin_id): ?>
shmop_open
Создание или открытие блока разделяемой памяти
int shmop_open (int key, string flags, int mode, int size)
В аргументе key указывается системный идентификатор блока; во втором аргументе, flags, указывается вид операции:
"а" — открыть доступ к уже существующему блоку (IPC_EXCL);
"с" — создать новый блок (IPC_CREATE).
Если блок создастся, то в третьем и четвертом аргументах передаются соответственно: права доступа к нему (обычно в восьмеричном представлении) и размер в байтах. Если же блок открывается, то в третьем и четвертом аргументах следует передавать значение 0.
В случае успеха функция возвращает дескриптор блока, используе- | мый в последующих операциях с ним.
shmop_size
Получение размера блока разделяемой памяти
int shmop_size (int shmid)
Возвращает размер блока, указанного дескриптором shmid.
shmop_read
Чтение данных из блока разделяемой памяти
string shmop_read (int shmid, int start, nnt count)
Возвращает прочитанную строку данных размером count байтов, начиная со смещения start, из блока, указанного дескриптором shmid.
shmop_write
Запись данных в блок разделяемой памяти
int shmop_write (int shmid, string data, int offset)
Записывает строку данных data в блок, указанный дескриптором shmid, по относительному адресу (смещению от начала блока) offset.
shmop_delete
Удаление блока разделяемой памяти
int shmop_delete (int shmid)
В аргументе shmid указывается дескриптор блока.
В случае успеха возвращает 1, а при ошибке — 0.
shmop_close
Закрытие блока разделяемой памяти
int shmop_close (int shmid)
В аргументе shrald указывается дескриптор блока.
Семафоры
Данная группа функций позволяет использовать семафоры и разделяемую память (System V). Семафоры могут использоваться для реализации доступа к системным ресурсам в эксклюзивном режиме (или ограничивать число процессов, одновременно использующих один ресурс). Сами по себе семафоры не защищают от одновременного использования ресурса, а используются для синхронизации.
Операционные системы Unix имеют следующие ограничения:
SHMMAX — максимальный размер блока разделяемой памяти, обычно 131 072 байта;
SHMMIN — минимальный размер блока разделяемой памяти, обычно 1 байт;
SHMMNI — максимальное число блоков разделяемой памяти в системе, обычно 100;
SHMSEG — максимальное число блоков разделяемой памяти для одного процесса, обычно 6.
Эти функции не работают в Windows.
sem_get
Получение дескриптора семафора
int sem_get (int key [, int max_acquire [, int perm]])
Возвращает дескриптор семафора с идентификатором key или FALSE — при ошибке.
При отсутствии такого семафора он создается, и в аргументах тах_ acquire и perm можно задать: число процессов, которые могут заблокировать этот семафор (по умолчанию 1 — «никакой процесс, кроме данного»), и нрава доступа к нему (по умолчанию 0666).
См. также: sem_acquire() и sem_release().
sem_acquire
Блокировка семафора
int sem_acquire (int senMdentifier)
Возвращает TRUE или FALSE — при ошибке. Число процессов, которые одновременно могут заблокировать семафор, указывается при его создании (аргументом max_acquire), и если оно уже достигнуто, попытки блокировки отвергаются. После завершения процесса, если он не освобождает семафор, выдается предупреждение.
См. также: sera_get() и sem_release().
sem_release
Освобождение семафора
int sem_release (int sem_identifier)
Освобождает семафор, заблокированный ранее данным процессом. Возвращает TRUE или FALSE — при ошибке (с выдачей предупреждения). После освобождения семафора его снова можно заблокировать функцией sem_acqihre().
См. также: sera get() и sero_acquire().
shm_attach
Создание или открытие блока разделяемой памяти
int shm_attach (int key [, int memsize [, int perm]])
В аргументе key указывается системный идентификатор блока. В случае успеха функция возвращает дескриптор блока разделяемой памяти System V, используемый в последующих операциях с ним. Если такого блока не существует, то он создается, и тогда в аргументе memsize можно указать его размер в байтах. (Если значение не указывается, то создается блок размером 10 000 байт, размер по умолча-' нию можно также задать, добавив в файл конфигурации параметр sysvshm.initjnem=.) В аргументе perm можно указать права доступа (по умолчанию 0666).
Повторный вызов функции с тем же значением key создаст новый дескриптор на тот же блок (аргументы memsize и perm будут игнорироваться).
shm_detach
Закрытие блока разделяемой памяти
int shm_detach (int shm_identifier)
Данные блока shmjdentifier при закрытии сохраняются.
shm_remove
Удаление блока разделяемой памяти
int shm_remove (int shmjiclentifier)
Все данные блока shm_identifier уничтожаются.
shm_put_var
Добавление или обновление переменной в разделяемой памяти
int shm_put_var (int shm_identifier, int variable_key, mixed variable)
Присваивает значение PHP-переменной variable переменной в блоке разделяемой памяти (с дескриптором shm_identifier), имеющей идентификатор variable_key. Поддерживаются все типы переменных (double, int, string, array).
shm_get_var
Получение переменной из разделяемой памяти
mixed shm_get_var (int id, int variable_key)
Возвращает значение переменной variable_key.
shm_remove_var
Удаление переменной из разделяемой памяти int shm_remove_var (int id, int variable_key) Удаляет переменную variable_key и освобождает память.
Сессии
Сессии позволяют реализовать единый механизм передачи данных между страницами сайта. Программная реализация имеется в библиотеке PHPLIB, но в РНР есть встроенная. Сессии работают по следующей схеме.
Пользователю, впервые посетившему сайт, присваивается уникальный идентификатор (идентификатор сессии). Этот идентификатор может быть сохранен в cookie (но не все браузеры их поддерживают) или в строке URL (тогда необходимо вносить значение идентификатора во все внутренние ссылки сайта, имеющиеся на каждой странице сайта).
Затем инициализируется массии, в котором будут храниться данные текущей сессии. Обычно данные сессии хранятся на сервере в файлах или базе данных.
В сценарии используются две основные функции: открытие сессии и внесение значения неременной в данные сессии.
При открытии сессии автоматически извлекаются ранее сохраненные переменные сессии.
При уничтожении сессии (обычно это делается автоматически, но прошествии времени устаревания) удаляются все се данные.
Внутренняя реализация сессий PIIP работает следующим образом. Если параметр конфигурации session.auto_start установлен (равен 1), то при запуске сценария сессия инициализируется автоматически (неявно вызывается функция session_start()). При этом проверяется существование идентификатора сессии и необходимость его создания.
Явно добавить переменную к данным сессии позволяет функция session_register().
Сохранение и восстановление переменных сессии определяется параметрами конфигурации track_vars (обычно он разрешен всегда) и register_globals.
Если параметр register_g"lobals разрешен, то переменные сессии автоматически преобразуются в глобальные и обратно (также их значения доступны в массиве $HTTP_SESSION_VARS).
("count"): $count++: >>
Если параметр register_globals запрещен, то тогда переменные сессии сохраняются только в глобальном ассоциативном массиве $НТТР_ SESSIONJARS.
("count"); $HTTP_SESSION_VARS ["count"l++: ?>
PHP может автоматически вносить идентификаторы сессий (SID) в строки локальных гиперссылок, если при компиляции был разрешен параметр —enable-trans-sid. Это бывает полезно, если браузер клиента не поддерживает cookie; иначе придется добавлять идентификаторы сессий в ссылки вручную.
- позволяет вывести идентификатор сессии # при интерпретации заменяется на значение вида # PHPSESSID= -da07977e2f4cl52f973676c41d6bd9aa ?>
По умолчганию данные сессий сохраняются в файчах (в каталоге, указанном параметром конфигурации session.save path). Так заметно снижает быстродействие, можно использовать собственную функцию сохранения данных сессий (например, в БД) установив в качестве таковой с помощью функции session set save hand().
session_start
Инициализация данных сессии
bool session_start(void)
Создает массив данных сессии или сессии, переданный через cookie или в строке запроса, дарующая сессия уже существует) восстанавливает ранее сохраненные переменные сессии.
Функция всегда возвращает TRUE.
session_destroy
Уничтожение данных сессии
bool session_destroy(void);
session_ name
Определение имени сессии
string sessionjiame ([string name])
Возвращает имя текущей сессии, и если указан аргумент, то есть ее имя на указанное name.
Имя сессии является именем cookies, или например в строке запросом URL. Оно должно содержать цифровые символы. По умолчанию имя устанавливается параметром session.name , файле конфигурации. Если требуется измнить его в сценарии, это должно быть сделано до открытия сессии (вызова функций session_start() или session_register()).
Sprevious name = session_name ("WebsitelD"): echo "Ранее именем сессии было $previous_name"; ?>
session_module_name
Определение модуля работы с сессиями
string session_module_name ([string module])
Возвращает имя текущего модуля для работы с сессиями (обычно это встроенный в РНР модуль). Можно указать имя собственного модуля module, который должен использоваться вместо встроенного.
session_save_path
Определение каталога сохранения данных сессии string session_save_path ([string path])
По умолчанию РНР сохраняет данные сессий в файлах, в каталоге определенном конфигурацией. Функцией возвращается имя этого каталога, и если указан аргумент, то заданный ранее каталог изменяется на указанный.
session_ id
Определение значения идентификатора сессии string session_id ([string id])
Возвращает значение идентификатора текущей сессии; если указан аргумент, то заменяет его на указанное id (установить значение можно только до начала сессии).
Значение идентификатора также хранится в константе SID.
session_register
Добавление переменной сессии
bool session_register (mixed name [, mixed ...])
Возможно указание различного числа аргументов, содержащих имена переменных. Также можно указывать массив, содержащий имена переменных. Функция возвращает TRUE, если регистрация прошла успешно.
session_unregister
Удаление переменной сессии
bool session_unregister (string name)
Возвращается TRUE, если исключение переменной с именем name из данных сессии прошло успешно.
session_unset
Удаление всех переменных сессии
void session_unset(void);
Удаляет все данные текущей сессии.
session_ is_ registered
Проверка принадлежности переменной к текущей сессии
bool session_is_registered (string name)
Возвращает TRUE, если переменная с именем name принадлежит сессии.
session_get_cookie_params
Получение параметров cookie сессии
array session_get_cookie_pararas (void);
Возвращается массив, содержащий три элемента:
lifetime — время жизни cookie;
path — путь URL, для которого cookie действителен;
Параметры, которые устанавливаются этой функцией, будут действовать только на время исполнения сценария, в остальных случаях будут использоваться значения из параметров файла конфигурации php.ini.
session_decode
Декодирование данных сессии из строки
boo! session_decode (string data)
Эта функция используется для извлечения данных сессии, если строка сериалпзированных переменных была сохранена вручную.
session_encode
Кодирование данных сессии в строку
string session_encode(void)
Возвращает строку, содержащую сериализированные данные текущей сессии.
tession_set_save_handler
Установление пользовательских процедур работы с сессиями
Этой функцией можно установить функции, которые будут выполнять следующие действия: открытие сессии, закрытие, чтение и запись данных сессии, уничтожение устаревших данных, вычисление момента, когда следует удалять устаревшие данные. Имена соответствующих функций указываются в этом порядке, как аргументы данной функции. Для того чтобы можно было использовать пользовательские функции, следует установить для параметра session.save_ handler в файле конфигурации значение user.
Можно реализовать механизм сохранения данных сессий в базе данных. Следующий пример, демонстрирующий сохранение данных в файлах (примерно таким образом действует РНР), может быть лег- / ко преобразован для хранения данных в БД.
// инициализация сессии function open ($save_path. $sesston_name) { global $sess_save_path. $sess_session_name: // здесь может выполняться подключение к БД $sess_save_path = $save_path; $sess_session_name •= $session_name: return(TRUE). } // закрытие сессии function close() { return(TRUE): } // загрузка данных сессии function read ($id) { global $sess_save_path. $sess_session_name $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file. "r";) { $sess_data = fread ($fp. filesize($sess_file)); return($sess_data): } else { returnC"'). } // сохранение данных сессии function write ($id. $sess_data) { global $sess_save_path. $sess_session_name: $sess_file = "$sess_save_path/sess_$id": if ($fp = @fopen($sess_file. "w")) { return (fwnte($fp, $sess_data)); } else { return(FALSE): } } // уничтожение устаревших данных сессии function destroy (Sid) { global $sess_save_path. $sess_session_name: $sess_file = "$sess_save_path/sess_$id"; ' return(@unlink($sess_file)); } // здесь должны проверяться данные сессии на истечение времени хранения function gc (Smaxlifetime) { return TRUE. } session_set_save_handler ("open", "close", "read", "write", "destroy", "gc"); session_start(): // далее следует обычная процедура работы с сессиями ?>
Когда посылаются заголовки HTTP, в них можно указать, разрешено ли кэширование полученных данных. В HTTP допустимы следующие значения: nocache (по умолчанию), private (относительное ограничение кэширования) и public (отсутствие ограничений). При запуске сценария ограничение кэширования устанавливается согласно значению параметра конфигурации session.cache_limiter.
Функция возвращает текущее ограничение кэширования, и если указан аргумент cachejli miter, то устанавливает новое (это необходимо делать до запуска сессии).
set_time_limit
Установка предельного времени исполнения сценария ,
void set_time_limit (int seconds)
При запуске сценария PHP запускает системный таймер, и если время (выделенное сценарию для выполнения) истекает, а сценарий еще не завершился, РНР принудительно завершает сценарий (генерируя фатальную ошибку исполнения). Это не допускает скопления большого количества сценариев, расходующих ресурсы сервера, но, по-видимому, «зависших» (например, если в них обнаружился бесконечный цикл или они пытаются дождаться подключения к не отвечающему серверу).
По умолчанию допустимое время исполнения сценария устанавливается в файле конфигурации1 параметром max_execution_time (обычно оно равно 30 с). Но для текущего сценария это значение можно изменить вызовом данной функции, указав время в секундах в ее аргументе. Если указывается значение 0, то тогда временное ограничение снимается.
Отсчет времени начинается от момента вызова функции. Например, если сценарий уже выполнялся в течение 15 секунд, а затем вызывается функция set_time_limit(20), то общее максимальное время исполнения сценария становится равным 35 секундам.
Если сценарий выполняется в безопасном режиме (с установленным параметром safe mode), то тогда вызов этой функции игнорируется и используется значение из файла конфигурации.
sleep
Приостановление выполнения (на секунды)
void sleep (int seconds)
Выполнение сценария приостанавливается на указанное число секунд seconds.
См. также usleep().
usleep
Приостановление выполнения (на микросекунды)
void usleep (int micro_seconds)
Выполнение сценария приостанавливается на указанное число микросекунд.
Эта функция не работает в Windows.
См. также sleep().
die
Вывод сообщения и завершение текущего сценария
void die (string message)
Это языковая конструкция, ничего не возвращающая.
'/path/to/data-file'; Sfile = fopen (Sfllename. 'r') or dieC'unable to open file (Sfilename)"); ?>
См. также exit().
exit
Завершение текущего сценария
void exit(void);
Языковая конструкция, ничего не возвращающая.
См. также die().
assert
Проверка истинности значения
int assert (string]boo! assertion)
В качестве аргумента функции может быть указано значение или строка, содержащая код РНР (как в функции evaK)). Функция проверяет, является ли значение (или выражение) равным FALSE, и, если это так, выполняет определенные действия.
Поведение функции определяется установками в файле конфигурации или при вызове функции assert_options().
Обычно эта функция используется исключительно в целях отладки, для проверки тех значений, которые всегда должны быть истинны (например: подключение модуля, свободное пространство на диске и т. д.).
В целом же выполнение сценария не должно зависеть от таких проверок, а использовать обычные проверки возвращаемых функциями значений.
function handler(){ echo "\n* Failed * \n"; } assert("\$a='l';"); echo "a: $a \n"; assert(0); echo assert_options(ASSERT_BAIL,l); // завершать сценарий assert_options(ASSERT_CALLBACK."handler"); // вызвать обработчик @assert(--$a); // не выдавать сообщений РНР Echo "\n ... \n"; // эта строка не будет выполнена
Приведенный пример выведет:
а: 1 Warning: Assertion failed in file.php on line 20 0 * Failed *
Функция позволяет определить поведение конструкции assert(). Возвращается предыдущее значение параметра (или значение FALSE при ошибке), указанного в первом аргументе одной из следующих констант:
Параметр
ini-параметр
Умолчание
Описание
ASSERT_ACTIVE
asscrt.active.
1
Разрешить указание кода в assertQ
ASSERT_WARNING
assert, warning
1
Выдавать предупреждение РПР
ASSERTJ3AIL
assert.bail
0
Завершать выполнение, если «неистинно»
ASSERT_QUIET_EVAL
assert.quiet_eval
0
Не выдавать сообщений
ASSERT_CALLBACK
assert_callback
(null)
Установить функцию в качестве обработчика «неистинных» assert()
<
Если значение необходимо переопределить, его указывают во втором аргументе.
eval
Интерпретация строки как кода РНР
mixed eval (string code_str)
Исполняет указанный в строке code_str код как обычный код РНР. Кроме всего прочего, это может быть полезно для сохранения кода в текстовом поле базы данных с целью последующего исполнения.
H'le забывайте, что указанный в строке код должен быть синтаксиче-снки правильным (например, должны присутствовать точки с запятой после каждой команды и т. п.), в противном случае сценарий будет заавершен в этой строке с ошибкой. Учитывайте также, что те значе-н«ня переменных, которые будут установлены в данной строке, будут ивспользоваться в оставшейся части сценария.
Если в строке указан оператор return, то тогда выполнение указан-нного кода будет досрочно завершено и возвращенное значение мож-нно получить как значение, возвращаемое самой функции.
Это Sstnng, а внутри Spame. \n3ro сундук, а внутри кирпич. 9399
Статус подключений
Внутренне РНР имеет три статуса подключения:
0 — NORMAL;
1 — ABORTED (прервано пользователем);
2 — TIMEOUT (истекло время ожидания ответа).
При нормальном выполнении сценария активно состояние NORMAL. Если во время загрузки страницы пользователь нажимает кнопку STOP, активным становится состояние ABORTED. Если сценарий выполняется дольше отведенного ему времени (см. функцию set_tirae_ liraitO), устанавливается флаг состояния TIMEOUT. Возможно определить, как должен вести себя сценарий в зависимости от этих условий.
Если требуется, чтобы сценарий продолжал свое выполнение при разрыве соединения пользователем, нужно установить в файле конфигурации значение параметра ignore_user_abort = 1 (это также можно сделать в файлах конфигурации Apache). Можно также воспользоваться функцией ignore_user_abort(). В противном случае, но умолчанию, если браузер отказывается от приема данных сценария, сценарий завершается. < /FONT >
Чтобы игнорировать завершение сценария таймером, необходимо использовать функцию set_time_limit().
Если функцией register_shutdown_function() была установлена функция «запускаемая при завершении сценария», то, вне зависимости от статуса подключения, она будет исполнена перед тем, как сценарии завершится. И в «завершающей» функции можно будет выяснить (с помощью функций: connection_aborted() ,connection_timeout() и connecti on_ status()), был ли сценарий завершен нормально или досрочно.
connection_aborted
Определение разрыва подключения пользователем
int connection_aborted (void )
Возвращает TRUE, если подключение было разорвано пользователем.
connection_status
Определение статуса подключения
Int connection_status (void )
Возвращает значение битового поля (см. выше), позволяющее выяснить в «завершающей» функции, был ли сценарий завершен досрочно и причину этого. Например, если возвращается 3 (ABORTED | TIMEOUT), то это означает, что время исполнения истекло, а также то, что пользователь отказался от загрузки страницы.
Если возвращается 0 (то есть значение NORMAL), то это означает, что выполнение сценария не было прервано.
connection_tameout
Определение наступления тайм-аута
int connectionjtimeout (void )
Возвращает TRUE, если время исполнения сценария истекло.
ignore_user_abort
Прерывание сценария при разрыве подключения
int ignore_user_abort ([int setting])
Аргументом setting можно указать, необходимо ли досрочно завершать выполнение сценария, если связь с клиентом потеряна. Если аргумент не указан, то возвращается текущая установка.
register_shutdown_function
Регистрация функции в качестве завершающей
int register_shutdown_function (string func)
Регистрирует функцию с именем func в качестве функции, запускаемой после завершения сценария.
Заметьте: так как после завершения функции никакие средства вывода недоступны, это делает для функции, зарегистрированной в качестве «завершающей», недоступными обычные средства отладки, такие как команды print или echo.
Дополнительные функции
get_browser
Определение возможностей браузера
object get_browser ([string user_agent])
Возвращаемая информация извлекается из файла browscap.ini. Для определения браузера используется значение переменной $HTTP_USER_ AGENT или значение, содержащееся в аргументе user_agent.
Информация возвращается в виде свойств объекта и отражает возможности клиентского браузера (например, версию, поддерживает ли он javascript или cookies).
Mozilla/4.5 ten] (Xll; U. Linux 2.2.9 1586) Mozilla/4\.5.* parent: Netscape 4.0platform: Unknown majorven: 4 mnorver: 5 browser: Netscape
version 4 frames: ltables: l cookiev l
backgroundsounds:
vbscnpt:
javascnpt:
javaapplet:
activexcontrols-
'b>beta:<:/b> crawler : authenticodeupdate:
msn:
Для того чтобы функция могла функционировать, следует правильно указать месторасположение файла browscap.ini в файле конфигурации.
highlight_file
Вывод содержимого файла с цветовой разметкой boolean highlight_file (string filename)
Имя (или путь) файла указывается'в аргументе. Цвета выделения синтаксиса определяются в файле конфигурации РНР. Возвращает TRUE или FALSE при ошибке.
Например, чтобы заставить сервер Apache при получении запроса с URL, содержащего значение вида «пир://имя.сервера/5оигсе/путь/ к/файлу.php», выводить листинг файла «1тЬ1р://имя.сервера/путь/к/ файлу, рпр», сделайте следующее.
Добавьте в файл httpd.conf следующий фрагмент:
# Используем директиву "ForceType" чтобы указать, что значение source в URL - не каталог, а имя сценария РНР ForceType appHcation/x-httpd-php
Создайте в корневом web-каталоге следующий файл с именем source:
Функция действует подобно highlight_file(), но использует не содержимое файла, а указанной строки.
См. также: rngh1ight_file(), show_source().
show_source
Синоним функции highlightjile
boolean show_source (string filename)
См. также: highlight_string(), highlight_file().
leak
Имитация утечки памяти
void leak (int bytes)
Функция используется для отладки менеджера памяти, его проверки на способность ликвидировать неосвобожденные блоки памяти после завершения сценария. Размер блока памяти указывается в байтах аргументом bytes.
uniqid
Генерация уникального идентификатора
int uniqid (string prefix [, boolean leg])
Возвращает идентификатор, сгенерированный на основе значения текущего времени в микросекундах и имеющий префикс prefix.
Если указывается необязательный аргумент leg со значением TRUE, к концу идентификатора будет добавляться «комбинированный хеш энтропии LCG», делающий его значение более уникальным.
Префикс используется для получения уникальных идентификаторов, генерируемых одновременно на разных машинах (когда время одинаковое). Его длина может достигать 114 символов. Если в качестве его значения передается пустая строка, то длина сгенерированного идентификатора будет 13 символов (при lcg=TRUE — 23 символа). < /FONT>
Принято также дообрабатывать полученное значение криптографическими методами (например, это часто делается в идентификаторах сессий).
$token = md5 (uniqid ("")): // без случайной части $better_token = md5 (uniqid (randO)); // посложнее
Эти строки генерируют 32 байта (128-битное шестнадцатеричное число): они обладают максимальной уникальностью, которая только может потребоваться.
pack
Пакетирование данных в двоичную строку
string pack (string format [, mixed args ...])
В первом аргументе format указывается строка формата, а в последующих — элементы данных, вносимых в результирующую строку. Алгоритм функции заимствован из Perl и по большей части использует те же коды.
Строка формата состоит из кодов двух видов: кода типа элементов данных и числителя (длины данных или количества элементов данных данного типа), указанного после кода типа. Числитель может быть числом или значением «*» (тогда длина определяется автоматически). Если числитель не указывается, он считается равным 1. Для кодов a, A, h, H числитель указывает количество символов, вносимых в строку данных; а для кода 0 — абсолютную позицию в строке результата, начиная с которой вносятся символы следующего элемента данных.
с — байт со знаком; pack("c*"."X".-1.255.256) == «\0\xFF\xFF\0» unpackC'c*". pack("c*"."X".-1.255.256» — (O.-l.-l.O)
С — байт без знака; pack("C*"."X".-l 255.256) = = «\0\xFF\xFF\0» unpackC'C*" . Dack("C*","X".-1.255.256)) == (0.255.255.0)
s — знаковое короткое число (2 байта, порядок байтов системы);
S — беззнаковое короткое число (2 байта, порядок байтов системы);
n — беззнаковое короткое число (2 байта, старший байт вначале); pack("n*".OxF951.Oxlllllllll) == «\xF9\x51\xFF\xFF»
v — беззнаковое короткое число (2 байта, младший байт вначале); pack("v",OxF951) == «\x51\xF9»
i — знаковое длинное число (4 байта, порядок байтов системы);
L — беззнаковое длинное число (4 байта, порядок байтов системы);
N — беззнаковое длинное число (4 байта, старший байт вначале);
V — беззнаковое длинное число (4 байта, младший байт вначале); j
i — знаковое целое число (зависит от системы);
I — беззнаковое целое число (зависит от системы);
f — дробное float (зависит от системы и представления);
d — дробное double (зависит от системы и представления);
х — байт \0;
X — удалить предыдущий байт; pack("x2A*X2A."Abc".'V) == «\0\ОАя»
@ — заполнять символами \0 от текущего места и до указанной позиции. pack("A*(a4A*"."Ab"."ZZ") = = «Ab\0\OZZ» pack("A*(aiA*"."Abccccc"."ZZ") == «AZZ»
Заметьте, что указание на присутствие знака в числе реально используется только при распаковке. Не забывайте также, что РНР хранит числа в формате знаковых, системного размера. И проверяйте, умещается ли большое число (РНР может скрыто преобразовать его в дробное) в отведенный для него размер (иначе оно будет урезано без вашего ведома).
unpack
Распаковка двоичной строки
array unpack (string format, string data)
Возвращает в ассоциативном массиве элементы данных, извлеченных из строки data, согласно формату format. В строке формата указываются последовательности «код_формата [числитель] имя_элемента» без пробелов, разделенные слешем <>>. Описание кодов формата и комментарии см. в функции pack().
Функция извлекает данные из маркеров АРР (обычно они содсржатся в файлах Интернет-графики) и возвращает полученную информацию в массиве.
См. пример в функции GetlmageSize(), а также информацию по адресу: http://www.iptc.org/.
Управление выводом
Данная группа функций позволяет управлять тем, как РИР при выполнении сценария выводит информацию. Это может быть полезно в различных ситуациях, в особенности при посылке браузеру HTML-заголовков (headers) после того, как сценарий начал выводить HTML-текст. (В обычном случае невозможно послать заголовок после того, как был начат вывод текста.) Эти функции не воздействуют на заголовки, посланные функциями header() или setcookie(), а только па функции, подобные echo() и HTML-тексту между блоками РНР-кода.
echo "HelloXn" \ I setcookie ("cookiename". "cookiedata"): end flush() : / >>
В примере выше вывод командой echo() будет сохранен в буфере вывода до вызова функции ob_end_flush(). В то же время вызов setcookie() успешно сохраняет cookie, не вызывая ошибки.
См. также: header() и setcoukie().
ob_start
Включение буферизации вывода
void ob_start ([string output_callback])
После вы-зова этой функции включается буферизация вывода и, пока она активна, никакие из выводящихся данных не будут посланы браузеру, а будут сохраняться во внутреннем буфере РНР.
Содержимое буфера может быть скопировано в строковую переменную функцией ob_get_contents(). Для вывода содержимого из буфера используется функция ob_end_f"lush(). Удалить содержимое буфера позволяет функция ob_end_clean().
В аргументе output_callback можно указать функцию, которая будет автоматически вызываться при выводе содержимого буфера. Обычно это используется для модификации содержимого буфера перед выводом (например, сжатия). Тогда при вызове функции ob_end_flush() в указанную функцию будет передаваться содержимое буфера, а то, что она возвратит, будет выведено (заметьте, сама функция не должна ничего выводить).
Буферизация может быть вложенной, и тогда она обрабатывается соответственно вложенности; и содержимое, выводимое из буфера нижнего уровня, будет включаться в буфер верхнего уровня. Не забывайте, что для вывода всего буферизированного содержимого необходимо вызвать функцию ob_end_flush() сколько же раз, сколько была вызвана ob_start().
<'php function c($str) { // получает содержимое буфера return n!2br($str): // возвращает содержимое буфера ) function d($str) j // получает содержимое буфера return strtoupper($str); // возвращает содержимое буфера ?>
Тут всякий текст... /* преобразовывать текст далее в верхний регистр */ ?> и еще много чего .
смотрите сами ... ?>
См. также: ob_get_contents(), ob_end_f"lush(), ob_end_clean() и ob_implicit_ flush().
ob_get_contents
Получение содержимого буфера вывода
string ob_get_contents(void);
Если буферизация неактивна, возвращается FALSE.
См. также: ob_start() и ob_get_length().
ob_get_length
Получение длины данных в буфере вывода
string ob_get_length(vcrid);
Если буферизация неактивна, возвращается FALSE.
См. также: ob_start() и ob_get_contents().
ob_end_flush
Вывод содержимого буфера
void ob_end_flush(void);
После вывода буфер текущего уровня очищается, поэтому вызывайте функцию ob_get_contents() заранее, если необходимо получить его содержимое.
См. также: ob_start(), ob_get_contents() и ob_end_clean().
flush
Вывод всего содержимого буфера
void flush(void)
Функция воздействует только на буферизацию РНР и не может контролировать схему буферизации wcb-сервера или браузера.
, Некоторые серверы, в особенности под Win32, буферизируют выводящиеся сценарием данные до того, как сценарий завершится и данные будут отосланы браузеру.
Браузер, в свою очередь, также может буферизировать получаемые данные до их отображения. Netscape, например, буфсршируег текст до получения символа завершения строки или открывающего тега, а для таблиц — до получения тега таблицы верхнего уровня.
ob_end_clean
Очистка буфера
void ob_end_clean(void);
Вызов функции отключает буферизацию на текущем уровне.
См. также: ob_start() и ob_end_flush().
ob_implicit_ flush
Установление режима буферизации
void objmplicit_flush (jjnt flag])
Если в аргументе указано ненулевое значение или оно не указано, то при осуществлении каждой операции вывода будет неявно вызываться функция flush().
При вызове функции неявно вызывается ob_end_f"lush().
См. также: flush(), ob_start() и ob_end_flush().
Загружаемые модули PHP (extensions)
Описание загружаемых модулей приводится для системы Windows. В комплекте РНР, поставляемом для Windows, следующие модули являются уже встроенными (built-in):
standard
bcmath
Calendar
com
ftp
mysql
odbc
pcre
session
xml
wddx
Следующие модули можно загрузить функцией dl() во время исполнения или раскомментировав соответствующие строки в файле конфигурации (* — файл не входит в комплект поставки РНР). Некоторым модулям требуются дополнительные библиотеки, некоторые из которых входят в комплект поставки и размещаются в каталоге dll (не забудьте переместить их в доступный для системы каталог или указать путь к ним в переменной окружения PATH).
php_bz2.dll php_ctype.dll
php_cpdf.dll php_curl.dll (требует msvcr70.dll*,
sslleay32.dll)
php_cybercash.dll php_db.dll
php_dba.dll php_dbase.dll
php_domxml.dll (требует Iibxml2.dll) php_dotnet.dll
php_exif.dll php_fdf.dll (требует FdfTk.dll)
php_filepro.dll php_gd.dll
php_gettext.dll (требует php_hyperwave.dll
gnu_gettext.dll)
php_iconv.dll php_ifx.dll (требует isqlt09a.dll*)
php_iisfunc.dll php_imap.dll
php_ingres.dll (требует oiapi.dll*) phpjnterbase.dll (требует gds32.dll)
phpjava.dll php_ldap.dll (требует libsasl.dll)
php_mcrypt.dll (требует mcrypL.dll*) php_mhash.dll
php_ming.dll php_mssql.dll (требует
Ntwdblib.dll)
php_oci8.dll (требует oci.dll) php_openssl.dll (требует
msvcr70.dll*, Iibleay32.dll)
php_oracle.dll (требует ociw32.dll*) php_pdf.dll php_pgsql.dll php_printcr.dll
php_sablot.dll (требует sablot.dll) php_snmp.dll
djustright php_sybase_ct.dll php_yaz.dll
(требует libct.dll*)
php_zlib.dll |
Функции модулей
dl
Загрузка библиотеки расширения РНР во время исполнения
int dl (string library)
dl ("extensions/php_db.dll"),
См. также параметр конфигурации extension_dir.
get_loaded_extensions
Определение перечня загруженных модулей
array get_loaded_extensions (void)
Возвращает массив, содержащий список имен модулей РНР, которые были прикомандированы, загружены при старте РНР и загружены во время исполнения функцией dl().
Возвращает TRUE, если указанный модуль name уже был загружен. Обратите внимание на то, как пишется имя модуля, и на регистр символов.
См. также phpinfo().
get_extension_funcs
Определение функций модуля
array get_extension_funcs (string modulejiame)
Возвращает массив, содержащий перечисление имен функции, содержащихся в модуле module_name. Этот модуль должен быть предварительно загружен.
pnnt_r (get_extension_funcs ("xml")):
Если необходимо получить перечисление всех доступных функций, используйте функцию get_defined_functions().
См. также get_loaded_extensions().
Загрузка файлов на сервер методом HTTP POST
PHP способен осуществлять загрузку на сервер файлов, посланных браузерами, использующими стандарт RFC1867 (таковыми являются Netscape Navigator 3 и старше, Microsoft Internet Explorer 3 с обновлением или более поздние браузеры Microsoft). Файлы могут быть как двоичными, так и текстовыми. При этом бывает полезно г воспользоваться процедурой аутентификации и функциями файловой системы.
Также РНР поддерживает загрузку методом PUT, используемую программами Netscape Composer и Amaya (см. ниже).
Для загрузки файлов методом POST необходимо передать браузеру следующую форму:
«FORM ENCTYPE="multipart/form-data" ACTION="get.php" METHOD=POST> "MAX_FHE_SIZE" value="1000"> Отослать файл; "userfile" TYPE="file"> ="Послать">
Вместо значения атрибута ACTION «get.php» необходимо указать имя PHP-сценария, который будет принимать файл. В скрытом поле MAX_FILE_SIZE указывается максимальный размер файла (в байтах), который может быть послан, но он не может быть больше, чем определено в параметре конфигурации upload_max_filesize. При отображении данной формы браузер автоматически добавляет кнопку «Обзор...», при нажатии на которую появляется стандартное окно выбора файлов.
Сценарий, который получает файл, может использовать глобальный массив $HTTP_POST_FILES для получения информации о том, что за файл был загружен. Обычно этот массив имеет следующую структуру:
Array ( [userfile] => Array ( [name] -> jshtm.zip [type] => application/x-zip-compressed [tmp_name] => E:/Tmp\phpAE.tmp [size] => 21344 ) [userfnle?] => Array ( [name] => tsrm.txt [type] => text/plain [tmp_name] => E:/Tmp\phpAF.tmp [size] => 5483 ) )
userfile — это имя поля формы, в которое вводилось имя передаваемого файла. (В форме может присутствовать несколько таких полей типа «file», если необходимо передавать несколько файлов одновременно.) Соответственно массив будет содержать столько же подмассивов, сколько полей передачи файлов присутствовало в форме.
PUT /path/filename html HTTP/1.1
Строка указывает, что сервер должен сохранить последующую часть запроса как файл под именем filename.html в каталоге web-сервера /path/. Едва ли такое решение является удачным — позволять любому клиенту сохранять произвольные файлы на сервере. Поэтому в конфигурации web-сервера следует указать, что запросы этого типа должен обрабатывать определенный сценарий. В сервере Apache для этого необходимо добавить директиву Script в его файл конфигурации. Обычно такая директива вносится в блок , иногда — в блок . Например, в таком виде:
Script PUT /put.php
Эта директива указывает серверу, что все получаемые запросы типа PUT (соответствующие контексту, то есть адресованные определенному каталогу или виртуальному хосту) должны передаваться сценарию put.php (расположенному в корневом каталоге web-сервера). Внутри файла put.php можно указать следующую строку:
($PHPjmjILFNAME.IDOCUMENT_ROOT. $REQUEST_URI); ?>
Тогда все загружаемые файлы будут копироваться в указанную в запросе директорию. Необходимо, конечно, предварительно проводить ряд проверок на допустимость подобной операции. Полученный файл сохраняется во временном файле, имя которого заносится в переменную SPHP_PUT_FILENAME. Адрес, по которому запрашивался файл, сохраняется в переменной $REQUEST_URI (для Apache). Так же как и для файлов POST, полученный файл удаляется по завершении, если он не был скопирован или перемещен.
Запуск внешних приложений
escapeshellarg
i Добавление кавычек в строку аргументов команды ОС
string escapeshellarg (string arg)
Возвращается строку arg, в которую добавляются одинарные кавычки (вокру! самой строки и вокруг каждой одинарной кавычки), что позволяет передавать аргументы запуска командам операционной системы, если необходимо передать одиночный параметр, содержащий пробелы или другие символы разделители. Это бывает полезно для систем Unix при использовании функций exec(), system().
system('ls " .EscapeShel lArg($dir))
См. также: ехес(), popen(), system() и «оператор запуска внешних программ».
escapeshellcmd
Цитирование метасимволов командной строки
string escapeshellcmd (string command)
Функция возвращает строку command, в которую добавлены цитирующие слеши, это может быть использовано при передаче аргументов командам операционной системы. Также это может быть использовано как средство, предотвращающее запуск произвольных команд пользователем (если им вводятся аргументы запуска).
$е - EscapeShellCmd($usennput). systemC'echo $e"); // в $е возможно присутствие пробелов $f = EscapeShellCmd($filename): systemt"touch \"/tmp/$f\": Is -1 \"/tmp/$f\""):
См. также: escapeshellarg(), exec(), popen(), system() и «оператор запуска
внешних программ».
exec
Запуск внешней программы
string exec (string command [, string array [, int return_var]])
Функция скрыто от пользователя запускает команду операционной системы (оболочки) command. Она возвращает последнюю строку, которую вывела команда command. Если необходимо распечатать все, что вывела команда, используйте функцию PassThru().
Если указан аргумент array, то в нем будет возвращена каждая строка, которая была выведена командой. Если в этом массиве уже присутствуют элементы, то строки будут добавляться в его конец (для очистки массива можно использовать функцию unset ().
Если указан аргумент return_var, то в нем будет сохранен код завершения команды.
$se = "dir C:\\". $sO = exec($se. $sa. $sr): echo "При запуске команды '$se последняя выведенная строка была:\n". $sO. "\n Код возврата ($sr) \nA это все что было выведено: "; pnnt_r($sa); ?>
Если требуется запустить программу в фоновом режиме (на длительное время), то поток ее вывода должен быть перенаправлен в файл (или иной поток вывода); иначе по истечении допустимого времени исполнения сценария (ожидания завершения внешней программы) он будет принудительно завершен с ошибкой.
См. также: system(), PassThru(), popen(), EscapeShellCmd() и «оператор запуска внешних программ».
passthru
Запуск внешней программы с выводом
void passthru (string command [, int return_var])
Функция сходна с ЕхесО: она запускает команду операционной системы command и возвращает в переменной return_var код завершения соответствующей системной команды, но она также выводит все то, что выводится при запуске.
Эта команда может использоваться и в тех случаях, когда внешняя программа выводит двоичные данные; например, с помощью утилиты
pbmplus можно непосредственно отослать браузеру рисунок (предварительно следует отослать заголовок «content-type: image/gif»).
В отличие от функций ехес() и system() она не возвращает никакого значения.
См. также: ехес(), system(), popen(), EscapeShellCmd(), «оператор запуска внешних программ».
system
Запуск внешней программы с выводом
string system (string command [, int return_var])
Функция подобна PassThru(), но она возвращает последнюю строку, выведенную при запуске команды (или FALSE при ошибке). Кроме того, после этого запуска (если была включена буферизация вывода) выводится содержимое буфера.
См. также: ехес(), PassThru(), popent), EscapeShellCmd() и «оператор запуска внешних программ».
Учебник по основам PHP. PHPBeginner
Forms Data Format
Функции форматирования данных форм (Forms Data Format, PDF) предназначены для работы с формами PDF-документов. Для предварительной информации ознакомьтесь с документом http://partners. adobe.com/asn/developer/acrosdk/forms.html.
Основная идея FDF сходна с формами HTML. Отличие состоит в передаче (отправке) данных, поскольку передаются как сами данные (FDF), так и документ формы (PDF). В обычном случае PDF-форма с данными создается на основе PDF-документа, используемого как шаблон формы. То есть сначала создается FDF-документ (fdf_create()) и устанавливаются значения для каждого ноля ввода (fdf_set_ value()), а затем ассоциируется форма PDF (fdf_set_file()). После этого происходит отправка PDF-формы браузеру (с заголовком: MiraeType appllcation/vnd.fdf). Надстройка браузера (Acrobat reader plugin) распознает MimeType и загружает ассоциированную PDF-форму, заполняя ее данными PDF-документа.
Следующий пример иллюстрирует обработку данных формы.
$fdffp = fopenC'test.fdf". "w"): fwnte($fdffp. $HTTP_FDF_DATA. strlen($HTTP_FDF_DATA)); fclose($fdffp); // Open temp file and evaluate data // pdf form содержит значения полей: date, comment. // publisher, и checkbox: show_publisner. $fdf = fdf_open("test.fdf"): $date = fdf_get_value($fdf. "date"). echo "The date field has the value '$date' ": Scomment = fdf_get_value($fdf, "comment"); echo "The comment field has the value ''e>$comment ' "; if(fdf_get_value($fdf. "show_publisher") == "On") { Spublisher = fdf_get_value($fdf. "publisher"): echo "The publisher field has the value '$publisher ' ": } else echo "Publisher shall not be shown. ": fdf_close($fdf); ?>
fdf_open
Открытие документа PDF
int fdf_open (string filename)
Открываемый файл должен содержать данные, возвращенные формой PDF. В настоящее время файл необходимо создавать вручную, используя fopen() и записывая данные HTTP_FDF_DATA функцией fwrite().
Sfdffp = fopen("test.fdf". "w"): fwnte($fdffp, $HTTP_FDF_DATA. strlen($HTTP_FDF_DATA)): fclose($fdffp): // Open temp file and evaluate data $fdf = fdf_open("test fdf"). fdf_close($fdf): ?>
Если имя файла указано как «.», то документ будет выводиться на стандартный поток вывода (отсылаться браузеру). Это не действует, если РНР является модулем apache (для вывода используйте fpassthru()).
bool fdf_set_submit_form_action (int fdf_document, string fieldname, int trigger, string script, int flags)
См. также fdf_set_javascript_action().
fdf_setjavascript_action
Установка действия javascript для поля
bool fdf_set_javascript_action (int fdf_document, string fieldname, int trigger, string script)
См. также fdf_set_submit_form_action().
Графика, Flash, pdf
РНР позволяет выводить не только HTML-текст, но и создавать (и отсылать браузеру) графические данные в различных форматах (gif, png, jpg, wbmp, xpm). Для того чтобы РНР мог работать с графикой, требуется библиотека GD. Вероятно, также потребуются дополнительные библиотеки для поддержки особенных форматов. Начиная с версии 1.6, GD не поддерживает работу с форматом GIF; вместо него используется формат png.
Библиотека GD library доступна по адресу http://www.boutell.com/gd/.
Для работы с рисунками jpeg используется библиотека jpeg-6b (ftp:// ftp.uu.net/graphics/jpeg/), которую следует прикомпилировать с Gd, используя параметр компиляции РНР -with-jpeg-dir=/path/to/jpeg-6b. Для поддержки шрифтов Туре 1, используя параметр —with-tllib[= dir] установите tllib (ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/ tllib/).< /FONT>
Следующий пример (сценарий button.php) вызывается со страницы тегом вида
"button.php?text">(в данном случае на рисунке images/buttonl.png будет выведена надпись «text» и затем этот рисунок будет отослан браузеру). Это более удобный способ, использующий готовый макет рисунка, не требующий его перерисовки с начала, но добавляющий в него дополнительные элементы. < /FONT>
{ echo "формат PNG поддерживается". } ?>
ImageCreate
Создание рисунка
int imagecreate (int x_s1ze, int y_size)
Возвращает дескриптор созданной картинки размером x_size на y_size.
$ni = @ImageCreate (50. 100) or die
("Нельзя создать GD image ");
Sbackground_color -- ImageColorAllocate
(Sim. 255. 255. 255): $text_co1or =
ImageColorAllocate
(Sim. 233. 14. 91): ImageStnng
($im, 1. 5. 5. "A Simple Text String". $text_color)
ImagePrg ($im): // передать рисунок браузеру ?>
ImageCreateFromGIF
Создание рисунка из файла GIF
Int imagecreatefromgif (string filename)
Возвращает дескриптор рисунка filename (можно указать URL) или пустую строку при ошибке (с выдачей предупреждения).
function LoadGif (Simgname) {
Sin1 @ImdgeCreateFromGIF ($imgname):
/* Attempt to open */ if (!$im) { /* See if it failed */
Возвращает массив, содержащий информацию о графическом файле (4 элемента): [0] и [1] — ширина и высота рисунка в пикселах, [2] — тип файла (1 = GIF, 2 - JPG, 3 - PNG, 4 = SWF), [3] - строка вида «height= xxx width = xxx», которая может использоваться непосредственно в HTML-теге IMG.< /FONT>
< /FONT>
Указав необязательный массив imageinfo, в нем можно сохранить дополнительную информацию о файле, например различные маркеры JPG APP (внедренную информацию). Часто в маркер АРР13 заносят информацию IPTC http://www.iptc.org/. Функция iptcparse() позволяет конвертировать эти данные АРР13 в читаемый вид.
if (isset ($info["APP13"])) {
Siptc = iptcparse ($info["APP13"]):
var_dump (Siptc): ; } ?>
Функция не требует библиотеки GD.
read_exif_data
Чтение заголовков EXIF из файла JPEG
array read_exif_data (string filename)
Возвращает ассоциативный массив, в котором индексами являются имена заголовков Exif. Заголовки Exif обычно хранят информацию цифровых камер (в различном виде).
while(list($k.$v)=each($exif))
{ echo "$k: $v \n"; } ?> Output
FileName: p0001807.jpg
FileDateTime: 929353056 FileSize 378599
CameraMake: Eastman Kodak Company
CameraModel: KODAK DC265
ZOOM DIGITAL CAMERA (V01.00)
DateTime: 1999:06:14 01-37:36
Height: 1024 Width: 1536 IsCoIor: 1
FlashUsed 0 Focal Length: 8.0mm
RawFocalLength: 8 ExposureTime: 0.004 s
(1/250) RawExposureTime.
0.0040000001899898
ApertureFNumber: f/ 9.5
RawApertureFNumber:
9.5100002288818
FocusDi stance: 16.66m
RawFocusOistance: 16.659999847412
Orientation: 1 ExifVersiori: 0200
Функция доступна, только если PHP 4 компилировался с параметром --enable-exif. Библиотека GD не требуется.
ImageSX
Определение ширины рисунка
int imagesx (int lm)
См. также: ImageCreate() и ImageSY().
ImageSY
Определение высоты рисунка
int imagesy (int im)
См. также: ImageCreate() и ImageSX().
Imagelnterlace
Установка чересстрочности
int imageinterlace (int im [, int interlace])
Если interlace = 1, то это делает рисунок отображаемым чересстрочно, если 0 — последовательно. Возвращается текущая установка чересстрочности. < /FONT >
ImageGIF
Отсылка рисунка GIF браузеру или сохранение его в файле int imagegif (int im [, string filename])
Cos/ част файл формата GIF из рисунка im. Затем файл сохраняется под именем filename, или, если имя не указано, содержимое файла передается непосредственно браузеру (не забывайте предварительно отослать браузеру заголовок, сообщающий, что передается графический файл). Файл имеет формат GIF87a, а если он был сделан прозрачным функцией ImageColorTransparent(), то формат будет GIF89a.
Так как GD, начиная с версии 1.6, не поддерживает GIF, функция недоступна для этих версий.
Следующий пример позволяет выводить рисунок в зависимости от того, какой формат поддерживается.
Отсылка рисунка PNG браузеру или сохранение его в файле int imagepng (int im [, string filename])
Выводит GD рисунок im в формате PNG на стандартный поток вывода (обычно браузер), или если указано имя файла filename, то в этот файл.
ImagePng($im). ?>
См. также: ImageGif(), ImageJpeg(), ImageTypes().
ImageJPEG
Отсылка рисунка JPEG браузеру или сохранение его в файле
int imagejpeg (int im [, string filename [, int quality]])
Выводит рисунок im в формате JPEG на стандартный поток вывода (обычно браузер), или если указано имя файла filename, то сохраняет в этот файл. Аргументом quality можно указать качество изображения (обратно пропорционально размеру файла) от 0 до 100.
Imagejpeg($im.'' .20);// вывести рисунок
Поддержка JPEG была добавлена в GD 1.8 и более поздние версии.
См. также: ImagePng(), ImageGif(), ImageTypes().
ImageDestroy
Уничтожение рисунка
int imagedestroy (int im)
ImageCopy
Копирование части рисунка
int ImageCopy ( int dst_im, int src_im, int dst_x, int dst_y, ] int src_x, int src_y, int src_w, int src_h)
Копирует прямоугольную область src_x, src_y, src_w (ширина), src_h / (высота) рисунка src_im в рисунок dst_im со смещением dst_x, dst_y.
ImageCopyResized
Копирование части рисунка с масштабированием
int imagecopyresized (int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
Функция подобна ImageCopy(), но область рисунка масштабируется, так что его ширина и высота становятся равными dstW и dstH.
Цвета и палитра
ImageColorAllocate
Выделение цвета для рисунка
int imagecoloral locate (int im, int red, int green, int blue)
Возвращает индекс добавленного в палитру цвета, составленного из компонентов red (красный), green (зеленый), blue (синий).
Swhite = ImageColorAllocate ($im. 255. 255. 255);
// белый Sblack = ImageColorAl locate ($irp. 0. 0. 0).
// черный
ImageColorDeAllocate
Исключение цвета из палитры рисунка
int imagecolordeal locate (int im, int index)
$white - ImageColorAllocate($im. 255, 255. 255);
ImageColorDeAl locate($im. $white);
ImageColorSet
Замена цвета определенного элемента палитры
boo! imagecolorset (int im, int index, int red, int green, int blue)
Устанавливает для элемента палитры index рисунка im значения компонент цвета: red (красный), green (зеленый), blue (синий). При этом все части рисунка, закрашенные данным цветом, также изменят свой оттенок.
См. также imagecolorat().
ImageColorsForlndex
Получение цвета элемента палитры
array imagecolorsforindex (int im, int index)
Возвращает ассоциативный массив трех элементов: red, green, blue, содержащий значение компонентов цветности указанного цвета index.
См. также: imagecolorat() и imagecolorexact().
ImageColorExact
Получение индекса цвета палитры
int imagecolorexact ( int im, int red, int green, int blue)
Если точно соответствующего цвета в палитре не имеется, то возвращается -1.
См. также imagecolorclosest().
ImageColorClosest
Получение цвета палитры, наиболее близкого к указанному
int imagecolorclosest (int im, int red, int green, int blue)
Возвращает индекс цвета палитры рисунка. Близость вычисляется согласно RGB.
См. также imagecolorexact().
ImageColorResolve
Нахождение или создание указанного цвета
int imagecolorresolve (int im, Int red, int green, Int blue)
Возвращает индекс указанного цвета в палитре. Если такой цвет отсутствует, он создается.
См. также imagecolorclosest().
ImageGammaCorrect
Применение гамма-коррекции рисунка
Int Imagegammacorrect (int im, double inputgamma, double outputgamma)
ImageColorsTotal
Получение числа цветов в палитре
int imagecolorstotal (int im)
См. также: imagecolorat() и imagecolorsforindex().
ImageColorTransparent
Определение цвета прозрачности
int imagecolortransparent (int im [, int col])
Устанавливает (возвращает) индекс цвета палитры, используемого как прозрачный. Возвращает индекс текущего (или установленного) «прозрачного» цвета.
ImageColorAt
Получение индекса цвета пиксела
int imagecolorat (int im, int x, int y)
См. также: imagecolorset() и imagecolorsforindex().
Черчение фигур
ImageSetPixel
Установка пиксела
int imagesetpixel (int im, int x, int y, int color) Верхний левый угол рисунка имеет координаты (О, О).
См. также: ImageCreate() и ImageColorAllocate().
ImageLine
Черчение линии
int imageline (int im, int xl, int yl, int x2, int y2, int color)
ImageDashedLine
Черчение прерывистой линии
int imagedashedline (Int im, int xl, int yl, int x2, int y2, int col)
См. также ImageLine().
ImageRectangle
Черчение прямоугольника
int imagerectangle (Int im, int xl, int yl, int x2, int y2, int col) Левый верхний угол задается (xl, yl), а правый нижний — (x2, y2).
ImageFilledRectangle
Зарисовка прямоугольной области
int imagefilledrectangle ( int im, int xl, int yl, int x2, int y2, int col)
ImagePolygon
Черчение многоугольника
int imagepolygon (int im, array points, int numjreints, int col)
Аргумент points содержит координаты углов в виде: points[0] = xO, points[l] = yO, points[2] = xl, points[3] = yl и.т. д. num_points задает число углов. < /FONT >
См. также imagecreate().
ImageFilledPolygon
Закраска многоугольника
int imagefilledpolygon (int im, array points, int num_points, int col)
ImageArc
Рисование части эллипса
int imagearc (int im, int ex, int cy, int w, int h, int s, int e, int col)
ex, су задают центр эллипса, w и h — ширину и высоту, s и е — начальный и конечный угол в градусах, со! — цвет.
ImageFill
Заливка цветом ограниченной области
int imagefill (int im, int x, "int y, int col)
ImageFillToBorder
Заливка области, ограниченной бордюром
int imagefilltoborder (int im, int x, int y, int border, int col)
Индекс цвета окантовки задается аргументом border, а заливки — col. Заливка начинается от точки с координатами (х,у).
Шрифты и надписи
. ImageLoadFont
Загрузка шрифта
int image!oadfont (string file)
Загружает шрифт из файла file и возвращает назначенный ему идентификатор. Встроенные шрифты имеют идентификаторы 1-5 (меньший-больший). Формат файла зависит от системы. В общем случае он имеет следующую структуру:
Байты
Тип
Описание
0-3
int
Число символов в файле
4-7
int
Код первого символа (обычно 32 — пробел)
8-11
int
Ширина символов в пикселах
12-15
int
Высота
16-...
int
Массив ланных символов (байт на пиксел для каждого символа). Общий размер: (псЬаг5хвысотахширипа) байт.
См. также: ImageForitWidth() и ImageFontHeight().
ImageFontHeight
Установка высоты шрифта
int imagefontheight (int font)
См. также: ImageFontWidth() и ImageLoadFont().
ImageFontWidth
Установка ширины шрифта
int imagefontwidth (int font)
См. также: ImageFontHeight() и ImageLoadFont().
ImageChar
Вывод символа горизонтально
int imagechar ( int im, int font, int x, int y, string c. int col) Шрифт указывается его номером font (1-5 — встроенные шрифты).
См. также imageloadfont().
ImageCharUp
Вывод символа вертикально
int imagecharup (int im, int font, int x, int y, string c, int col)
См. также image!oadfont().
ImageString
Вывод строки горизонтально
int imagestring (int im, int font, int x, int y, string s, int col)
См. также ImageLoadFont().
ImageStringUp
Вывод строки вертикально
int imagestringup (int im, int font, int x, int y. string s. int col)
Возвращает массив из 8 элементов, определяющих прямоугольник вывода текста:
нижний левый угол, Х-координата;
нижний левый угол, Y-координата;
нижний правый угол, Х-координата;
нижний правый угол, Y-координата;
верхний правый угол, Х-координата;
верхний правый угол, Y-координата;
верхний левый угол, Х-координата;
верхний левый угол, Y-координата.
Возвращаемые координаты зависят от угла наклона строки (точкой отсчета служит нижний левый угол первого символа). Координаты могут иметь отрицательные значения. Функция требует библиотеки GD и FreeType
См. также ImageTTFText().
ImageTTFText
Рисование текста шрифтом TrueType
array imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text)
Выводит строку text в рисунок im - в координаты х, у (верхний левый угол является началом координат), под углом angle (задается в градусах) цветом col, используя шрифт TrueType из файла fontfile. Аргументами х, у задастся базовая точка первого символа (нижний левьн"! угол символа), что отличает данную функцию от ImageString(), где координаты х, у определяют верхний правый угол символа. Строка текста может включать символьные последовательности UTF-8 (в виде {) для вывода символов с кодами, большими 255.
При использовании отрицательного значения индекса цвета отключается сглаживание шрифта (antialiasing).
Возвращает массив из 8 элементов, определяющих прямоугольник вывода текста подобно функции imagettfbbox(). Функция требует библиотеки GD и FreeType.
Следующий пример выводит строку по центру рисунка:
$gi =
ImageCreate(200.100):
$bg =
ImageColorAllocate($gi.0.220.0);
$tx =
ImageColorAllocate($gi.25.2.228).
$w=imagesx(Igi): // ширина рисунка
$h=imagesy($9i): // высота
ImageFilledRectang]6($gl.0.0.$w,$h.$bg):
$szf=20; // размер шрифта
$ang=240; // угол поворота строки
$str="Heyou". // текст строки
$font="symbol.ttf": // файл шрифта
$sz=imagettfbbox($szf.$ang.$font.$str).
$sdx=$sz[4]/2; $sdy=($sz[7]+$sz[3])/2;
imagettftext($gi.$szf.$ang.
$w/2-$sdx.$h/2-$sdy.$tx.$font.$str);
//header("content-type, image/png"):
ImagePng($gi."n2.png"); ?>
См. также ImageTTFBBox().
ImagePSLoadFont
Загрузка из файла шрифта PostScript Type 1 int imagepsloadfont (string filename)
Возвращает дескриптор загруженного шрифта или FALSE при ошибке (также выводится предупреждение).
См. также ImagePSFreeFont().
ImagePSFreeFont
Выгрузка шрифта PostScript Type 1
void imagepsfreefont (int fontindex)
См. также ImagePSLoadFont().
ImagePSEncodeFont
Установка схемы перекодировки текста
int imagepsencodefont (int fontjindex, string encodingfile)
Загружает файл перекодировки encodingfile для шрифта font_index. Поскольку шрифты PostScript по умолчанию не используют символы с кодами, большими 127, перекодировка требуется при необходимости использования не английского языка. Формат файла описан в документации Tllibs, также с библиотекой поставляются 2 готовых файла: IsoLatinl.enc и IsoLatinZ.enc.
Если перекодировка используется постоянно, установите параметр ps.default_encoding в файле конфигурации со значением имени файла перекодировки, который будет загружаться автоматически.
Расчет площади, занимаемой строкой шрифта PostScript Type 1
array imagepsbbox (string text, int font, ifft size [, int space [, int tightness [, float angle]]])
Расчеты производятся на основании аргументов: Size — размер шрифта в пикселах; Space — изменение размера пробелов по отношению к нормальному (может быть отрицательным); Tightness — промежутки между символами по отношению к нормальному (может быть отрицательным); Angle — угол наклона строки в градусах. Значения space п tightness измеряются в долях пробела (1/1000).
Аргументы space, tightness, angle не обязательны.
Результаты расчета недостаточно точны. Функция возвращает массив:
0 — нижний левый угол, Х-координата;
1 — нижний левый угол, У-координата;
2 — верхний правый угол, Х-координата;
3 — верхний правый угол, Y-координата.
См. также imagepstext().
ImagePSText
Вывод текста поверх рисунка шрифтом PostScript Type 1
array imagepstext (int image, string text, int font, int size, int foreground, int background, int x, int у [, int space [, int tightness [, float angle [, int antialias_steps>)
Координаты х, у указывают левый нижний угол первого символа.
Аргументами Foreground и Background задаются цвета текста и фона (фон необходим только для сглаживания шрифта). Аргумент Antialias_steps позволяет указать число цветов, используемых при сглаживании текста (допустимые значения 4 и 16). Для шрифтов размером меньше 20 используйте большее значение, так как это улучшает читабельность; для больших шрифтов используйте меньшее значение, так как это увеличивает быстродействие.
Функция возвращает массив, подобно imagepsbbox().
См. также imagepsbbox().
Ming для Flash
Ming является библиотекой с открытым исходным кодом (LGPL), позволяющей создавать анимации SWF («Flash»). Ming поддерживает почти все возможности Flash 4, включая: фигуры (shapes), цветовые переходы (gradients), картинки (bitmaps: jpeg), превращения (morphs или «shape tweens»), текст, кнопки, действия, клипы (sprites), потоковую музыку трЗ и преобразования цветов; единственное, чего не поддерживает Ming, это звуковые события. Использование Ming предпочтительнее модуля libswf. Ming работает на большинстве платформ, включая Windows, использует РНР объекты для представления объектов SWF и продолжает разрабатываться1 (адрес разработчиков ming@opaque.net). Библиотеку Ming можно загрузить с сайта: http://www.opaque.net/ming/.
Все размеры указываются в единицах «твипс» (twips), что равно I 1/20 пиксела. Но масштаб может изменяться проигрывателем.
Ming использует PHP-объекты тринадцати классов:
swfmovie();
swfshape();
swfdisplayitem();
swfgradient();
swfbitmap();
swf fill ();
swfmorph();
swftext();
swffont();
swftextfield();
swfsprite();
swfbutton();
swfaction().
SWFMovie — объект анимации SWF 4
SWFMovie->output
Вывод созданной анимации
void swfmovie->output (void)
Для того чтобы браузер правильно воспринял передаваемый ему файл, используйте PHP-команду отсылки заголовка до вывода анимации:
См. также swfmovie->save().
SWFMovie->save
Сохранение анимации в файле
void swfmovie->save (string filename)
См. также output().
SWFMovie->add
Добавление компонентов анимации
void swfmovie->add (resource instance)
Этим методом можно добавлять объекты различных типов: фигуры, текст, шрифты и т. п. Для отображаемых объектов (shape, text, button, sprite) возвращается дескриптор объекта SWFDisplayltemO, внесенный в список отображения. При многократном добавлении одного объекта каждый раз будет возвращаться другой дескриптор.
См. также: swfmovie->remove() и пример в swfdisplayitem->rotateto().
SWFMovie->remove
Удаление объекта из списка отображения
void swfmovie->remove (resource instance) Функция противоположна swfmovie->add().
SWFMovie->setbackground
Установка цвета фона
void swfmovie->setbackground (int red, int green, int blue)
Цвет задается значениями (0-255) компонентов: красного, зеленого и синего.
SWFMovie->setdimension
Установка ширины и высоты анимации
void swfmovie->setdimension (int width, int height)
SWFMovie->setrate
Установка частоты кадров анимации
void swfmovie->setrate (int rate)
Значение rate — число кадров в секунду. Анимация будет тормозиться, если проигрыватель не будет успевать перерисовывать кадры. Если одновременно проигрывается звук, то для его нормального воспроизведения частота перерисовки будет при необходимости снижаться.
Заметьте, что проигрываться будет не весь файл фонового звука целиком, а только та часть, которая успеет воспроизвестись за время воспроизведения установленного числа кадров при текущей частоте кадров.
$m = new SWFMovie() ; $m->setRat.eC10.0); // кадров в секунду $m->streamMp3("distortobass.mp3"): // use your own MP3 // длительность проигрывания анимации: 100/10.0 = 10 секунд $m->setFrames(100); // кадров в анимации headert'Content-type: application/x-shockwave flash'): $m~>output(). ?>
SWFDisplayltem - объект списка отображения
Используется для хранения компонентов анимации; после того, как объекты shape, text, sprite или button декларированы (созданы экземпляры классов swfshape(), swfbutton(), swftext(). swfspnte()) и добавлены в анимацию (методом swfmovie->add()), для каждого из них возвращается дескриптор (объект типа SWFDisplayltem), который можно использовать для перемещения, вращения, масштабирования и наклона объекта.
SWFDisplayltem - >moveTo
Репозиционирование объекта
void swfdisplayitem->moveto ( int x, int у) Указываются абсолютные координаты.
См. также swfdisplayitem->move().
SWFDisplayltem->move
Смещение объекта
void swfdisplayitem->move (int dx. int dy)
Указываются координаты относительно текущей позиции.
Указывается относительный угол поворота в градусах.
См. также swfdisplayitem->rotateto().
SWFDisplayltem->skewXTo
Установка наклона по X
void swfdisplayitem->skewxto (double d)
Указывается коэффициент смещения основания вправо, то есть 1.0 означает искажение в 45 градусов. Возможны отрицательные значения для смещения основания влево.
См. также: swfdisplayitem->skewx(), swfdisplayitem->skewy() и swfdisplayitem-> skewyto().
SWFDisplayltem->skewX
Наклон объекта по X
void swfdisplayitem->skewx (double d)
SWFDisplayltem->skewYTo
Установка наклона по Y
void swfdisplayi-tem->skewyto (double degrees)
Указывается смещение правой стороны вниз.
SWFDisplayltem->skewY
Наклон объекта по Y
void swfdisplayitem->skewy (double ddegrees)
SWFDisplayltem - >setDepth
Установка порядка отображения (z-order)
void swfdisplayitem->setdepth (double depth)
Размещает объект на указанном уровне. (При добавлении следующий объект размещается поверх предыдущего.)
SWFDisplayltem->remove
Удаление объекта из анимации
void swfdisplayitem->remove (void)
SWFDisplayltem->setName
Присвоение объекту имени
void swfdisplayitem->setname (string name)
Используется для возможности обращения к объекту при написании программ действий. Полезно только для спрайтов.
SWFDisplayltem->setRatio
Установка увеличения объекта
void swfdisplayitem->setratio (double ratio)
Полезно только для объектов SWFMorph().
Приведенный ниже пример создает три концентрических изменяющихся кольца.
void swfdisplayltem->addco"lor ([integer red [. integer green [, integer blue [, integer a>)
SWFDisplayltem->multColor
Умножение значений компонентов цвета
void swfdisplayitem->multcolor ([integer red [. integer green [, integer blue [. integer a>)
// note use your own picture :-) $s = new SWFShape(): $5->setRightFilU$s->addFill($b)): $s->drawLine($b->getWidth(). 0): $s->drawLine(0. $b->getHeight()): $b->drawLine(-$b->getWidth(). 0). $s->drawLine(0. -$b->getHenght()); $m = new SWFMovieO $m->setDimension($b->getWTdth(). $b->getHeight()). $1 - $m->add($s); for($n-0: $n<-20: ++$n) { $v>multColor(1.0-$n/10. 1.0. 1 0). $1 >addColor(Oxff*$n/20. 0. 0): $m->nextFrame(): } headerCContent type: application/x-shockwave-flash'); $m->output(). ?>
SWFShape - объект Фигура
$m->setDimension(800. 800): // размер рисунка $m->setbackground(50.100.200). // цвет фона $s = new SWFShape() . $s->setLine(160. Ox7f. 0. 0). // стиль линии $s->setRightFill($s->addFill(Oxff. 0. 0)): // заливка $s->movePenTo(200. 200): // начальная точка $s->drawLineTo(620. 400): $s->drawLine(-200. 60): $s->drawCurveTo(400. 0. 200. 200): $m->add($s): headert'Content-type- application/x-shockwave-flash'): $m->output(): ?>
SWFShape->setLine
Установка типа линий фигуры
void swfshape->setline (Int width [, integer red , integer green , integer blue [, integer a]])
Число аргументов может быть 1, 4 или 5 (но не 3 или 2). Для линии задается ширина width, цвет (значениями компонент красного, зеленого и синего) и альфа-параметр.
Возможны три стиля заливки (см. синтаксис): цветом, рисунком, градиентная заливка.
Для ригунка задастся дескриптор объекта swfbitmap() и необязательный параметр SWFFILL_CLIPPED_BITMAP (обрезанный рисунок) или SWFFILL_ TILED_BITMAP (размноженный рисунок, по умолчанию).
Для градиентной заливки задается дескриптор объекта swfgradientO и необязательный параметр SWFFILL_RADIAL_GRADIENT или SWFFILL_ LINEAR_GRAOIENT (линейный, по умолчанию).
Возвращает дескриптор объекта swffill() для использования в функциях swfshape->setleftfill() и swfshape->setrightfill().
void swfshape->setleftfill ( int red. int green, int blue [. int a])
Если браузер отказывается закрашивать фигуру, попробуйте закраску с другой стороны.
Второй вариант является аббревиатурой swfshape->setleftfiTI($s-> addfill($r. $g, $b [, $a]));.
См. также swfshape->setrightfill().
SWFShape->setRightFill
Заливка фигуры направо
void swf shape->setnghtf nil (swfgradient fill)
void swfshape->setrightfill (int red. int green, int blue [, int a])
См. также swfshape->setleftfi"ll().
SWFShape->movePenTo
Задание точки вывода
void swfshape->raovepento (integer x, integer y)
Указывается точка, от которой будет чертиться фигура.
См. также: swfshape->movepen(), swfsh"ape->drawcurveto(), swfshape-> drawlineto() и swfshape->drawline().
SWFShape->movePen
Смещение точки вывода
void swfshape->movepen (integer dx, integer dy)
См. также: swfshape->movepento(), swfshape->drawcurveto(), swfshape-> drawlineto() и swfshape->drawline().
SWFShape->drawLineTo
Черчение линии
void swfshape->drawlineto (integer x, integer y)
Создает линию (используя текущий стиль) от текущей точки вывода до указанной.
См. также: swfshape->movepento(), swf shape ->drawcurveto(), swfshape-> movepen(), swfshape->drawline().
SWFShape->drawLine
Проведение отрезка
void swfshape->drawline (integer dx, integer dy)
См. также: swf shape->movepento(), swfshape->drawcurveto(), swfshape-> movepen() и swfshape->drawlineto().
SWFShape->drawCurveTo
Черчение кривой void swfshape->drawcurveto (int controlx, int controly, int endx, int endy)
Создает квадратичную кривую (используя текущий стиль) от текущей точки вывода до указанной (endx, endy), используя точку (endx, endy) как ориентирующую.
См. также: swfshape->drawlineto(), swfshape->drawline(), swfshape-> movepento() и swfshape->movepen().
SWFShape->drawCurve
Проведение кривой
void swfshape->drawcurve (int controldx. int controldy, int dx, int dy)
Координаты указываются относительные.
SWFGradient — объект градиентной заливки
Градиентные заливки используются для заполнения фигур методом swfshape->addfilH).
В результате выполнения этого простого примера на фоне черно-белой градиентной заливки будет создан по центру красноватый диск.
set.Dimension(320. 240): $s = new SWFShape():// first gradient- black to white $g = new SWFGradient(); $g->addtntry(0 0. 0. 0. 0). $g->addEntry(1.0. Oxff. Oxff. Oxff); 1 $f = $s->addFill($g. SWFFILL_LINEAR_GRADIENT): $f->scaleTo(0.03); $f-xnoveTo(160. 120)- $s->setRightFill($f). $s->drawLine(320, 0). $s->drawLine(0. 240): $s->drawLine(-320. 0): $s->drawLme(0. -240): $rc->add{$s). $s - new SWFShape(): // second gradient- radial gradient from red to transparent $g = new SWFGradient(); $g->addEntry(0.0. Oxff. 0. 0. Oxff): $g->addEntry(1.0. Oxff. 0. 0. 0): $f = $s->addF111($g. SWFFILL_RADIAL_GRADIENT): $f->scaleTo(0.05): $f->moveTo(160. 120): $s->setRightFill($f): $s->drawLine(320. 0): $s->drawline(0. 240): $s->drawLine(-320. 0): $s->drawLine(0. -240): $m->add($s): header('Content-type: application/x-shockwave-flash'): $m->output(): ?>
SWFGradient- >add Entry
Добавление экстремума градиентной заливки
void swfgradient->addentry (double ratio, int red, int green, int blue [, int a])
Аргумент ratio указывает позицию диапазона градиентной заливки (от 0 до 1), для которой указывается цвет. Необязательным аргументом а указывается прозрачность (0—255).
SWFBitmap - загрузка рисунка
new swfbitmap (string filename [, integer alphafilename])
i Загружает рисунок из файла JPEG или DBL-файла filename. Можно указать дополнительный рисунок alphafilename для использования в качестве альфа-маски. JPEG-рисунок должен быть в формате baseline (frame 0), другие форматы — baseline optimized и progressive scan jpeg — не поддерживаются.
Импортировать рисунки PNG напрямую нельзя, хотя можно использовать утилиту png2dbl для конвертирования в формат DBL («define bits lossless»).
С помощью этого объекта можно трансформировать (масштабировать, наклонять, вращать) рисунки и градиентные заливки, используемые как заполнители. Этот объект создается методом swfshape ->addfil1().
SWFFill->moveTo
Установка точки, от которой начинается заполнение
void swffill->movetc (integer x, integer y)
SWFFill->scaleTo
Установка масштаба заполнителя
void swffill->scaleto (integer kx, integer ky)
SWFFill->rotateTo
Установка угла поворота заполнителя
void swffill->rotateto (double degrees)
SWFFill->skewXTo
Установка угла х-наклона заполнителя
void swffill->skewxto (double x)
Указывается коэффициент смещения основания вправо, то есть 1.0 означает искажение в 45 градусов. Возможны отрицательные значения для смещения основания влево.
SWFFill->skewYTo
Установка у-наклона заполнителя
void swffill->skewyto (double у)
Указывается смещение правой стороны вниз.
SWFMorph — объект Превращение
Объект представляет собой превращение одной фигуры в другую («shape tween»).
В приведенном ниже примере большой красный квадрат, вращаясь, превращается в маленький синий.
$t - new SWFText(): $t->setFont($f): $t->moveTo(200. 2400). $t->setColor(Oxff. Oxff. 0): lt->setHenght(1200): $t->addString("PHP generates Flash with Ming!!"); $m = new SWFMovie(); $m->setDimension (5400. 3bOO). I $m->add($t). headerСContent-type: application/x-shockwave-flash'); $m->output(): ?>
SWFText->setFont
Установка текущего шрифта
void swftext->setfont (font)
SWFText->setHeight
Установка высоты шрифта
void swftext->setheight ( integer height) Значение но умолчанию — 240.
SWFText->setSpacing
Установка расстояния между символами
void swftext->setspacing (double spacing)
Значение по умолчанию — 1.0. Значение 0 указывает, что следующий символ будет выводиться непосредственно за последним. Вычисления не отличаются точностью.
SWRext->setColor
Установка цвета шрифта
void swftext->setcolor (int red, int green, int blue [, int a]) Значение по умолчанию — черный.
SWRext->moveTo
Установка позиции вывода
void swftext->moveto (integer x. integer y)
SWFText->addString
Рисование строки
void swftext->addstring (string string)
SWFText->getWidth
Вычисление ширины строки
double swftext->addstring (string string)
Возвращает размер с учетом размеров шрифта, масштаба и т. п.
SWFFont — Загрузка шрифта
new swffont (string filename)
В аргументе указывается имя FDB-файла или имя шрифта, поддер живаемого браузером. Формат FDB («font definition block») содер жит описание шрифта следующего вида: «SWF DefineFont2 block». Файл FDD можно получить из файлов-шаблонов «SWT Generator» с помощью утилиты makefdb библиотеки ming.
Три специальных шрифта должны быть доступны всегда: _serif, _sans и _typewriter.
Дескриптор шрифта, возвращенный swffont(), используется как аргумент методов SWFText->setFont() и SWFTextField->setFont().
swffont->getwidth
Вычисление ширины строки
int swffont->getwidth (string string)
Метод подобен методу SWFText(), но используется значение масштаба по умолчанию.
SWFTextField — объект текстового поля
new swftextfield ([int flags])
Текстовые ноля менее функциональны, нежели объекты swftext(): их нельзя вращать, непропорционально масштабировать, наклонять, но они могут использоваться для ввода в формах и использовать шрифты браузера.
Поведение поля можно изменить, указав необязательные флаги; следующие значения можно комбинировать, используя битовый оператор ИЛИ:
SWFTEXTFIELD_NOEDIT — нередактируемое поле;
SWFTEXTFIELD_PASSWORD — скрывает вводимые данные;
SWFTEXTFIELD_DRAWBOX — чертит обрамление;
SWFTEXTFIELD_MULTILINE — многострЪчный режим;
SWFTEXTFIELD_WORDWRAP — позволяет автоматически разносить длинный текст на несколько строк;
SWFTEXTFIELD_NOSELECT — делает текст поля невыделяемым.
Например, следующая строка создает поле с нсвыделяемым и нередактируемым текстом:
Этот метод позволяет добавлять объекты swfshape(), swfbutton(), swftext(), swfaction(), swfsprite(). Метод возвращает дескриптор объекта в списке отображения.
Возможны флаги: SWFBUTTONJJP, SWFBUTTONJWER, SWFBUTTON_DOWN, SWFBUHON_ HIT. Кнопка SWFBUTTON_HIT не отображается, а определяет область, реагирующую на нажатия.
Назначает обработчик событий кнопки (action — дескриптор объекта swfactionO) для следующих событий (flags): SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SUFBUTTON_MOUSEUP, SWFBuTTONJOUSEUPOuTSIDE, SWFBUTTON_ MOUSEDOWN, SWFBUnON_DRAGOUT и SWFBUTTON_DRAGOVER.
SWFbutton->setAction
Синоним addAction (shape, SWFBUTTON_MOUSEUP)
void swfbutton->setaction (resource action)
Назначает кнопке действие, выполняемое при нажатии.
SWFAction — объект Действие
Объект компилирует сценарий в действие.
Синтаксис сценариев подобен упрощенному синтаксису С. SWF code machine не позволяет многих вещей, например, достаточно сложно реализовать вызовы пользовательских функций.
Компилятор распознает следующие инструкции:
break;
for;
continue;
if;
el se;
do;
while.
Все данные не имеют типа; значения SWF-действий сохраняются как строки. Следующие функции могут использоваться в выражениях:
tirae() — возвращает число миллисекунд, прошедшее с начала проигрывания анимации;
randora(seed) — возвращает случайное число из диапазона (0-seed);
length(expr) — возвращает длину выражения;
int(number) — округление до ближайшего целого;
concat(expr, expr) — соединение строк;
ord(expr) — возвращает ASCII-код данного символа;
chr(num) — возвращает символ с указанным ASCII-кодом;
substr(stnng, location, length) — возвращает часть строки string длиной length, начиная с позиции location.
Также могут быть использованы дополнительные команды:
duplicateClipCclip, name, depth) — дублирует клип (sprite), присваивая ему имя name и располагая на уровне depth;
trace(expr) — записывает сообщение в журнал отладки (пока команда бесполезна);
startDragCtarget. lock, [left, top, right, bottom]) — начать перетаскивание объекта target. Аргумент lock определяет, блокировать ли мышь: 0 (нет) или 1 (да). Можно указать область, в которой осуществляется перетаскивание;
stopDrag() — прекратить перетаскивание;
callFrame(expr) — вызвать именованный кадр как функцию;
getURUurl, target, [method]) — загрузить данный url в именованную область target (имя кадра или зарезервированное значение «_level()» для замены текущей анимации или «_levell» для загрузки анимации поверх текущей). В необязательном аргументе можно указать метод отсылки: POST или GET для отсылки серверу , данных;
toggleQuality() — переключиться между низким и высоким качеством;
stopSounds() — прекратить проигрывание звуков;
gotoFrame(num) — перейти к кадру с указанным номером (нумерация начинается с 0);
gotoFrame(name) — перейти к именованному кадру;
setTarget(expr) — установить контекст действия;
frameLoaded(num) — может использоваться в условных и циклических конструкциях для проверки того, был ли уже загружен кадр с указанным номером. Можно использовать альтернативное выражение /:framesLoaded.
Клипы и анимации имеют следующие свойства:
х;
у;
xScale — масштаб по горизонтали;
yScale — масштаб по вертикали;
currentFrame — текущий кадр (только для чтения);
total Frames — общее число кадров (только для чтения);
alpha — уровень прозрачности;
visible — видимость (l=on, 0=off);
width — (только для чтения);
height — (только для чтения);
rotation — угол поворота;
target — (только для чтения);
framesLoaded — (только для чтения);
name;
dropTarget — (только для чтения);
url — (только для чтения);
highQuality — качество (1=высокое, 0=низкое);
focusRect;
soundBufTime.
Например, установить значение позиции спрайта можно выражением Bох.х = 100;. Поскольку Flash сохраняет все компоненты анимации в древовидной структуре (наподобие файловой системы Unix), начальный слеш указывает на массив объектов верхнего уровня; если спрайт box находится внутри спрайта biff, то выражение записывается так: box/biff.x = 100;.
Следующий пример перемещает красный квадрат по экрану.
Приведенный ниже пример отслеживает перемещение мыши по экрану.
$m = new SWFMovie(): $ra->setRate(36.0); $m->setDimension(]200 800): $m->setBackgrouncK(), 0. 0): /* пустой спрайт для отслеживания х и у координат мыши */ $i = $m->add(new SWFSpriteO): $1->setName('mouse'); $m->add(new SWFActionC' startDrag('/mouse'. 1): ")): // antialiasing можно выключить для квадратов. $m->add(new SWFActionC' this quality = 0. ')): $r = new SWFMorph() :/* morphing box */ $s = $r->getShapel(): $s->setLeftFill(Ss->addFill(Oxff. Oxff. Oxff)): $s->movePenTo(-40. -40). Ss->drawLine(80. 0). $s->drawLine(0. 80). $s->drawLine(-80. 0); $s->drawl_me(0. -80): $s = $r->getShape2(): Ss->setLeftFill($s->addFill{OxOO. 0x00. 0x00)): $s->movePenTo(-l. -1). . $s->drawLine(2. 0): $s->drawLine(0. 2): $s->drawLine(-2. 0). $s->drawl_ine(0. -2). $box = new SWFSprite(): $box->add(new SWFActionC' stop(): ")): $1 = $box->add($r) for($n=0; $n<-20: ++$n) { $1->setRatio($n/20). $box->nextFrame(): ) /* споайт контейнер позволяет многократно использовать действие */ Scell - new SWFSpnteO: $1 - $cell->add($box): $i->setNarne( 'box'): $cell->add(new SWFActionC' setTarget('box'): /* x - родительская координата, i.e. (..) x */ dx = (/mouse x + randoni(6)-3 - . ,x)/5 dy = (/mouse.у + random(6)-3 - .. y)/5: gotoFramednt(dx*dx + dy*dy)): ")): $cell->nextFrame(): Scell->add(new SWFActionC' gotoFrame(O): playO; ")); Scell->nextFrame(): /* добавим ячейки в анимацию */ for($x-0: $x<12: ++$х) { for($y-0- $y<8: ++$у) { $i = $m->add($cell): $i->moveTo(100*$x+50. 100*$у+50): } } $in->nextrrane(): $m->add(new SWFAcbon'" qotoFrame(l): playO. ")): heacter('Content-type, application/x shockwave-flash1): $m->output(): ?>
Тот же сценарий, но с цветными шариками...
$m->setDimension(11000. 8000): $m-->setBackground(OxOO. 0x00. 0x00): $m >add(new SWFActionC' this.quality = 0 /frames.visible = 0: startDrag\'/mouse'. 1); ")): // mouse tracking sprite $t nev. SWFSpnte(): $1 = $m->add($t): $1->setNdme('mouse'): $g = new SWFGradientO $g->addEntry (0. Oxff. Oxff. Oxff. Oxff). $g->addEntry (0.1. Oxff. Oxff. Oxft. Oxff)' $g->addEntry (0 5. Oxff. Oxff. Oxff. Ox5f): $g->addEntry (1.0. Oxff. Oxff. Oxff. 0). // gradient shape thing $ь - nev» SWFShape() . $f - $s->addFill ($g. SWFFILL_RADiAL_GRADIENT): $f->scaleTo(0.03): $s->setRightFni($f): $5->movePenTo(-600. -600): $s-> drawLine(1200. 0): $s->drawLine (0. 1200): $s->drawLine(-1200. 0): $s->drawLine(0. -1200): // need to make this a sprite so we can multColor it $p = new SWFSprite(): $p->add($s): $p->nextFrame(); II put the shape in here, each frame a different color Sq = new SWFSprite() : $q->add(new SWFAction("gotoFrame(random (7)+l). stop():")): $1 = $q->add($p); $i->multColor(l.0. 1.0. 1.0): $q->nextFrame(): $i->multColor(1.0. 0.5. 0.5): $q->nextFrame(). $i->multColor(1.0. 0.75. 0.5): $q->nextFramef): $i->multColor(1.0. 1.0. 0.5): $q->nextFrame(): $l->multColor(0.5. 1.0. 0.5): $q->nextFrame(): $i->multColor(0.5. 0.5. 1.0): $q->nextFrame(): $i->multfolor(1.0. 0.5. 1.0): $q->nextFrame(). // finally, this one contains the action code $p = new SWFSpriteO: $1 = $p->add($q): $i->setNameOframes'): $p->add(new SWFAction() dx = (/:mousex-/:lastx)/3 + random(10)-5: dy = (/:mousey-/:lasty)/3: x = /.mousex: у = /:mousey; alpha = 100: ")): $p->nextFrame(); $p->add(new SWFActionC this.x = x: this у = у: this.alpha alpha: x += dx: у += dy: dy +- 3; alpha -= 8; ")): $p->nextFrame(). $p->add(new SWFActlonC'prevFrame(): play():")): $p->nextFrame(). Si = $m->add($p): $1 ->setName('frames'): $m->nextFrame(). $m->add(new SWFActlonC1 lastx - mousex: lasty = mousey: mousex - /mouse.x: mousey = /mouse.у: ++num: if(num == 11) num = 1: removedip('char' & num): duplicateClTp(/frames. 'char' & num. num): ")): $m->nextFrame(): $m->add(new SWFActlonC'prevFrame(). play():")): headert'Content-type: application/x-shockwave-flash'): $m->output(): ?>
Следующий пример отслеживает нажатия клавши. Необходимо, чтобы фокус окна был активен.
$р = new SWFSprite(): $р->add(new SWFAction("stop():")): Schars - "abcdefghijklmnopqrstuvwxyz". "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "1234567890!l3|$^"&*()_+-=/[]{} ::..<>?'-"; $f = new SWFFont("_sans"): for($n-0: $nremove($i); $t = new SWFTextFieldO. $t->setFont($f). $t->setHeight(240): $t->setBounds(600.240): $t->align(SWFTEXTFIELD_ALIGN_CENTER): $t->addString($c): $т = $p->add($t); $p->labelFrame($c); $p->nextFrame(): ) /* область нажатия для кнопки - кадр целиком */ Ss = new SWFShape(): is->setFillStyleO($s->addSolidFill(0. 0. 0. 0)). ;s->drawline(600. 0); :5->drawLine(0. 400). Ss->drawLine(-600. 0); Ss->drawLine(0. -400): /* кнопка проверяет нажатую клавишу и переходи к соответствующему кадру */ 5b = new SWFButton(): Sb->addShape($s. SWFBUTTON_HIT): for($n=0; $naddAction(new SWFActionC' setTargeK'/char');gotoFrame('$c');"). SWFBUTTON_KEYPRESS($c)): $n = new SWFMovie(); Sm->setDimension(600.400): S-. *= $m->add($p): Si->setName( 'char'); $i->moveTo(0.80), Sra->add($b) heeder('Content-type: application/x-shockwave-flash'): Sa->output(). ?>
PDF-документы
PDF-функции позволяют PHP создавать PDF-файлы с помощью библиотеки PDF, созданной Томасом Мерзем (http://www.pdflib.com/ pdflib/index.html); также могут потребоваться библиотеки JPEG (ftp:// ftp.uu.net/graphics/jpeg/) и TIFF (http://www.libtiff.org/).
С pdflib поставляется хорошая документация, описывающая возможности библиотеки. Имена функций и аргументы идентичны в библиотеке и РНР. Размеры и координаты измеряются в единицах Postscript (72 на дюйм), но это зависит от выбранного разрешения.
Аналогом библиотеки является ClibPDF (см. ниже).
Версии ниже 3.0 pdflib не поддерживаются в РНР 4. Для компиляции РНР с библиотекой pdflib используйте параметр — enable-shared-pdftib.
void pdf set_info ( int pdf_document. string fieldname, string value)
Возможные поля fieldname: «Subject», «Title», «Creator», «Author», «Keywords» и одно, определяемое пользователем. Функция должна вызываться до создания страниц.
Эта функция заменяет собой pdf_set_infoj<;e.ywords(), pdf_set_info_ title(), pdf_set_info_subject(), pdf_set_info_creator(), pdf_set_info_ sybject().
pdf_open
Открытие нового документа pdf 'int pdf_open (int file)
Функция делает файл, открытый функцией fopen(), документом pdf. Если не указывать дескриптор файла, он создается в памяти и затем может выводиться на стандартный поток вывода или отсылаться браузеру. Функция возвращает дескриптор документа, который следует указывать в последующих pdf-функциях.
Аргументы height и width задают высоту и ширину страницы. После внесения на страницу информации ее следует закрыть функцией pdf_end_page().
См. также pdf_end_page().
pdf_end_page
Завершение страницы
void pdf_end_page (int pdf_docuraent)
После этого модификация этой страницы невозможна.
См. также pdf_begin_page().
pdf_show
Вывод текста в текущую позицию
void pdf_show (int pdf_document, string text)
Для вывода используются текущая позиция и текущий шрифт.
См. также: pdf_show_xy(), pdf_show_boxed(), pdf_set_text_pos(), pdf_set_ font().
pdf_show_boxed
Вывод текста в прямоугольную область
int pdf_show_boxed (int pdfjJocument, string text, double x, double y. double width, double height, string mode [, string feature])
Левый нижний угол области вывода задается (х,у); высота и ширина — height, width. Аргумент mode определяет выравнивание текста: если высота и ширина равна нулю, то возможны значения: «left», «right» или «center», если они не равны нулю, то — «justify» или «full justify».
Если аргумент feature содержит значение «blind», текст не отображается.
Возвращает число символов, которые не поместились в указанный прямоугольник.
Аргумент вида кодировки encoding может принимать значения: «win-ansi» (по умолчанию), <-builtin», «host», «macroman» и т. п. Если для последнего аргумента задано значение 1, шрифт будет внедрен в документ pdf (иначе, нет). Если шрифт распространен, внедрять его не следует из-за увеличения размера документа.
Функция должна вызываться после pdf_begin_page().
pdf_ set_ leading
Установка промежутка между строками текста void pdf_set_leading (int pdf_document, double distance) Используется при выводе текста функцией pdf_continue_text().
Расстояние между строками может быть установлено функцией pdf_set_leading().
См. также: pdf_show_xy(), pdf_set_leading(), pdf_set_text_pos().
pdf_stringwidth
Вычисление ширины текста
double pdf strnngwidth (int pdf document, string text)
При вычислении длины строки используется текущий шрифт. Предварительно шрифт должен быть установлен с помощью pdf_set_font().
См. также pdf_set_font().
pdf_save
Сохранение текущих установок
void pdf_save (int pdf_document)
Действует подобно команде postscript gsave. Полезна при необходимости масштабировать или развернуть объект, не воздействуя на другие объекты. pdf_save() требует, чтобы затем была вызвана функция pdf_restore().
См. также pdf_restore().
pdf_restore
Восстановление ранее сохраненных установок
void pdf_restore (int pdf_document)
Восстанавливает установки, сохраненные pdf_save(). Действует подобно команде postscript grestore.
// всякие вращения и трансформации ... pdf_reitore($pdf) ?>
См. также pdf_save().
pdf_translate
Установка начала системы координат
j void pdf_translate (int pdf_document, double x, double y) Координаты указываются относительно текущей точки отсчета. Затем, до начала рисования объектов, требуется установить текущую точку.
Левый нижний угол задается (х,у); высота и ширина — height, width.
См. также pdf_stroke().
pdf_closepath
Завершение текущего пути
void pdf_closepath (int pdf_document)
Чертит линию от текущей точки до точки, где начиналась первая линия. Многие функции, например pdfjnovetoO, pdf_circle(), pdf_rect(), начинают новый путь.
pdf_stroke
Заштриховка пути
void pdf_stroke (int pdf_document)
Текущий путь — это совокупность всех линий. Без этой функции линии начерчены не будут.
См. также: pdf_closepath(), pdf_c1osepath_stroke().
pdf_closepath_stroke
Черчение и закрытие пути
void pdf_closepath_stroke (int pdf_document)
Это комбинация pdf_closepath() и pdf_stroke().
См. также: pdf_closepath(), pdf_stroke().
pdf_fill
Заполнение пути цветом
void pdf_fill (int pdf_document)
См. также: pdf_closepath(), pdf_stroke(), pdf_setgray_fill(), pdf_setgray(), pdf_setrgbcolor_fiTl (), pdf_setrgbcolor().
pdf_fill_stroke
Заполнение пути цветом и закрытие его
void pdf_fill_stroke (int pdf_document)
См. также: pdf_closepath(), pdf_stroke(), pdf_fill(), pdf_setgray_fill(), pdf_setgray(), pdf_setrgbcolor_fill(), pdf_setrgbcolor().
pdf_closepath_fill_stroke
Черчение, закрашивание и закрытие пути
void pdf_dosepath_fin_stroke (int pdfjjocument)
См. также: pdf_closepath(), pdf_stroke(), pdf_fill(), pdf_setgray_fill()) pdf_setgray(), pdf_setrgbcolor_fiTI(), pdf_setrgbcolor().
pdf_endpath
Завершение пути без его закрытия void pdf_endpath (int pdf_document)
См. также: pdf_setrgbcolor_stroke(), pdf_setrgbcolor_fill().
pdf_add_outline
Добавление закладки для текущей страницы
int pdf_add_outline (int pdf_ document, string text [, int parent [, int open]])
Название закладки определяется аргументом text. Она становится дочерним объектом объекта parent и по умолчанию открыта (если аргумент open не равен 0). Возвращается идентификатор закладки, который может использоваться как родительский для других закладок.
pdf_set_transition
Установка режима перехода между страницами
void pdf_set_transition (int pdf_document, int transition)
Используйте функцию PDF_set_parameter() с параметром «transition».
См. также: pdf_clo.scjmage(), pdf_executejmage(), pdf_place_image(), pdf_ put_iraage().
pdf_closejmage
Закрытие рисунка
void pdf_close_image (int image)
Закрывает рисунок, открытый функциями pdf_open_ ().
См. также: pdf_open_jpeg(), pdf_open_gif(), pdf_open_memory_image().
pdf_get_image_height
Установка высоты рисунка в пикселах
string pdf_get_image_height (int pdf_document, int image)
См. также: pdf_open_image_file(), pdf_open_memory_image(), pdf_get_image_ width().
pdf_get_image_width
Установка ширины рисунка в пикселах
string pdf_get_image_width (int pdf_document. int image)
См. также: pdf_open_itnage_file(), pdf_openjnemory_image(), pdf_get_image_ height().
pdf_placejmage
Размещение рисунка на странице
void pdf_p!ace_image (int pdf_doc, int image, double x, double y, double scale)
Позиция размещения задается (х,у); масштаб — scale.
См. также pdf_put_image().
pdf_put_image
Сохранение рисунка в PDF для дальнейшего использования
void pdf_put_inage (int pdf_document, int image)
Внедряет рисунок в документ без его отображения. Затем рисунок может быть размещен на странице функцией pdf_execute_image() необходимое число раз. Полезно при многократной вставке рисунка (уменьшается размер файла).
Начиная с версии 2.01 pdflib функция бесполезна и выводит только предупреждение.
См. также: pdf_place_image(), pdf_execute_image().
pdf_execute_image
Размещение сохраненного рисунка на странице
void pdf_execute_image (int pdf_document, int image, double x, double y, double scale) :
Устанавливает длину черных и белых полос прерывистых линий.
См. также: pdf_set_border_style(), pdf_set_border_color().
ClibPDF
Библиотека ClibPDF позволяет PHP создавать документы PDF. Она не является полностью свободно распространяемой. Библиотека действует подобно pdflib, но создает документы меньшего размера с большей скоростью.
При необходимости воспользуйтесь документацией, поставляемой с ClibPDF.
Все функции, за исключением cpdf_open(), принимают в качестве своего первого аргумента дескриптор открытого документа.
В настоящее время ClibPDF, в отличие от pdflib, не позволяет одновременно работать с несколькими документами. Но она способна создавать документы в памяти, не используя временный файл. Возможно также модифицировать любую страницу.
void cpd8f_global_set_document_limits (int maxpages. int maxfonts, int maximages, int raaxannotations. int maxobjects)
Функцию следует вызывать до cpdf_open().
См. также cpdf_open().
cpdf_set_creator
Заполнение поля «создатель документа»
void cpdf_set_creator (string creator)
См. также: cpdf_set_subject(), cpdf_set_title(), cpdf_set_keywords().
cpdf_set_title
Заполнение поля «заголовок документа»
void cpdf_set_title (string title)
См. также: cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords().
cpdf_set_subject
Заполнение поля «тема документа»
void cpdf_set subject (string subject)
См. также: cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords().
cpdf_set_keywords
Заполнение поля «ключевые слова документа»
void cpdf_set_keywords (string keywords)
См. также: cpdf_set_tit!e(), cpdf_set_creator(), cpdf_set_subject().
cpdf_open
Открытие нового документа
int cpdf_open (int compression [, string filename])
Первым аргументом можно указать необходимость сжатия документа (если он не равен 0). Если указывается второй аргумент, то документ будет создаваться в файле, а не в памяти. Имя файла «-» указывает на стандартный поток вывода (это пока не работает с Apache).
Возвращаемый дескриптор используется всеми после/чующими функциями.
См. также: cpdf_close(), cpdf_output_buffer(), cpdf_save_to_file().
cpdf_close
Закрытие документа pdf
void cpdf_close (int pdfjJocument)
Эту функцию следует вызывать последней, даже после cpdf_finalize(), cpdf_output_buffer() или cpdf_save_to_file().
См. также cpdf_open().
cpdf_page_init
Начало новой страницы
void cpdf_page_init (int pdf_document, int pagejiumber, int orientation, double height, double width [, double unit])
Параметры новой страницы: page_number — ее номер, orientation — ориентация (0 — вертикальная, 1 — горизонтальная), высота height и ширина width; необязательный аргумент unit указывает разрешение в точках на дюйм (по умолчанию — 72).
См. также cpdf_set_current_page().
cpdf_finalize_page
Завершение указанной страницы
void cpdf_finalize_page ( int pdf_document, int page_number) После этого страница не может модифицироваться.
См. также cpdf_page_init().
cpdf_finalize
Завершение документа
void cpdf_fina!ize (int pdf_document)
После этого необходимо вызвать cpdf_close().
См. также cpdf_close().
cpdf_output_buffer
Вывод документа из буфера памяти
void cpdf_output_buffer (int pdf_document)
Выводит документ на стандартный поток вывода (отсылает браузеру). Для этого документ должен быть создан в памяти (а не в файле).
Выбирает текущий шрифт, его размер и кодировку. В настоящее время поддерживаются только стандартные шрифты postscript. Кодировка может быть указана значениями «MacRomanEncoding», «Mac-ExpertEncoding», «WinAnsiEncoding» и «NULL» (использовать встроенную).
См. также документацию ClibPDF.
cpdf_set_leading
Установка межстрочного расстояния
void cpdf_set leading (int pdf_document, double distance) Используется при выводе текста функцией cpdf_continue_text().
См. также cpdf_continue_text().
cpdf_set_text_rendering
Установка режима вывода текста
void cpdf_set_text_rendering (int pdfjJocument, int mode)
Возможные значения аргумента mode: 0 (текст с заполнением), 1 (контурный текст), 2 (заполненный контурный текст), 3 (невидимый), 4 (заполненный текст, прикрепленный к пути), 5 (контурный текст, прикрепленный к пути), 6 (заполненный контурный текст, прикрепленный к пути), 7 (текст, прикрепленный к пути).
void cpdf_set_page_animation (int pdf_document, int transition. double duration)
Аргумент transition определяет метод перехода, a duration — его длительность в секундах.
cpdf_Import_jpeg
Открытие рисунка JPEG
int cpdfjmportjpeg (int pdf_doc. string filename, double x, double y. double angle, double width, double height. double x-scale, double y-scale [, int mode])
Открывает рисунок из файла filename и размещает его в позиции (х,у) на текущей странице. Для рисунка можно указать угол поворота в градусах и масштабирование.
См. также cpdf_placejnlinejmage().
cpdf_place_inlinejmage
Размещение сгенерированного рисунка на странице
void cpdf_plасеJnlineJmage (int pdf_document, int image, double x, double y, double angle, double width, double height [, int mode])
Внедряет рисунок, созданный графическими функциями PHP.
См. также cpdfJmportJpeg().
cpdf_add_annotation
Добавление примечания
void cpdf_add_annotation (int pdf_document, double Их, double lly, double urx, double ury. string title, string content [, int mode])
Примечание располагается в левом нижнем углу (Их, Ну), верхний правый угол — (urx. ury).
Shockwave Flash
PHP позволяет создавать файлы Shockwave Flash посредством библиотеки (созданной Paul Haeberli) Libswf, которую можно загрузить с http://reality.sgi.com/grafica/flash/. Прикомпилировать libswf к РНР можно параметром --w1th-swf[=
OIR],где DIR — место размещения каталогов include (содержит файл swf.h) и lib (содержит файл libswf.a). <
/FONT>
Следующий пример демонстрирует создание Flash-анимации:
swf_closeflle() ?>
Просмотреть результат исполнения сценария можно но адресу:
http:// www.designmultimedia.com/swfphp/test.swf.
libswf не поддерживается Windows. Разработка библиотеки была прекращена, а исходные коды недоступны.
swf_openfile
Открытие нового файла Shockwave Flash
void swf_openfile (string filename, float width, float height, float framerate, float r, float g, float b)
Создает файл filename с анимацией (шириной width, высотой height, частотой кадров framerate и цветом фона R.G.B).
Данная функция должна вызываться первой, иначе в сценарии возникнет ошибка «segfault». Если необходимо непосредственно отсылать файл браузеру, можно задать его имя как php://stdout.
swf_closefile
Закрытие текущего файла Shockwave Flash
void swf_cl osef "Л е ([int return_file])
Закрывает файл, открытый функцией swf_openfile(). При установке аргумента return_file функция возвращает содержимое SWF-файла.
// создает flash й'айл: выводит его и сохраняет в БД
// Stext - аргумент сценария
// сохранить файл в БД function swf_savedata ($data) {
global SD6HOST. SDBUSER. SDBPASS:
Sdbh = (amysql_connect
(SDBHOST. SDBUSER. SDBPASS):
if (!$dbh) { die (spnntf ("Error [Id]: us".
mysql_errno (). mysql_error(): }
Sstmt = "INSERT INTO swf_files
(file) VALUES f'$data')":
$sth - @mysql_query (Sstmt. Sdbh): if (!Ssth) {
die (sorintf ("Error [ВД: *s".
mysql_errno (). mysql_error ())); }
?mysql_free_result (Ssth);
(amysql_clo^e (Sdbh). } >
swf_labelframe
Пометка текущего кадра
void swf_labelframe (string name)
swf_showframe
Отображение текущего кадра
void swf_showframe (void);
swf_setframe
Переключение кадра
void swf_setframe (int framenumber)
swf_getframe
Получение номера текущего кадра
int swf_getframe (void);
swf_mulcolor
Установка множителя цвета RGBA
void swfjnul col or (float r, float g, float b, float a)
Функция устанавливает значения (они могут быть положительными или отрицательными), на которые будут умножаться цвета выводимых объектов. Этот цвет затем (косвенно) используется функциями swf_placeobject(), swfjnodifyobject() и swf_addbuttonrecord().
Функция устанавливает значения (они могут быть положительными или отрицательными), которые будут добавляться к цвету выводимых объектов. Этот цвет затем (косвенно) используется функциями swf_placeobject(), swfjnodifyobject() и swf_addbuttonrecord().
swf_placeobject
Размещение объекта в текущем кадре
void swf_placeobject (int objid, int depth)
Размещает объект objid на уровне depth. Аргументы могут иметь значения от 1 до 65 535. При этом используются текущие: множитель и слагаемое цвета (swfjnulcolor() и swf_addcolor()) и матрица позиционирования объекта.
Полностью поддерживаются цвета RGBA.
swf_modifyobject
Изменение объекта
void swfjnodifyobject (int depth, int how)
Изменяет объект, расположенный на уровне depth, согласно аргументу how: если он имеет значение MOD_MATRIX, то изменяется положение объекта; если MOD_COLOR, то изменяется цвет. Эти константы можно комбинировать (MOD_MATR1X|MOD_COLOR).
MOD_COLOR использует текущие множитель и слагаемое цвета (swf_ mulcolor() и swf_addcolor()), a MOD_MATRIX — матрицу позиционирования объекта.
swf_removeobject
Удаление объекта
void swf_removeobject (int depth)
Удаляет объект, расположенный на уровне depth.
swf_nextid
Получение идентификатора следующего свободного объекта
int swfjiextid (void);
swf_startdoaction
Начало описания списка действий текущего кадра
void swf_startdoaction (void);
Функцию следует вызывать после завершения определения действий.
swf_actiongotoframe
Проигрывание кадра и остановка
void swf_actiongotoframe (int framenumber)
swf_actiongeturl
Получение URL анимации Shockwave Flash
void swf_actiongetur1 (string url, string target)
swf_actionnextframe
Перемещение вперед на один кадр
void swf_actionnextframe (void);
swf_actionprevframe
Перемещение назад на один кадр
void swf_actionprevframe (void);
swf_actionplay
Начало проигрывания анимации с текущего кадра
void swf_actionplay (void)
swf_actionstop
Остановка flash-анимации текущего кадра
void swf_actionstop (void);
swf_actiontogglequality
Переключение между высоким/низким качеством
void swf_actiontogglequality (void);
swf_actionwaitforframe
Пропуск действия, если кадр не был загружен
void swf_actionwaitforframe (int framenumber, int skipcount)
Функция проверяет видимость кадра framenumber и, если он не был загружен, пропускает указанное число действий skipcount. Полезно для анимаций типа "Loading...".
swf_actionsettarget
Установка контекста всех действий
void swf actionsettarget (string target)
Используется для управления другими flash-анимациями, проигрываемыми в текущий: момент.
swf_actiongotolabel
Отображение кадра с указанной меткой
void swf_actiongotolabel (string label)
После отображения проигрывание останавливается.
swf_enddoaction
Завершение текущего действия I void swf_enddoaction (void). Завершает текущее действие, начатое функцией swf_startdoaction().
Чертит кривую, используя точки (xl, yl) и (х2, у2) как внешне ориентирующие, а точку (хЗ, уЗ) — как конечную. Текущая позиция затем устанавливается в точке (хЗ, уЗ).
Положительное значение увеличивает, а отрицательное — уменьшает интервал.
swf_getfontinfo
Получение информации о высоте букв
array swf_getfontinfo (void);
Возвращает ассоциативный массив из двух элементов:
Aheight — высота в пикселах заглавной буквы А;
xheight — высота в пикселах маленькой буквы х.
swf_definetext
Создание строки текста
void swfjlefinetext (int objid. string str, int docenter)
Строка текста str создается с использованием текущего шрифта и его размера. Если в значении аргумента docenter указывается 1, то текст центрируется по горизонтали.
Добавляет рисунок GIF, JPEG, RGB или FI (он автоматически конвертируется в формат Flash JPEG или Flash color map).
swf_getbitmapinfo
Получение информации о рисунке
array swf_getbitmapinfo (int bitmapid)
Возвращает массив с информацией о рисунке bitmapid, содержащий элементы:
«size» — размер рисунка в байтах;
«width» — ширина рисунка в пикселах;
«height» — высота рисунка в пикселах.
swf_startsymbol
Определение символа
void swf_startsymbol (int objid)
Превращает объект в символ. Символы — это микроанимации flash, которые могут проигрываться одновременно.
swf_endsymbol
Завершение определения символа
void swf_endsymbol (void);
Завершает определение символа, начатое функцией swf_startsymbo1().
swf_ startbutton
Начало определения кнопки
void swf_startbutton (int objid. int type)
Аргументом type задается, может ли фокус перемещаться без нажатия на кнопку мышью (TYPE_MENUBUTTON) или нет (TYPE_PUSHBUTTON).
swf_addbuttonrecord
Управление расположением, видом и активной областью текущей кнопки void swf_addbuttonrecord (int states, int shapeid, int depth)
Аргументом states определяется, какие состояния может принимать кнопка: BSHitTest, BSDown. BSOver, BSUp; аргументом shapeid определяется внешний вид кнопки (идентификатор объекта), a depth -уровень расположения кнопки.
Аргумент fovy задает угол зрения по отношению к оси у, aspect — масштаб текущей области рисования. Аргументы near,far определяют границы проекции — ближнюю и дальнюю. Поскольку flash-проигрыватели имеют только двумерную матрицу, возможны искажения проецирования.
swf_polarview
Установка позиции наблюдения в полярных координатах
dist задает расстояние от наблюдателя до начала системы координат; azimuth — угол азимута в плоскости х,у, измеренный от оси у; incidence — угол обзора в плоскости y,z, измеренный относительно оси z; twist — вращение видимой области относительно линии наблюдения (по правилу правой руки).
Аргументами view_x, view_y, view_z задается позиция наблюдения; reference_x, reference_y, reference_z указывают наблюдаемую точку; a twi st — угол поворота наблюдения относительно оси z.
swf_pushmatrix
Занесение текущей матрицы трансформации в стек
void swf_pushmatrix (void);
swf_popmatrix
Извлечение матрицы трансформации из стека
void swf_popmatrix (void);
swf_scale
Масштабирование текущей трансформации
void swf_scale (double x. double y, double z)
Масштабные коэффициенты задаются аргументами х, у, z.
swf_trnslate
Транслирование текущей трансформации
void swf_translate (double x, double y, double z)
swf_rotate
Поворот текущей трансформации
void swf_rotate (double angle, string axis)
Угол поворота angle задается относительно оси axis. Допустимые значения axis: "x", "у" и "z".
swf_posround
Разрешение или запрет округления координат объектов
void swf_posround (int round)
Значение 1 разрешает, а 0 запрещает округление.
Учебник по основам PHP. PHPBeginner
DOM XML
Функции доступны при компиляции с параметром —with-dom= [DIR]при использовании библиотеки GNOME xml (не ниже libxml-2.0.0). < /FONT>
Модуль определяет следующие константы (типы элементов XML):
XML_ELEMENT_NODE;
XML_ATTRIBUTE_NODE;
XML_TEXT_NOOE;
XML_CDATA_SECTION_NODE;
XML_ENTITY_REF_NODE;
XMLJNTITYJODE;
XML_PI_NODE;
XML_COMMENT_NODE;
XiCJDOCUMENTJODE;
XML_DOCUMENT_TYPE_NODE;
XML_DOCUMENT_FRA6_NODE;
XMLJOTATIONJODE;
XML_GLOBAL_NAMESPACE;
XML_LOCAL_NAMESPACE.
Модуль использует следующие классы для работы с интерфейсом DOM документов XML: DomDocument, DomNode, Dtd, DomAttribute, Dom-Namespace, XpathContext, XpathObject.
Рекомендуется использовать объектный интерфейс, но возможно использование и функции с префиксом domxml_, как аналога методов DOM объектов.
Класс DomDocument:
метод root() - аналог domxml_root();
метод children() — аналог domxml_children();
метод add_root() — аналог domxm1_add_root();
метод dtd() — аналог domxml_intdtd();
метод dumpmem() — аналог domxmU);
метод xpath_init() — аналог xpath_init();
метод xpath_new_context() — аналог xpath_new_context();
метод xptr_new_context() — аналог xptr_new_context();
свойство doc — сам объект класса DomDocument;
свойство name — наименование документа;
свойство url — адрес документа;
свойство version — версия XML;
свойство encoding — название кодировки;
свойство standalone — 1, если файл одиночный;
свойство type — см. список констант;
свойство compression — 1, если файл сжатый;
свойство charset — номер кодировки.
Класс DomNode:
метод lastchild() - аналог domxmljast_child{);
метод children() — аналог domxmljrhildren();
метод parent() — аналог domxml_parent();
метод new_child() — аналог domxml_new_child();
метод get_attribute() — аналог domxml_get_attribute();
метод set_attribute() — аналог domxml_set_attribute();
метод attributes() — аналог domxml_attributes();
метод node() — аналог domxml_node();
метод set_content() — аналог domxml_set_contentО;
свойство node — сам обьект класса DomNode;
свойство type — см. список констант;
свойство name — строка, содержащая имя тега;
свойство content — строка содержимого тега.
Sroot = $doc->add__root;"HTML"). // DomNode
Shead - $root->new_child("HFAD". "");
$head->new_child("TITLE". "Hier der Titel"):
echo $doc->dumpmem(); ?>
Сценарий выводит следующее:
Hier der Titel
new_xmldoc
Создание нового документа DOM XML
object new_xmldoc (string version)
Возвращает объект класса DomDocument. Синоним функции domxml_new_xmldoc().
xmldoc
Создание DOM-объекта из документа XML
object xmldoc (string strXML)
Интерпретирует строку, содержащую документ XML, и возвращает объект класса DomDocument.
xmldocfile
Создание DOM-объекта из файла XML
object xmldocfile (string XMLfilename)
Интерпретирует файл, содержащий документ XML, и возвращает объект класса DomDocument.
См. пример выше. Имена атрибутов учитывают регистр символов.
WDDX
Данная группа функций позволяет работать с данными в формате WDDX (http://www.wddx.org/). WDDX (Web Distributed Data Exchange) — это технология для «Распределенного обмена данными в web». Этот формат (производный от XML) предназначен для переноса данных из одной системы в другую (например, обмена данными между ASP, Perl, ColdFusion и PHP). Он позволяет сохранять не только значения, но и типы, и структуру сложных данных. Поэтому данные WDDX, сериализированные в одной системе, могут использоваться в другой. Тип данных определяется автоматически и приводится к одному из следующих:
null — пустые значения;
bool — булевские значения;
number — числа (целые и дробные не различаются);
string — строки;
dateTime — значения
даты и времени;
array — нумерованные массивы;
struct — ассоциативные массивы;
recordset — наборы записей (подобие таблиц);
binary — двоичные данные (в кодировке Base64).
В отличие от стандартных средств сериализации РНР данные функции используют формат, поддерживаемый большинством программных сред.
Spacketjd = wddx_packet_start("Комментарий пакета"):
wddx_add_vars($packet_id. "pi");
/* допустим Scities получено из БД
*/ Scities = arrayt"Austin". "Seattle");
wddx_add_vars($packet_id, "cities");
print Spacket = wddx_packet_end($packet_id); ?> < /FONT
>
Пример выведет:
3.1415926
AustinSeattle
wddx_serialize_value
Занесение одного значения в пакет WDDX
string wddx_serialize_value (mixed var [, string comment])
Создает пакет WDDX из значения одной переменной var, добавляя в заголовок пакета комментарий comment, и возвращает полученный пакет.
Используется для начального создания пакета WDDX с автоинкрементным добавлением переменных. Данные затем добавляются функцией wddx_add_vars(), после чего пакет должен быть завершен с помощью wddx_packet_end().
Используется для последовательного добавления данных в пакет packet_id, созданный функцией wddx_packet_start().
wddx_deserialize
Распаковка пакета WDDX
mixed wddx_deseria1ize (string packet)
Возвращает данные такого типа, которые были сериализированы.
XML-интерпретация
XML (extensible Markup Language) — формат обмена структурированными данными в пространстве web; стандарт, определенный Консорциумом World Wide Web (W3C). Информацию о XML и связанных технологиях можно получить по адресу http://www.w3.org/XML/. Для понимания материала главы необходимо разбираться в синтаксисе XML
Для работы с документами XML используются два способа.
Использование объектной модели документа (DOM), которая удобна для работы с документом в целом, но расходует больше ресурсов.
Интерпретация документа на основе модели событий, удобная при однократном просмотре документа и менее требовательная к ресурсам (что важно при работе с объемными документами).
Первый способ рассмотрен в предыдущей главе. Функции, описанные в данной главе, реализуют второй способ обработки. Событийная модель обработки (интерпретации) подразумевает следующую схему функционирования программы.
Устанавливаются функции обработки элементов документа различного типа (например, маркеров, данных,-инструкций и т. д.).
Инициализируется и запускается интерпретатор, который последовательно просматривает документ и запускает соответствующие обработчики данных.
Функции-обработчики определенным образом обрабатывают передаваемые им фрагменты документа.
Заметьте, что интерпретатор предназначен для обработки документа, но не для его проверки; документ должен соответствовать грамматике XML (и правилам DTD).
В РНР интерпретатор XML использует библиотеку expat (ее также использует Apache-1.3.9 и последующие версии), см.: http://www. jclark.com/xml/. Скомпилировать РНР с поддержкой expat можно, используя параметр --with-xml.
Для документов поддерживаются кодировки US-ASCII, ISO-8859-1 (по умолчанию), UTF-8 (UTF-16 не поддерживается). Разделяют исходную и целевую кодировки. Исходная кодировка — это набор символов документа (ее можно изменять в процессе интерпретации). (Внутри РНР символы всегда хранятся в кодировке UTF-8, позволяется использовать символы размером до 21 бита.) В функции-обработчики данные передаются в целевой кодировке (для всех типов данных). При нахождении в документе-символа, не соответствующего исходной кодировке, выдается ошибка; а если символ не может быть представлен в целевой кодировке, то он заменяется на знак вопроса.
Интерпретация ( по умолчанию) не учитывает регистр имен тегов, то есть в функции обработки символы передаются преобразованными к верхнему регистру. Для отключения этого используйте:
** Tag open: stnng(l) "A" array(l) { f"IO"]=> stnng(2) "99"}
++ Data stnng(4) "PHP "
** Tag open: stnng(l) "Z" array(l) { ["A">>
stnng(l) "d" } ** Tag close: stnng(l) "Z"
t-+ Data: stnng(3) "aaa" ** Tag close: stnng(l) "A"
xml_set element_handler
Назначение обработчиков открывающего и закрывающего тега
int xml_set_element_hand1er ( int parser, string startElementHandler, string endElementHandler)
В аргументах startElementHandler и endElementHandler указываются имена пользовательских функций, вызываемых во время интерпретации (при вызове xml_parse()), когда интерпретатор встречает открывающие и закрывающие теги.
Аргумент name содержит имя тега, attribs — ассоциативный массив, содержащий атрибуты тега (если они имеются).
xml_set_character_data_handler
Назначение обработчика данных
int xml_set_character_data_handler (int parser, string handler)
Устанавливает пользовательскую функцию с именем handler как обработчик данных документа. Данными считается все то, что находится между тегами, включая пробелы. Эта функция будет вызываться во время интерпретации (при вызове xml_parse()). Она должна соответствовать прототипу:
handler (int parser, string data).
В аргументе data функция получает текущий блок данных.
xml_set_processing_instruction_handler
Назначение обработчика инструкций обработки
int xml_set_processing_instruction_handler (int parser, string handler)
Инструкции обработки имеют следующий формат:
Используя этот формат, можно вставлять в XML документы РНР-кода, но последовательность, обозначающая конечный тег (?>), не должна встречаться в середине кода, иначе оставшаяся часть кода будет рассматриваться интерпретатором как обычные данные. Функция, устанавливаемая в качестве обработчика, должна соответствовать следующему прототипу:
handler ( int parser, string target, string data)
В аргументе target функция получает маркер, определяющий тип кода (это может быть не только «php», но и другой, кроме зарезервированного типа «xml»). В аргументе data передается текст всего кода, который содержится внутри тега.
xml_set_default_handler
Установка обработчика по умолчанию
int xml_set_default_handler (int parser, string handler)
Устанавливаемым обработчиком будут обрабатываться все данные, которые не могут быть обработаны иным зарегистрированным обработчиком. Функция обработчика должна соответствовать следующему прототипу:
handler (int parser, string data).
В аргументе data функция получает блок данных для обработки.
xml_set_unparsed_entity_decl_handler
Установка обработчика необрабатываемых данных
int xml_set_unparsed_entity_decl_handler (int parser, string handler)
Данные такого типа (NDATA) определяются спецификацией XML 1.0 (раздел 4.2.2) и имеют подобный следующему формат:
Функция обработчика должна соответствовать следующему прототипу:
В аргументе entityName функция получает тип тега, в base в настоящее время всегда содержится пустая строка. В аргументах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы. Аргумент notationName содержит имя нотации (см. функцию xml_set_notation_decl_handler()).
xml_set notation decl_handler
Установка обработчика объявлений нотаций
int xml_set_notation_decl_handler (int parser, string handler)
Нотации (являющиеся частью документов DTD) описаны в спецификации XML 1.0 (раздел 4.7) и имеют следующий формат:
Функция обработчика должна соответствовать следующему прототипу:
В аргументе notationName функция получает имя нотации, в base в настоящее время всегда содержится пустая строка. В аргументах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы.
xml_set_external_entity_ref_handler
Установка обработчика внешних ссылок
int xml_set_external_entity_ref_handler (int parser, string handler)
Функция обработчика нотаций, содержащих внешние ссылки, должна возвращать целочисленное значение и соответствовать следующему прототипу:
Если обработчик возвращает значение FALSE (или не возвращает никакого), интерпретатор XML прекращает интерпретацию и функция xml_get_error_code() возвращает значение XML_ERROR_EXTERNAL_ENTITY_ HANDLING.
В аргументе openEntityNames функция получает список имен, открываемых для рекурсивной интерпретации (в виде строки, где разделителями являются пробелы), в base в настоящее время всегда содержится пустая строка. В аргументах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы.
xml_parse
Начало интерпретации документа XML
int xml_parse (int parser, string data [, int isFinal])
Функция позволяет обрабатывать документ XML по частям (многократно вызывая данную функцию и передавая каждый блок данных в аргументе data), тогда при обработке последней части документа в аргументе ispinal следует передать значение TRUE.
До начала интерпретации следует инициализировать интерпретатор parser и установить все функции-обработчики, которые будет вызывать данная функция. Функция возвращает значение TRUE, если интерпретация блока документа прошла успешно. В случае ошибки возвращается значение FALSE, и затем может быть получена информация об ошибке с помощью функций xml_get_error_code(), xml_error_string(), xml _get_current_line_number (), xml _get_current_col umnjiumber (), xml _get_ current_ byte_index().
xml_get_error_code
Получение кода ошибки интерпретатора XML
int xml_get_error_code (int parser)
Перечисление возвращаемых кодов ошибок (констант) см. в начале главы.
xml_error_string
Получение описания ошибки по ее коду
string xml_error_string (int code)
Функция позволяет получить в строке описание кода ошибки (возвращаемое функцией xml_get_error_code()). Если код недействителен, возвращается FALSE.
xml_get_current_line_number
Получение номера текущей интерпретируемой строки документа
int xml_get_current_line_number (int parser)
xml_get_current_column_number
Получение номера обрабатываемого байта в текущей интерпретируемой строке документа
int xml_get_current_column_number (int parser)
xml_get_current_byte_index
Получение позиции текущего байта документа
int xml_get_current_byte_index (int parser)
Нумерация байтов начинается с 0.
xml_parse_into_struct
Занесение документа XML в структурированный массив
int xml_parse_into_struct (int parser, string data, array &values, array &index)
Функция заносит XML-документ в 2 параллельные структуры: массив values содержит структуру тегов и их содержимое, a Index содержит вспомогательные индексы для облегчения нахождения начальных и конечных тегов в первом массиве (массивы следует передавать по ссылке).
Интерпретация сложных документов становится громоздкой при использовании обработчиков. Хотя эта функция и не создает объект, подобный DOM, она генерирует структуру, которую легко преобразовать в древовидную. Можно, например, создавать объекты, представляющие данные. Следующий пример демонстрирует создание объектов из xml базы данных химических элементов.
После запуска сценария переменная $db будет содержать массив AminoAcid объектов и будет выведено:
** Database of AminoAcid objects: Array (
[0] => aminoacid Object (
[name] => Alamne [symbol] => ala [code] =>
A [type] => hydrophobic ) [1] => aminoacid Object
( ~\ [name] => Lysine \ [symbol] => lys
[code] => К [type] = > charged j ) < /FONT >
xml_parser_free
Закрытие интерпретатора XML
string xml_parser_free (int parser)
xml_parser_set_option
Установка параметра XML-интерпретатора
int xml_parser_set_option ( int parser, int option, mixed value)
В аргументе option константой задается устанавливаемый параметр, а в value — ее новое значение. Возможные параметры:
XML_OPTION_CASE_FOLDING (тип значения параметра -- integer) -управляет преобразованием имен тегов в верхний регистр (по умолчанию — 1);
XML_OPTION_TARGET_ENCODIN6 (тип значения параметра - string) -целевая кодировка: «ISO-8859-1», «US-ASCII» или «UTF-8». По умолчанию та же, что и установленная функцией xml_parser_ create().
xml_parser_get_option
Получение параметра интерпретатора XML
mixed xml_parser_get_option (int parser, int option)
См. также: xml_parser_set_option().
utf8_decode
Преобразование строки UTF-8 в ISO-8859-1. string utf8_decode (string data)
См. также: utf8_encode().
utf8_encode
Кодирование строки ISO-8859-1 в UTF-8 string utf8_encode (string data)
Возвращает строку в формате UTF-8. UTF-8 — эго формат представления текста Unicode, позволяющий представить большее количество символов, чем кодировка ASCII. Первые 127 символов ASCII в кодировке UTF-8 имеют идентичное представление, а последующие (обычно это символы национальных языков) кодируются следующими способами:
Кодировка UTF-8
Размер символа в байтах
Число битов символа
Кодировка
1
7
Obbbbbbb
2
И
llObbbbb lObbbbbb
3
16
lllObbbb lObbbbbb lObbbbbb
4
21
llllObbb lObbbbbb lObbbbbb lObbbbbb
Как видно, размер символа может быть от 1 до 4 бант; b представляет один бит данных.
XSLT
XSLT (Extensible Stylesheet Language (XSL) Transformations) — язык преобразований XML-документов в другие XML-документы; стандарт, определенный Консорциумом World Wide Web (W3C). С документацией можно ознакомиться по адресу: http://www.w3.org/TR/xslt.
Технология предназначена для разделения содержания и формы представления документов с помощью шаблонов преобразования XSL. Обычно документы XML преобразовывают в формат HTML.
Это расширение использует Sabloton и expat (http://www.gingerall. com/). В UNIX при компиляции PHP запустите configure с ключом -with-sablot.
xslt_create
Инициализация нового процессора XSL
resource xslt_create(void);
Функция возвращает дескриптор, используемый последующими XSL-функциями.
xslt_free
Закрытие процессора XSLT
void xslt_free (resource xh)
xslt_openlog
Назначение журнала сообщений процессора XSLT
bool xslt_openlog ([resource xh, string logfile, int loglevel])
В указанный файл logfile будут записываться все сообщения об ошибках.
xslt_closelog
Закрытие и очистка журнала сообщений процессора XSLT
bool xslt_closelog (resource xh)
xslt_errno
Получение номера текущей ошибки процессора XSLT
int xslt_errno ([int xh])
xslt_error
Получение описания текущей ошибки
mixed xslt_error ([int xh])
xslt_fetch_result
Получение преобразованных данных из буфера
string xslt_fetch_result ([int xh, string result_name])
Если имя буфера не указывается в result_name, то подразумевается «/jresult».
xslt_output_ begintransform
Начало преобразования XSLTc выводом
void xslt_output_begintransform (string xslt_filename)
Функция заставляет преобразовывать все выводимые данные с учетом шаблона из файла xslt_filename. Затем следует вызвать функцию xslt_output_endtransform().
xslt_output_begintransform($xsl_file):
Sdoc = new_xmldoc('1.0').
Sarticle = $doc->new_root('article'};
$article->new_child('title'. 'The History').
$article->new_child('author'. 'Peter'),
$article->new_child('body'. 'Nothing interesting has happened'):
Эту функцию следует вызвать для того, чтобы вывести преобразованный документ.
xslt_process
Преобразование документа XML с помощью шаблона XSL
bool xsH_process (string xsl_data, string xirHI_data, string result) В аргументе xsl_data указывается текст шаблона XSLT, а в xml_data — текст документа XML. Возвращает TRUE или FALSE — при ошибке.
См. также: xslt_errno() и xslt_error() для получения кодов ошибки.
Преобразовывает файл xm!_data_file, применяя к нему шаблон из файла xslt_file. Шаблон получает доступ к массиву параметров xslt_ params и аргументов xstt_args. Результат XSLT-трансформации заносится в именованный буфер (по умолчанию «_result»).