Руководство по РНР 3.0

Перевод Всероссийского Клуба Вебмастеров www.webclub.ru

 

 

Preface

PHP Версии 3.0 - язык написания сценариев, внедренный в HTML. Многое из синтаксиса заимствовано из C, Java и Perl, с добавлением специфичных для PHP возможностей. Задача языка состоит в том, чтобы дать возможность Web-разработчикам легко и быстро создавать динамично изменяемые html-страницы.

Об этом руководстве

Это руководство написано в SGML при помощи DocBook DTD, с использованием DSSSL (Стиль Документа и Язык Спецификаций Семантики) при форматировании. Инструментальные средства, используемые для форматирования HTML, TeX и RTF версий - Jade, написанный Джеймсом Кларком и The Modular DocBook Stylesheets, созданные Норманом Валшом. Структура документации PHP3 была разработана Стигом СЈзером Баккеном.

Глава 1. Введение в PHP3

Что такое PHP3?

PHP версии 3.0 - язык описания сценариев, выполняемых на сервере, встроенный в HTML.

Что может делать PHP3?

Возможно самая сильная и значимая возможность в PHP3 - уровень интеграции с базами данных. Написание веб-страницы работающей с базой данных невероятно проста. В настоящее временя поддерживаются следующие базы данных:

           Oracle
                                Adabas D
           Sybase
                                FilePro
           mSQL
                                Velocis
           MySQL
                                Informix
           Solid
                                dBase
           ODBC
                                Unix dbm
           PostgreSQL

Краткая История PHP

PHP был задуман где-то в конце 1994 года Расмусом Ледорфом(Rasmus Lerdorf). Ранние невыпущенные версии использовались на его домашней странице для того, чтобы следить за тем кто просматривал его интерактивное резюме. Первая используемая версия cтала доступна где-то в начале 1995 и была известна как Personal Home Page Tools. Она состояла из очень упрощенного движка синтаксического анализатора, который понимал только несколько специальных макрокоманд и ряд утилит, которые затем были в общем использовании на домашних страницах. Гостевые книги, счетчики и некоторые другие дополнения.

Довольно трудно дать какую-либо жесткую статистику, но отмечено, что к 1996 г. PHP/FI был использован по крайней мере на 15,000 веб-сайтах во всем мире. В середине 1997г. эта цифра выросла до более чем 50,000. В середине 1997г. также наблюдалось изменение в разработке PHP. Из частного любимого проекта Расмуса, которому способствовала горстка людей , это превратилось в намного более организованную рабочую группу. Синтаксический анализатор был заново переписан Зевом Сураски(Zeev Suraski) и Анди Гутмансом(Andi Gutmans), и этот новый синтаксический анализатор стал основой для PHP Версии 3.

Сегодня ( в середине -1998г.) как PHP/FI так и PHP3 поставляется с рядом коммерческих продуктов типа C2's StrongHold web server и RedHat Linux и консервативной оценкой, основанной на экстрaполяции чисел, предоставленных NetCraft было бы то, что PHP используется на 150,000 cайтах во всем мире. В перспективе, их больше чем сайтов, запущенных на Netscape's flagship Enterprise server в Интернете.

Глава 2. Возможности PHP3

Содержание:

HTTP-аутификация средствами PHP

HTTP аутификация в PHP доступна только при использовании модуля Apache. В модуле Apache PHP-скрипт, может использовать функцию Header() для отправки сообщения "Authentication Required" браузеру клиента, вызвав тем самым окно диалога Username/Password. Как только пользователь заполняет поля username и password, URL содержащий PHP-скрипт будет вызван заново с переменными $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE содержащими введенную информацию. В данном случае обеспечивается только "Основная" аутификация.

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

Пример 2-1. Пример HTTP аутификации

<?php
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel button\n";
    exit;
  } else {
    echo "Hello $PHP_AUTH_USER.<P>";
    echo "You entered $PHP_AUTH_PW as your password.<P>";
  }
?>

Вместо просто распечатывания $PHP_AUTH_USER и $PHP_AUTH_PW, Вы вероятно хотели бы проверить имя_пользователя и пароль для проверки правильности. Возможно, посылая запрос к базе данных, или, ища пользователя в dbm файле.

Будьте внимательны при использовании браузера Internet Explorer. Он весьма придирчив к порядку заголовков. Отправка заголовка WWW-Authenticate перед заголовком HTTP/1.0 401 возможно даст аутификацию в любом случае.

Чтобы предотвратить от записи кем - то сценарий , который определяет пароль для страницы, которая была опознана через традиционный внешний механизм, PHP_AUTH переменные не будут установлены, если допускается внешнее установление подлинности для той специфической страницы. В этом случае может быть использована переменная $REMOTE_USER чтобы идентифицировать внешне-опознанного пользователя.

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

И Netscape и Internet Explorer очистит локальный кэш окна аутификации после получения ответа сервера 401. Это эффективно как мера отключения пользователей("log out"), вынуждающая их повторно ввести их username и пароль. Некоторые используют это для отключения пользователя по истечении интервала времени("time out"), или обеспечивают кнопку "Log Out". Эти методы не требуются в соответствии с Основным стандартом аутификации HTTP , так что Вы никогда не должны зависеть от этого. Тестирование с Lynx показало, что Lynx не очищает информацию аутификации с 401 ответом сервера, так что переход обратно и затем вперед снова откроет ресурс (пока требования удостоверения личности не изменились).

Также обратите внимание, что это не работает при использовании сервера Microsoft's IIS и CGI версии PHP из-за ограничений IIS.

Создание GIF-файлов с помощью PHP

PHP не ограничен созданием только HTML вывода. Он может также использоваться для создания файлов GIF, или даже более удобные потоки изображений GIF. Для этого вам надо скомпилировать PHP с библиотекой функций изображения - GD .

Пример 2-2. Создание GIF-файлов с помощью PHP

<?php
    Header("Content-type: image/gif");
    $string=implode($argv," ");
    $im = imagecreatefromgif("images/button1.gif");
    $orange = ImageColorAllocate($im, 220, 210, 60);
    $px = (imagesx($im)-7.5*strlen($string))/2;
    ImageString($im,3,$px,9,$string,$orange);
    ImageGif($im);
    ImageDestroy($im);
?>
     

Этот пример вызывается со страницы тегом: <img src="button.php3?text"> Вышеупомянутый скрипт button.php3 берет строку "text", накладывает сверху на основное изображение, которым в этом случае является " images/button1.gif " и выводит возникающее в результате изображение. Это - очень удобный способ не рисовать новые изображения кнопки, каждый раз, когда вы хотите изменить текст кнопки. Этим методом они будут динамически сгенерированы.

Поддержка file upload

PHP может принимать файлы, загруженные из любого браузера, отвечающего стандартам RFC-1867 (которыми являются, например, Netscape Navigator 3 или cтарше, Microsoft Internet Explorer 3 с исправлениями от Microsoft, или cтарше). Эта возможность позволяет людям загружать файлы. С PHP-аутификацией и функциями манипулирования файлами, вы имеете полный контроль над тем, кому позволять загружать файлы и что должно быть выполнено с файлом, если он был загружен.

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

Пример 2-3. Форма загрузки файла

<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
_URL_ должен указать на php html файл. Cкрытое поле MAX_FILE_SIZE должно предшествовать полю ввода файла и означает максимально допустимый размер файла. Значение определяется в байтах. Для этого файла при успешной загрузке будут определены следующие переменные :

$userfile - Временное имя файла под которым загруженный файл загружается в машину сервера.

$userfile_name - Исходное имя файла в системе отправителя.

$userfile_size - Размер загруженного файла в байтах.

$userfile_type - Тип MIME файла, если броузер предоставил эту информацию. Например может быть "image/gif".
Обратите внимание, что компонент вышеупомянутых переменных "$userfile" - это любое значение поля Name тега INPUT c TYPE=file обозначенное в форме загрузки. В приведенном выше примере формы загрузки мы назвали его "userfile".

По умолчанию файлы будут сохранены в заданном по умолчанию временном каталоге сервера. Его можно изменить, установкой переменной среды TMPDIR в среде, в которой PHP выполняется. Хотя, использование при ее установке обращения PutEnv () изнутри сценария PHP не будет работать.

Скрипт PHP, который получает загруженный файл, должен определить, что должно быть выполнено с загруженным файлом. Вы можете, например, использовать переменную $file_size, чтобы отбросить любые файлы, которые являются или слишком маленькими или слишком большими. Вы могли бы использовать переменную $file_type, чтобы отбросить любые файлы, которые не соответствуют некоторым критериям типа. В любом случае, вы должны или удалить файл из временного каталога или переместить эго в другое место.
Файл будет удален из временного каталога в конце запроса, если он не перемещен или переименован.

Пожалуйста обратите внимание, что вебсервер CERN httpd, кажется, удаляет все начинающееся с первого пробела в заголовке content-type mime, полученном от клиента. Пока дело обстоит так, CERN httpd не будет поддерживать возможность загрузки файла.

Поддержка HTTP cookie

PHP поддерживает HTTP cookies. Cookies - механизм для сохранения данных в удаленном браузере и, таким образом, - трэкинг или идентификация пользователей. Вы можете устанавливать файлы cookie используя функцию setcookie(). Cookies - часть HTTP заголовка, так что функция SetCookie() должна вызваться прежде чем браузеру послан какая-нибудь информация для вывода. Это - то же самое ограничение, которое касается и функции Header().

Любой cookie, посланный Вам от клиента будет автоматически превращен в переменную PHP точно так же как данные методов GET и POST. Если вы желаете назначить множественные значения одиночному cookie - просто добавьте [] к имени cookie. Для более подробной информации см. функцию setcookie ().

Поддержка баз данных

PHP поддерживает ряд различных баз данных, и в режиме работы в собственной системе команд и через ODBC, включая:

 Adabas D
                  MySQL
 dBase
                  Oracle
 Empress
                  PostgreSQL
 FilePro
                  Solid
 Informix
                  Sybase
 InterBase
                  Velocis
 mSQL
                  Unix dbm

Регулярные выражения

Регулярные выражения используются для сложного манипулирования строками в PHP. Функции, которые поддерживают регулярные выражения:
          ereg() 

          ereg_replace() 

          eregi() 

          eregi_replace() 

          split() 

Все эти функции принимают строку регулярного выражения как их первый параметр. PHP использует расширенные регулярные выражения POSIX как определено в POSIX 1003.2. Для полного описания регулярных выражений POSIX см. соответствующие разделы руководства (regex), в каталоге regex дистрибутива PHP.

Example 2-4. Пример регулярных выражений

ereg("abc",$string);            
/* Возвращает 'истина', если "abc"
   найдено в строке $string. */

ereg("^abc",$string);
/* Возвращает 'истина', если "abc"
   найдено в начале строки $string. */

ereg("abc$",$string);
/*  Возвращает 'истина', если "abc"
   найдено в конце строки $string. */

eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT);  
/*  Возвращает 'истина', если браузер клиента
   - Netscape 2, 3 или MSIE 3. */

ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)",
     $string,$regs); 
/* Помещает три слова - $regs[1], $regs[2] и $regs[3], разделенные пробелом. */

ereg_replace("^","<BR>",$string); 
/* Устанавливает тег <BR> в начало строки $string. */
 
ereg_replace("$","<BR>",$string); 
/* Устанавливает тег <BR> в конец строки $string. */

ereg_replace("\n","",$string);
/* Отсекает символ "возврат каретки" в строке $string. */

Обработка ошибок

В PHP есть 4 типа ошибок и предупреждений. Это:

1 - Нормальные Ошибки Функции(Normal Function Errors)

2 - Нормальные Предупреждения(Normal Warnings)

4 - Ошибки Синтаксического Анализатора(Parser Errors)

8 - Уведомления(Notices) : предупреждения, которые Вы можете проигнорировать но, которые могут подразумевать баги в вашем коде

Эти 4 типа комбинируются при определении ошибки, сообщая уровень. Ошибка по умолчанию, возвращает уровень 7, который является комбинацией 1 + 2 + 4, или все ошибки за исключением примечаний. Этот уровень может быть изменен в файле php3. ini директивой error_reporting. Он также может быть установлен в вашем файле Apache httpd.conf директивой php3_error_reporting, или же это может быть произведено во времени выполнения сценария, с использованием функции error_reporting ().

Все выражения PHP могут также вызываться с префиксом "@", который выключает сообщение об ошибке, специфичное для этого выражения. Если ошибка произошла во время выполнения такого выражения, и допускается возможность track_errors, Вы можете найти сообщения об ошибках в глобальной переменной $php_errormsg.

Глава 3. Установка

Эта глава является руководством по конфигурации и установке PHP3. Требуемые знания и программное обеспечение:

Установка из исходных кодов на UNIX:

Загрузка исходных кодов:

Исходные коды последней версии можно найти по адресу: http://www.php.net.

Инструкции по быстрой установке (версия модуля Apache):

 


1. gunzip apache_1.3.x.tar.gz
2. tar xvf apache_1.3.x.tar
3. gunzip php-3.0.x.tar.gz
4. tar xvf php-3.0.x.tar
5. cd apache_1.3.x
6. ./configure --prefix=/www
7. cd ../php-3.0.x
8. ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
9. make
10. make install
11. cd ../apache_1.3.x
12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
13. make
14. make install

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

15. cd ../php-3.0.x
16. cp php3.ini-dist /usr/local/lib/php3.ini

Вы можете отредактировать файл /usr/local/lib/php3.ini для установления опций PHP.
Если Вы предпочитаете поместить этот файл в другое место,
то используйте --with-config-file=/path в шаге 8.

17. Отредактируйте Ваш файл httpd.conf или srm.conf и добавьте:

AddType application/x-httpd-php3 .php3

Вы можете выбрать здесь любое расширение по Вашему желанию.
В данном случае мы просто рекомендуем выбрать .php3.

18. Используйте Вашу обычную процедуру для запуска сервера Apache.
(Вы должны остановить и перезапустить сервер, а не просто перезагрузить сервер
с использованием сигнала HUP или USR1).

 

Конфигурация:

Имеется два пути конфигурирования PHP3.

 

Детали различных параметров конфигурации рассмотрены ниже. Модуль Apache:

 

Для построения PHP3 в качестве модуля Apache ответьте "yes" в пункте "Build as an Apache module?" (параметр конфигурации --with-apache= DIR ) и определить базовый каталог дистрибутива Apache. Если Вы распаковали свой дистрибутив Apache в директорию /usr/local/www/apache_1.2.4 то она и будет Вашей базовой директорией дистрибутива Apache. Директория по умолчанию /usr/local/etc/httpd. Модуль fhttpd:

 

При построении fhttpd в качестве модуля fhttpd ответьте "yes" в пункте "Build as an fhttpd module?" (параметр конфигурации --with-fhttpd= DIR ) и определить базовый каталог исходных кодов fhttpd. По умолчанию это /usr/local/src/fhttpd. Если Вы запускаете fhttpd, то построение PHP3 в качестве модуля даст лучшую производительность и возможность контроля за удаленным исполнением. Версия CGI:

 

По умолчанию PHP3 формируется как программа CGI. Если Вы используете web server с поддержкой PHP3 в качестве модуля, то в своих решениях Вы должны исходить из производительности. Однако CGI версия дает возможность пользователям Apache исполнять страницы с поддержкой PHP под различными идентификаторами пользователя. Пожалуйста, прочитайте Security chapter если Вы собираетесь исполнять PHP как CGI. Параметры поддержки базы данных:

 

PHP имеет собственную поддержку для нескольких баз данных (так же как ODBC):

Adabas D
 
      --with-adabas =DIR

Компиляция с поддержкой Adabas D. Параметр - установочная директория Adabas D, по умолчанию /usr/local/adabasd.

Adabas home page

dBase
	--with-dbase

Включает условный атрибут поддержки Dbase. Не требует внешних библиотек.

filePro
	--with-filepro

Включает условный атрибут поддержки filePro только для чтения. Не требует внешних библиотек.

mSQL
	--with-msql=DIR

Включает поддержку mSQL. Параметр этой опции - установочная директория mSQL, по умолчанию /usr/local/Hughes. Это директория по умолчанию дистрибутива mSQL 2.0 configure автоматически определяет, какую версию mSQL Вы используете, а PHP3 поддерживает как версию 1.0, так и 2.0, но если Вы компилируете PHP2 с версией mSQL1.0, то можете получить доступ только к базам данных mSQL1.0 и наоборот.

Посмотрите также директивы mSQL Configuration в configuration file.

mSQL home page

MySQL
	--with-mysql=DIR

Включает поддержку MySQL. Параметр в этой опции - установочная директория MySQL, по умолчанию /usr/local. Она является директорией по умолчанию в дистрибутиве MySQL.

Посмотрите также директивы MySQL Configuration в configuration file.

MySQL home page

iODBC
	--with-iodbc=DIR

Включает поддержку iODBC. Этот признак был разработан сначала для iODBC Driver Manager, перераспределяемого ODBC driver manager, который выполняется под множеством разновидностей UNIX. Параметром этой опции является установочная директория iODBC, по умолчанию /usr/local.

FreeODBC home page

OpenLink ODBC
	--with-openlink=DIR

Включает поддержку OpenLink ODBC. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/openlink.

OpenLink Software's home page

Oracle
	--with-oracle=DIR

Включает поддержку Oracle. Протестирован и должен работать на версиях Oracle от 7.0 до 7.3. Параметром является директория ORACLE_HOME Вы не должны определять этот параметр, если была установлена среда окружения Oracle.

Oracle home page

PostgreSQL
	--with-pgsql=DIR

Включает поддержку PostgreSQL. Параметром является базовая установочная директория PostgreSQL, по умолчанию /usr/local/pgsql.

Посмотрите также директивы Postgres Configuration в configuration file.

PostgreSQL home page

Solid
	--with-solid=DIR

Включает поддержку Solid. Параметром является установочная директория Solid, по умолчанию /usr/local/solid.

Solid home page

Sybase
	--with-sybase=DIR

Включает поддержку Sybase. Параметром является установочная директория Sybase, по умолчанию /home/sybase.

Посмотрите также директивы Sybase Configuration в configuration file.

Sybase home page

Sybase-CT
	--with-sybase-ct=DIR

Включает поддержку Sybase-CT. Параметром является установочная директория Sybase, по умолчанию /home/sybase.

Посмотрите также директивы Sybase-CT Configuration в configuration file.

Velocis
	--with-velocis=DIR

Включает поддержку Velocis. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/velocis.

Velocis home page

A custom ODBC library
	--with-custom-odbc=DIR

Включает поддержку для произвольной custom ODBC library. Параметром является базовая директория, по умолчанию /usr/local.

Эта опция подразумевает, что Вы определили CUSTOM_ODBC_LIBS, когда исполняется сценарий конфигурации. Вы также должны иметь правильный заголовочный файл odbc.h где-нибудь в путях включения. Если у Вас его нет, то создайте свой заголовочный файл и включите его отсюда. Он может также требовать несколько внешних определений, особенно когда это на нескольких платформах. Определите их в CFLAGS.

Например Вы можете использовать Sybase SQL Anywhere on QNX следующим образом: CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50

Unified ODBC
	--disable-unified-odbc

Отключает Unified ODBC модуль, который является общим интерфейсом ко всем базам данных с интерфейсом, основанным на ODBC, таких как Solid и Adabas D. Это также работает для нормальных библиотек ODBC. Был проверен с iODBC, Solid, Adabas D и Sybase SQL Anywhere. Требуется, чтобы один (и только один) из этих модулей или модуль Velocis был включен или определена пользовательская библиотека ODBC. Этот параметр применим только если используется одна из следующих опций: --with-iodbc, --with-solid, --with-adabas, --with-velocis, или --with-custom-odbc,

Посмотрите также директивы Unified ODBC Configuration в configuration file.

LDAP
	--with-ldap=DIR

Включает поддержку LDAP (Lightweight Directory Access Protocol). ). Параметром является базовая установочная директория LDAP, по умолчанию /usr/local/ldap.

Более подробную информацию по LDAP можно найти в RFC1777 и RFC1778. Другие параметры конфигурации:

 

--enable-sysvsem
	--enable-sysvsem

Включает поддержку для семафоров Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.

--enable-sysvshm
	--enable-sysvshm

Включает поддержку разделяемой памяти для Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.

--with-xml
	--with-xml

Включает поддержку для непроверенных синтаксических анализаторов XML, используя библиотеку от James Clark's expat library. Для больших подробностей обратитесь к XML function reference .

--enable-maintainer-mode
	--enable-maintainer-mode

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

--with-system-regex
	--with-system-regex

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

--with-config-file-path
	--with-config-file-path=DIR

Маршрут, используемый для просмотра the php3.ini file при старте PHP.

--with-exec-dir
	--with-exec-dir=DIR

Разрешить только запуск исполнимых файлов в DIR при нахождении в защищенном режиме. По умолчанию это /usr/local/bin. Эта опция только устанавливает значение по умолчанию, которое потом можно изменить при помощи директивы safe_mode_exec_dir в configuration file.

--disable-debug
	--disable-debug

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

--enable-safe-mode
	--enable-safe-mode

Включает защищенный режим (safe mode) по умолчанию. Это накладывает некоторые ограничения на действия PHP, таких как открытие файлов только внутри корня документа. Для более подробной информации смотрите Security chapter Пользователи CGI всегда должны включать безопасный режим. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы safe_mode configuration file.

--enable-track-vars
	--enable-track-vars

Указывает PHP3 отслеживать пришедшие переменные GET/POST/cookie в массивах HTTP_GET_VARS, HTTP_POST_VARS и HTTP_COOKIE_VARS. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы track_vars в configuration file.

--enable-magic-quotes
	--enable-magic-quotes

Включает по умолчанию системные квоты. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы magic_quotes_runtime в configuration file. Смотрим также директивы magic_quotes_gpc и magic_quotes_sybase.

--enable-debugger
	--enable-debugger

Включает внутреннюю поддержку PHP3 debugger. Это свойство находится в стадии испытания. Смотрим также директивы Debugger Configuration в configuration file.

--enable-discard-path
	--enable-discard-path

Если это включено, то бинарный PHP CGI может быть безопасно помещен вне дерева web и пользователи не смогут обойти защиту .htaccess. Читайте об этой опции section in the security chapter.

--enable-bcmath
	--enable-bcmath

Включает стиль bc произвольной точности математических функций. Смотрим также опцию bcmath.scale в configuration file.

--enable-force-cgi-redirect
	--enable-force-cgi-redirect

Включает проверку безопасности для внутренних переадресаций сервера (redirect). Вы должны использовать это, если запускаете CGI версию с Apache.

Когда PHP используется в качестве исполняемого CGI, PHP по умолчанию сначала всегда проверяет, что используется переадресацией (например под Apache, используя директивы Action). Это дает уверенность, что исполняемый PHP не может использоваться для того, чтобы обойти стандартные процедуры установления прав web сервера путем непосредственного вызова, как например http://my.host/cgi-bin/php/secret/doc.html. Этот пример, доступен на http://my.host/secret/doc.html но игнорирует все установленные httpd правила безопасности для директории /secret.

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

Читайте об этой опции в section in the security chapter .

--disable-short-tags
	--disable-short-tags

Отключает краткую форму <? ?>тегов PHP3. Вы должны отключить краткую форму, если хотите использовать PHP3 c XML. При отключенной краткой форме принимается только тег PHP3 <?php ?>. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы short_open_tag в configuration file.

--enable-url-includes
	--enable-url-includes

Дает возможность выполнять код на других HTTP и FTP серверах непосредственно из PHP3 с include(). Смотрим также опцию include_path в configuration file.

--disable-syntax-hl
	--disable-syntax-hl

Выключает синтаксическое выделение.

CPPFLAGS и LDFLAGS

При сборке PHP3 установщик просматривает заголовочные и библиотечные файлы в различных директориях, измените соответственно переменные окружения CPPFLAGS и LDFLAGS. Если Вы используете нормальный shell, то вы должны написать LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure Построение:

 

Когда PHP3 сконфигурирован, Вы готовы к построению исполнимых CGI или библиотеку PHP3. Об этом заботится команда make. Если Вы потерпели неудачу и не можете понять почему, то смотрите раздел Problems section.

VPATH

Проверка:

 

Если Вы собрали PHP3 в качестве программы CGI, Вы можете проверить результат, выполнив команду make test. Это хорошая идея - проверить результат сборки. Этим способом Вы можете обнаружить проблему с Вашим PHP3 на ранней стадии, вместо того, чтобы бороться с этим позже. Контрольное тестирование:

 

Если Вы собрали PHP3 в качестве программы CGI, Вы можете протестировать свою версию при помощи команды make bench. Обратите внимание, что если используется защищенный режим по умолчанию, то тест может не завершиться, если он требует больше, чем 30 секунд. Это происходит потому, что set_time_limit() () не может быть использована в защищенном режиме. Используйте max_execution_time для контроля этого времени в Ваших собственных сценариях. make bench игнорирует configuration file.

Руководство по установке PHP3 для Windows

Это руководство по установке поможет Вам установить и сконфигурировать PHP3 на Ваших web серверах под Windows 9x/NT. Данное руководство составил Bob Silva. Последнюю версию можно найти по адресу http://www.umesd.k12.or.us/php/win32install.html.

Данное руководство обеспечивает поддержку установки на:


Personal Web Server (рекомендуется новейшая версия)
Internet Information Server 3 or 4
Apache 1.3.x
Omni HTTPd 2.0b1

 

Изменение конфигурации для PHP3:

Все модули теперь начинаются с префикса 'php3_'. Вы должны изменить свой файл php3.ini и/или все сценарии загрузки расширений с функцией dl() (либо везде удалите префикс 'php3_'). Это предотвратит путаницу между модулями PHP и их библиотеками обеспечения.

ChangeLog, FAQ и обновленную документацию всегда можно найти на официальном сайте PHP или любом из его зеркал.

Основные шаги установки:

Данные шаги должны быть выполнены при любой установке перед специфическими инструкциями сервера:

 

Windows 95/98/NT и PWS/IIS 3:

Рекомендуемый метод конфигурирования этих серверов состоит в использовании INF файлов, поставляемых с дистрибутивом (php_iis_reg.inf). Вы можете отредактировать этот файл и убедитесь, что расширения и установочная директория PHP соответствует Вашим параметрам. Или Вы можете следовать перечисленным ниже шагам, чтобы сделать это вручную.

ПРЕДУПРЕЖДЕНИЕ: Эти шаги включают в себя непосредственную работу с windows registry. Мы настоятельно рекомендуем вам сначала сделать резервную копию registry. Группа разработчиков PHP не несет ответственности, если Вы повредите Ваш registry.

 

 

Пользователи PWS и IIS 3 теперь имеют полностью работающую систему. Пользователи IIS 3 могут использовать tool от Steven Genusa для конфигурирования своих карт сценариев.

Windows NT и IIS 4

Для установки PHP3 на NT Server с запущенным IIS4 следуйте следующим инструкциям:

 

 

Windows 9x/NT и Apache 1.3.x

Вы должны редактировать Ваш файл srm.conf или httpd.conf , чтобы сконфигурировать Apache для работы с исполняемыми PHP CGI.

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

 

 

Для обеспечения возможности использования исходного текста, просто создайте файл сценария PHP и вставьте этот код в: . Substitute original_php_script.php3php3 с именем желательного файла источника (это только один из путей). Обратите внимание, что на Win-Apache все обратные слеши в пути предложения, такого как "c:\directory\file.ext" должны быть заменены на прямые.

Omni HTTPd 2.0b1 для Windows

Данная конфигурация должно быть самая простая:

 


Шаг 1: Установите Omni server;
Щелкните правой клавишей на голубой иконке OmniHTTPd в system tray и выберите Properties
Шаг 3: Щелкните на Web Server Global Settings
Шаг 4: На 'External' tab введите: virtual = .php3 | actual = c:\path-to-php-dir\php.exe
Шаг 5: На Mime tab, введите: virtual = wwwserver/stdcgi | actual = .php3
Шаг 6: Щелкните OK

 

Повторите шаги 2 - 6 для каждого расширения, которое Вы желаете ассоциировать с PHP.

Модули PHP:

 

Таблица 3-1. Модули PHP
php3_calendar.dll Функции преобразования календаря
php3_crypt.dll Функции шифрования
php3_dbase.dll Функции баз данных
php3_dbm.dll Эмуляция GDBM посредством Berkely DB2 library
php3_filepro.dll Доступ READ ONLY к базам данных filepro
php3_gd.dll Библиотека функций GD для манипуляций с gif
php3_hyperwave.dll Функции HyperWave
php3_imap4r2.dll Функции IMAP 4
php3_ldap.dll Функции LDAP
php3_msql1.dll Клиент mSQL 1
php3_msql2.dll Клиент mSQL 2
php3_mssql.dll Клиент MSSQL (требует MSSQL DB-Libraries)
php3_mysql.dll Функции MySQL
php3_nsmail.dll Функции Netscape mail
php3_oci73.dll Функции Oracle
php3_snmp.dll Функции SNMP (только для NT!)
php3_zlib.dll Функции ZLib

Глава 3. Установка. Проблемы?

Читайте FAQ:

Некоторые проблемы встречаются чаще других. Наиболее распространенные описаны в PHP3 FAQ, который можно найти по адресу: http://www.php.net/FAQ.php3

Сообщения об ошибках:

Если Вы считаете, что нашли ошибку в PHP3, то сообщите о ней. Разработчики PHP3 вероятно не знают об этом и если Вы о ней не сообщите, то она так и не будет исправлена. Формы для сообщений об ошибках доступны на сети сайтов PHP3, главная форма находится по адресу: http://ca.php.net/bugs.php3.

Другие проблемы:

Если Вы все еще не можете решить проблему, то возможно кто-нибудь из списка рассылки PHP3 способен Вам помочь. Вы прежде всего должны проверить архив на тот случай, если кто-нибудь уже ответил людям с подобными проблемами. Архив можно найти по адресу http://www.tryc.on.ca/php3.html. Для того, чтобы подписаться на список рассылки PHP3 пошлите пустое письмо по адресу php3-subscribe@lists.php.net. Адрес списка рассылки php3@lists.php.net.

Если Вы хотите получить помощь через список рассылки, пожалуйста, попробуйте быть точным и дать необходимые детали о Вашем окружении (операционная система, версия PHP, какой используется web server, запускаете Вы PHP как CGI или в качестве модуля и т.д.) и желательно было бы предоставить код, чтобы другие могли воспроизвести и протестировать Вашу проблему.

Безопасность

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

Глава 4. Конфигурация


Файл php3.ini

Файл php3.ini читается при запуске синтаксического анализатора PHP. Для версий серверного модуля PHP, это случается только один раз, когда запускается веб-сервер. Для версии CGI это случается на каждом вызове.

Только для каждой директивы указанной здесь, имеется соответствующая директива Apache в httpd.conf. Просто добавьте php3_ в начале имен директив, указанных здесь.

Вы можете посмотреть установочные параметры большинства значений конфигурации вызвав функцию phpinfo().


Основные директивы конфигурации
auto_append_file string

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

Специальное значение none запрещает авто-добавление.

Примечание: Если сценарий обрывается функцией exit(), авто-добавление не произойдет.

auto_prepend_filestring

Определяет имя файла, который автоматически проверяется перед основным файлом. Файл включается так же, как если бы была вызвана функция include(), с использованием include_path.

Специальное значение none запрещает авто-добавление.

cgi_ext string
display_errors boolean

Это определяет, должны ли ошибки печататься на экране как часть HTML вывода или нет.

doc_root string

Главный каталог("root directory") PHP на сервере. Используется только когда он не пустой. Если PHP сконфигурирован при помощи safe mode, то никакие другие файлы за пределами этого каталога не обслуживаются.

engine boolean

Эта директива действительно полезна только в модуле PHP под Apache. Это используется на сайтах, где необходимо включать и выключать синтаксический анализ PHP на определенные каталоги и виртуальные серверы. Установкой php3_engine off в допустимом месте файла httpd.conf, PHP можно запрещать и разрешать.

error_log string

Имя файла, куда сохраняется журнал ошибок(log file) сценариев. Если используется специальное значение syslog, ошибки отправляются в системный журнал(system logger). В UNIX'е это syslog(3), а в Windows NT это журнал событий (event log). Системный журнал не поддерживается в Windows 95.

error_reporting integer

Устанавливает уровень сообщений об ошибках. Параметр является целым, представляющим битовую область. Добавьте те значения уровней сообщений об ошибках, которые Вы хотите.

Таблица 4-1. Уровни сообщений об ошибках
bit value допустимые сообщения
1 нормальные ошибки
2 нормальные предупреждения
4 ошибки синтаксического анализатора
8 некритичные предупреждения стиля

Значение по умолчанию - 7 (показываются нормальные ошибки, нормальные предупреждения и синтаксические ошибки).
open_basedir string

Ограничивает файлы, которые могут открываться PHP в определенном директории-дереве.

Когда сценарий пытается открыть файл с помощью, например, fopen или gzopen, наличие/расположение файла проверяется. Когда файл находится за пределами определенного директория-дерева, PHP откажется открыть его. Все символьные ссылки определены, так что нет возможности избежать этого ограничения с помощью symlink.

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

По умолчанию допускается открытие всех файлов.

gpc_order string

Устанавливает допустимость GET/POST/COOKIE в анализе. Установка по умолчанию этой директивы - "GPC". Установка ее в "GP", например, вынудит PHP полностью игнорировать cookies и перезапишет любые переменные метода GET переменными метода POST с одинаковыми именами.

include_path string

Определяет список каталогов где будут располагаться файлы для функций require() , include() и fopen_with_path() . Формат подобен формату системной переменной окружения PATH : список каталогов разделяется двоеточием в UNIX или точкой с запятой в Windows.

Пример 4-1. UNIX include_path

include_path=.:/home/httpd/php-lib

Пример 4-2. Windows include_path

include_path=".;c:\www\phplib"
Значением по умолчанию этой директивы является . (только текущий каталог).

isapi_ext string

 

log_errors boolean

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

magic_quotes_gpc boolean

Устанавливает magic_quotes состояние для GPC (Get/Post/Cookie) операций. Когда magic_quotes включено (on), все ' (одиночные кавычки), " (двойные кавычки), \ (обратные слэши) и нулевые значения (NUL's) записываются с обратной косой чертой автоматически. Если также включено magic_quotes_sybase, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты.

magic_quotes_runtime boolean

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

magic_quotes_sybase boolean

Если magic_quotes_sybase также разрешено, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты, если magic_quotes_gpc или magic_quotes_runtime разрешены.

max_execution_time integer

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

memory_limit integer

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

nsapi_ext string

 

short_open_tag boolean

Задает допустимость короткой формы ( <? ?> тегов PHP . Если вы хотите использовать PHP совместно с XML, эту опцию необходимо отключить. Если опция отключена, вы должны использовать длинную форму тегов ( <?php ?> ).

sql.safe_mode boolean

 

track_errors boolean

Если опция разрешена, последнее сообщение об ошибке всегда будет представлена в глобальной переменной $php_errormsg.

track_vars boolean

Если опция разрешена, входящая информация GET, POST и cookie может быть найдена в глобальных ассоциативных массивах $HTTP_GET_VARS , $HTTP_POST_VARS и $HTTP_COOKIE_VARS , соответственно.

upload_tmp_dir string

Временный каталог, используемый для хранения файлов при их загрузке на сервер. Должен допускать запись, независимо от того, каким пользователем PHP используется.

user_dir string

Основное имя каталога, используемого в домашнем каталоге пользователей для файлов PHP, например public_html .

warn_plus_overloading boolean

Если разрешено, эта опция выдает при выводе PHP сообщение когда оператор плюс( + ) используется в строке. Это должно облегчить поиск сценариев, которые должны быть перезаписаны с заменой на ( . ) - string concatenator.


Директивы Конфигурации Почты

 

SMTP string

Имя DNS или IP адрес сервера SMTP, который должен использоваться PHP под Windows для отправки сообщения функцией mail() .

sendmail_from string

Определяет "From:" - почтовый адрес, который используется в сообщении, отправленном PHP под Windows.

sendmail_path string

Указывает где может быть найдена программа sendmail , обычно это /usr/sbin/sendmail или /usr/lib/sendmail
configure делает честную попытку определить это за вас и устанавливает значение по умолчанию, но в случае неудачи вы можете установить это здесь.

Системы не использующие sendmail должны установить оболочку/замену sendmail их предлагаемой системой почты, если имеется. Например, Qmail пользователи могут указать /var/qmail/bin/sendmail .


Директивы Конфигурации Safe Mode

 

safe_mode boolean

Устанавливает допустимость PHP safe mode. Читайте главу Безопасность (Security) для большей информации

safe_mode_exec_dir string

Если PHP используется в safe mode, system() и другие функции, выполняющие системные программы, отказываются запускать программы, которые находятся не в этом каталоге.


Debugger Configuration Directives

 

debugger.host string

DNS-имя или IP-адрес хоста используемого отладчиком.

debugger.port string

Номер порта используемого отладчиком.

debugger.enabled boolean

Задает допустимость использования отладчика.


Директивы Загрузки Расширений(Extension Loading)

 

enable_dl boolean

Эта директива действительно полезна только в модуле PHP под Apache. Вы можете разрешать/запрещать динамическую загрузку расширений PHP функцией dl() раздельно по каталогам и/или по виртуальным серверам.

Основная причина для выключения динамической загрузки - безопасность. С динамической загрузкой, можно игнорировать все ограничения safe_mode и open_basedir.

По умолчанию динамическая загрузка должна допускаться, за исключением случаев, когда используется safe-mode. В safe-mode всегда недопустимо использование dl() .

extension_dir string

В каком каталоге PHP должен искать динамически загружаемые расширения.

extension string

Какие динамически загружаемые расширения загрузить, при запуске PHP.


Директивы конфигурации MySQL

 

mysql.allow_persistent boolean

Допустить постоянные/устойчивые MySQL соединения.

mysql.max_persistent integer

Максимальное число постоянных MySQL соединений за один процесс.

mysql.max_links integer

Максимальное число MySQL соединений за процесс, включая постоянные соединения.


Директивы конфигурации mSQL

 

msql.allow_persistent boolean

Допустить постоянные mSQL соединения.

msql.max_persistent integer

The maximum number of persistent mSQL connections per process.

msql.max_links integer

Максимальное число постоянных mSQL соединений за один процесс.


Директивы конфигурации Postgres

 

pgsql.allow_persistent boolean

Допустить постоянные/устойчивые соединения Postgres.

pgsql.max_persistent integer

Максимальное число постоянных соединений Postgres за процесс.

pgsql.max_links integer

Максимальное число Postgres соединений за процесс, включая постоянные соединения.


Директивы Конфигурации Sybase

 

sybase.allow_persistent boolean

Допустить постоянные Sybase соединения.

sybase.max_persistent integer

Максимальное число постоянных Sybase соединений за процесс.

sybase.max_links integer

Максимальное число Sybase соединений за процесс, включая постоянные соединения.


Директивы Конфигурации Sybase-CT

 

sybct.allow_persistent boolean

Допустить постоянные Sybase-CT соединения. По умолчанию включено.

sybct.max_persistent integer

Максимальное число постоянных Sybase-CT соединений за процесс. По умолчанию значение -1 означающее неограниченное количество.

sybct.max_links integer

Максимальное число Sybase-CT соединений за процесс, включая постоянные соединения. По умолчанию значение -1 означающее неограниченное количество.

sybct.min_server_severity integer

Сообщения Сервера со степенью более чем или равной sybct.min_server_severity будут сообщены как предупреждения. Эта величина может также устанавливаться из сценария вызовом sybase_min_server_severity() . Значение по умолчанию - 10 , которое сообщает ошибки строгости информации, или выше.

sybct.min_client_severity integer

Сообщения библиотеки Клиента со строгостью более чем или равной sybct.min_client_severity будут сообщены как предупреждениях. Эта величина может также устанавливаться из сценария вызовом sybase_min_client_severity() . По умолчанию - 10, что эффективно запрещает вывод.

sybct.login_timeout integer

Максимальное время (в секундах) ожидания повторной попытки соединения, прежде чем будет отказ. Имейте в виду, что если max_execution_time превышен когда время попытки соединения закончится, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию - одна минута.

sybct.timeout integer

Максимальное время(в секундах)ожидания окончания select_db или выполнения запроса. Имейте в виду, что если max_execution_time превышен, когда время функционирования истекает, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию не ограничено.

sybct.hostname string

Имя хоста, с которым вы хотите соединиться, для показа sp_who. По умолчанию - none.


Директивы Конфигурации BC Math

 

bcmath.scale integer

Количество десятичных цифр для всех функций bcmath.


Директивы Конфигурации Возможностей Броузера

 

browscap string

имя файла возможностей браузера.


Директивы Конфигурации Унифицированных ODBC

 

uodbc.default_db string

ИСТОЧНИК ДАННЫХ ODBC, для использования, если ничего не определено в odbc_connect() или odbc_pconnect() .

uodbc.default_user string

Имя пользователя, используемое если нет определений в odbc_connect() или odbc_pconnect() .

uodbc.default_pw string

Пароль, используемый, если не определено в odbc_connect() или odbc_pconnect() .

uodbc.allow_persistent boolean

Допустить постоянные/устойчивые ODBC соединения.

uodbc.max_persistent integer

Максимальное число постоянных ODBC соединений за процесс.

uodbc.max_links integer

Максимальное число ODBC соединений за процесс, включая постоянные соединения.


Модуль Apache


Директивы конфигурации модуля Apache

 


Модуль CGI переадресации module/action

 


CGI

 


Виртуальные хосты

 


Безопасность

PHP - мощный язык и интерпретатор, независимо от того, включен ли он в веб-сервер как модуль или выполняется как разделение исполнимых файлов(binary) CGI, он может иметь доступ к файлам, выполнять команды и открывать сетевые соединения на сервере. Эти свойства дают возможность выполнять что-нибудь на веб-сервере небезопасное по умолчанию. PHP разработан специально для того чтобы быть более безопасным языком для написания программ CGI, чем Perl или C.
С правильным выбором compile-time и runtime опций конфигурации он дает вам как раз ту комбинацию свободы и безопасности, которая вам нужна.

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


CGI binary

Возможные атаки

Использование PHP как исполнимых файлов CGI - выбор для установок, которые по некоторой причине не хотят внедрить PHP как модуль в программное обеспечение сервера (подобно Apache), или PHP будет использоваться с другими типами оболочек CGI, чтобы создать надежное окружение chroot и setuid для сценариев. Эта установка обычно включает установку выполняемого(binary) PHP в каталог cgi-bin на веб-сервере. Бюллетень CERT CA-96.11 рекомендует кроме того, устанавливать любые интерпретаторы в cgi-bin. Даже если исполнимый PHP может быть использован в качестве автономного интерпретатора, PHP разработан для того чтобы предохранить от атаки, которую эта установка делает возможной:

 


Вариант 1: обслуживаются только общие(public) файлы

Если ваш сервер не имеет какой-либо информации, которая не ограничивается паролем или управлением доступом на основе ip, нет потребности в этих опциях конфигурации. Если ваш веб-сервер не позволяет вам производить перенаправление, или сервер не имеет пути, чтобы связаться с исполнимым PHP, который запрашивает благополучно перенаправленный запрос, вы можете указать опцию --disable-force-cgi-redirect для конфигурирования сценария.
Вы все еще должны убедиться, что ваши сценарии PHP не полагаются на этот или другой путь вызова сценария, ни непосредственно http://my.host/cgi-bin/php/dir/script.php3, ни переадресацией http://my.host/dir/script.php3.

Перенаправление может быть сконфигурировано, например в Apache, директивами AddHandler и Action (см. ниже).


Вариант 2: использование --enable-force-cgi-redirect

Эта compile-time опция предохраняет от вызова PHP напрямую с URL подобно http://my.host/cgi-bin/php/secretdir/script.php3. Вместо того чтобы выполнить запрос, PHP выполняет только грамматический разбор в этом способе если он выполнил правила перенаправления вебсервера.

Обычно переадресация в конфигурации Apache сделана со следующими директивами:

Action php3-script /cgi-bin/php
AddHandler php3-script .php3

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


Вариант 3: установка doc_root или user_dir

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

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

Вы можете установить корневой каталог для скриптов директивой конфигурации doc_root в файле php3.ini , или вы можете установить переменную окружения PHP_DOCUMENT_ROOT. Если это установлено, CGI-версия PHP всегда будет добавлять doc_root и путь к файлу в запросах, так что вы всегда будете уверенны что за пределами этого каталога скрипты выполняться не будут (кроме user_dir //см.ниже).

Другая используемая опция - user_dir. Когда user_dir - не установлена, открытием файла управляет только doc_root. Открытие URL подобно http://my.host/~user/doc.php3 не даст результата при открытии файла из каталога пользователя, но вызывается файл ~user/doc.php3 из каталога doc_root (да,имя каталога начинается с тильды [~]).

Если user_dir установлена, например как public_php, запрос, подобный http://my.host/~user/doc.php3 откроет файл doc.php3 в каталоге public_php домашнего каталога пользователя. Если это /home/user, то выполняется /home/user/public_php/doc.php3.

user_dir задается независимо от doc_root, так что вы можете контролировать доступ к document root и user directory отдельно.


Вариант 4: PHP синтаксический анализатор вне дерева web

Очень безопасная опция должна установить синтаксический анализатор PHP где-нибудь вне дерева файлов web. В /usr/local/bin, например. Обратная сторона этой опции заключается в том что вы должны вставлять строку подобно:

 

#!/usr/local/bin/php
       

 

в первую строку любого документа, содержащего PHP тэги. Кроме того, вы должны сделать файлы выполнимыми. Точно так же, как Вы поступаете с любым другим сценарием CGI записанным в Perl или sh или любом другом языке, который использует #! shell-escape механизм для самозапуска.

Чтобы PHP получил возможность корректно оперировать с PATH_INFO и PATH_TRANSLATEDпри такой установке, php анализатордолжен быть скомпилирован с опцией конфигурации --enable-discard-path


Модуль Apache

Когда PHP используется как Apache модуль, не наследуются права пользователя Apache (обычно таковые - "nobody").

Глава 5. Синтаксис и грамматика

Синтаксис PHP заимствован непосредствено из C.   Java и Perl также повлияли на синтаксис данного языка.

Переход из HTML

Есть три способа выхода из HTML и перехода в "режим PHP кода":

Пример 5-1. Способы перехода из HTML

1.  <? echo("простейший способ, инструкция обработки SGML\n"); ?>

2.  <?php echo("при работе с XML документами делайте так\n"); ?>

3.  <script language="php"> 
        echo ("некоторые редакторы (подобные FrontPage) не
               любят обрабатывающие инструкции");
    </script>;

4.  <% echo("От PHP 3.0.4 можно факультативно применять ASP-тэги"); %>
     

Разделение инструкций

Инструкции (утверждения) разделяются также как в C или Perl - точкой с запятой.

Закрывающий тэг (?>) тоже подразумевает конец утверждения, поэтому следующие записи эквивалентны:

<php
    echo "Это тест";
?>

<php echo "Это тест" ?>
     

Типы переменных

PHP поддерживает переменные следующих типов:

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

Если вам нравится указывать тип переменной непосредственно, вы можете использовать для этого инструкцию cast либо функцию settype().

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

Инициализация переменной

Для инициализации переменной в PHP  вы просто присваиваите ей значение. Для большинства переменных это именно так; для массивов и объектных переменных, однако, может использоваться несколько иной механизм.

Инициализация Массивов

Массив может инициализироваться одним из двух способов: последовательным присвоением значений, или посредством конструкции array() (которая описана в разделе Функции Массивов).

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

$names[] = "Jill";   // $names[0] = "Jill"
$names[] = "Jack";   // $names[1] = "Jack"
      

Как в C и Perl, элементы массива нумеруются начиная с 0, а не с 1.

Инициализация объектов

Для инициализации объектной переменной используйте новое предписание для сопоставления данного объекта объектной переменной.

class foo {
    function do_foo () { 
        echo "Doing foo."; 
    }
}

$bar = new foo;
$bar -> do_foo ();
      

Область Переменной

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

 
$a = 1; /* глобальная область */ 

Function Test () { 
    echo $a; /* ссылка на переменную локальной области */ 
} 

Test ();
    

Этот скрипт не выдаст что-либо на выходе, поскольку инструкция echo относится к локальной версии переменной $a, значение которой присваивается не внутри этой области. Вы можете заметить, что здесь имеется некоторое отличие от языка C, в том что глобальные переменные в C автоматически действуют и внутри функций,   если только они не переписываются локальными определениями. Это может вызвать некоторые проблемы, т.к. по неосторожности можно изменить глобальную переменную. В PHP глобальные переменные должны быть продекларированы глобально внутри функции, если предполагается их использование в данной функции.  Например:

$a = 1;
$b = 2;

Function Sum () {
    global $a, $b;

    $b = $a + $b;
} 

Sum ();
echo $b;
    

Вышеописанный скрипт выдаст значение "3". Поскольку $a и $b декларируются глобально внутри функции, ссылки на данные переменные трактуются как ссылки на их глобальные версии. Нет ограничений на количество глобальных переменных, которыми можно манипулировать внутри функции.

Вторым способом доступа к переменным из глобальной области является использование специального опеределяемого PHP массива $GLOBALS. При этом предыдущий пример может быть записан как:

$a = 1;
$b = 2;

Function Sum () {
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum ();
echo $b;
    

Массив $GLOBALS является ассоциативным массивом, в котором имя глобальной переменной является ключом, а значение этой переменной является значением элемента массива.

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

Function Test () {
    $a = 0;
    echo $a;
    $a++;
}
    

Эта функция совершенно бесполезна практически, поскольку каждый раз при ее вызове она устанавливает $a в 0 и выводит "0".   Выражение $a++ , которое увеличивает значение переменной, так же бесполезно, поскольку при выходе из функции переменная $a исчезает. Для придания дееспособности функции подсчета, которая не теряла бы нить текущего счета, переменная $a декларируется как статическая:

Function Test () {
    static $a = 0;
    echo $a;
    $a++;
}
    

Теперь, каждый раз при вызове функции Test() она будет выводить значение $a и увеличивать его.

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

Function Test () {
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        Test ();
    }
    $count--;
}
    

Изменяемые переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Обычная переменая устанавливается так:

$a = "hello";
    

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hello может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.:

$$a = "world";
    

С этой точки зрения, две переменных определены и сохранены в символьном дереве PHP: $a с содержимым "hello" и $hello с содержимым "world". Так, инструкция:

echo "$a ${$a}";
    

осуществляет то же самое, что и инструкция:

echo "$a $hello";
    

а именно, обе они выводят: hello world.

Чтобы использовать изменяемые переменные с массивами, необходимо решить проблему неоднозначности. Это означает, что если вы пишете $$a[1], то синтаксическому анализатору необходимо знать, имеете ли вы в виду использовать $a[1] как переменую, или вы предполагаете $$a  как переменную а [1] как индекс этой переменной. Синтаксис для разрешения подобной неоднозначности такой: ${$a[1]} для первого случая и ${$a}[1] для второго.

Переменные вне PHP

HTML Формы (GET и POST)

Когда программой-обработчиком формы является PHP-скрипт, переменные этой формы автоматически доступны для данного скрипта PHP. Например, рассмотрим следующую форму:

Пример 5-2. Простая переменная формы

<form action="foo.php3" method="post">
    Name: <input type="text" name="name"><br>
    <input type="submit">
</form>
      

При активизации формы PHP создаст переменную $name, значением которой будет то содержимое, которое было введено в поле Name: данной формы.

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

Пример 5-3. Более сложные переменные формы

<form action="array.html" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        </select>
    <input type="submit">
</form>
      

Если PHP-атрибут track_vars включен, через установку конфигурации track_vars или директивой <?php_track_vars?>, тогда переменные, активизированные посредством методов POST или GET, будут также находиться в глобальных ассоциативных массивах $HTTP_POST_VARS и $HTTP_GET_VARS соответственно.

Имена переменных РИСУНКА АКТИВИЗАЦИИ

При активизации (запуске) формы можно использовать рисунок (изображение) вместо стандартной кнопки запуска, в тэге подобном этому:

<input type=image src="image.gif" name="sub">
      

Когда пользователь нажимает кнопку мыши где-либо над таким рисунком, сопровождающая форма передается на сервер с двумя дополнительными переменными, sub_x и sub_y. Они содержат координаты места нажатия кнопки мыши пользователем внутри данного рисунка. Можно отметить, что практически, реальные имена переменных передаваемые браузером, содержат точку вместо символа подчеркивания, но PHP конвертирует точку в элемент подчеркивания (underscore) автоматически.

HTTP Кукисы

PHP очевидным образом поддерживает HTTP кукисы, как это определено в Netscape's Spec. Кукисы являются механизмом хранения данных в удаленном браузере, используемым для поддержки процедуры обмена или идентификации ответа   пользователя. Кукисы можно устанавливать используя функцию SetCookie(). Кукисы являются частью заголовка HTTP, поэтому функция SetCookie() должна вызываться прежде чем какие-либо передаваемые данные посылаются браузеру. Это такое же ограничение, как и для функции Header(). Любые кукисы, посылаемые вам клиентом, автоматически преобразовываются в переменные PHP, также как данные методов GET и POST.

Если необходимо назначить множественные значения одному кукису, просто добавьте квадратные скобки [ ] к имени кукиса. Например:

SetCookie ("MyCookie[]", "Testing", time()+3600);
     

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

Пример 5-4. Пример функции SetCookie

$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
     

Переменные окружения

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

echo $HOME;  /* Показывает переменную окружения HOME, 
если она установлена. */
      

Хотя при поступлении информации механизмы GET, POST и Cookie также атоматически создают переменные PHP, иногда лучше явным образом прочитать переменную окружения, для того чтобы быть уверенным в получении ее правильной версии. Для этого может использоваться функция getenv(). Для установки значения переменной окружения пользуйтесь функцией putenv().

Директивы конфигурации сервера

Изменение типа

PHP не требует явного определения типа при объявлении переменной, тип переменной определяется по контексту в котором она используется. То есть, если вы присваиваете строковое значение переменной var, var становится строкой. Если затем присвоить переменной var значение целого (числа), то она станет целым.

Примером автоматического преобразования типа в PHP может служить оператор сложения '+'. Если какой-либо из оперендов является числом с дробной частью (тип double), то затем все операнды оцениваются как double и результат будет иметь тип double. Иначе, эти операнды будут интерпретированы как целые (integers) и результат будет так же иметь тип integer. Отметим, что при этом НЕ меняются типы самих операндов, меняется только оценка этих операндов.

$foo = "0";  // $foo является строкой (ASCII 48)
$foo++;      // $foo является строкой "1" (ASCII 49)
$foo += 1;   // $foo сейчас является целым (2)
$foo = $foo + 1.3;  // $foo сейчас имеет тип double (3.3)
$foo = 5 + "10 Little Piggies";    // $foo является целым (15)
$foo = 5 + "10 Small Pigs";   // $foo является целым (15)
     

Если последние два примера выше кажутся неясными, смотрите Преобразование строк.

Если вы хотите чтобы переменная принудительно оценивалась как имеющая определенный тип, смотрите раздел Приведение типа. Если вы желаете изменить тип переменной, смотрите settype().

Определение типов переменных

Поскольку PHP определяет типы переменных и преобразует их (в общем) по мере необходимости, не всегда очевидно какой тип данная переменная имеет в какой-то отдельный момент. Поэтому PHP включает несколько функций, которые позволяют определить текущий тип переменной. Это функции gettype(), is_long(), is_double(), is_string(), is_array(), и is_object().

Приведение типа

Приведение типа работает в PHP во многом так же как в C: название требуемого типа записывается в круглых скобках перед переменной, которая должна быть приведена к данному типу.

$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double
      

Допускается следующее приведение типов:

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

$foo = (int) $bar;
$foo = ( int ) $bar;
      
Преобразование строк

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

Переменная string будет оценена как double, если она содержит любой из символов '.', 'e', или 'E'. Иначе она будет оценена как integer.

Данное значение задается начальной частью строковой переменной. Если строка начинается с допустимых цифровых данных, то это значение и будет использоваться. Иначе, будет значение 0 (ноль). Допустимые цифровые данные - это конструкция из факультативного символа, следующего за одной или несколькими цифрами (содержащими факультативно десятичную точку), обозначающего экспоненту. Экспонента может обозначаться символом 'e' или 'E', который может следовать за одной или несколькими цифрами.

$foo = 1 + "10.5";      // $foo тип double (11.5)
$foo = 1 + "-1.3e3";    // $foo тип double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo тип integer (1)
$foo = 1 + "bob3";      // $foo тип integer (1)
$foo = 1 + "10 Small Pigs";     // $foo тип integer (11)
$foo = 1 + "10 Little Piggies"; // $foo тип integer (11); 
                                // строка содержит 'e'
      

Дополнительную информацию смотрите в руководстве Unix страница для strtod(3).

Манипуляции с массивом

PHP поддерживает как скалярные так и ассоциативные массивы. Фактически, между ними нет разницы. Вы можете создать массив используя функции  list() или array(), или можно явно задать значение каждого элемента массива.

 
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
     

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

 
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" 
     

Массив может сортироваться функциями asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), и uksort() в зависимости от типа желаемой сортировки.

Подсчет количества элементов массива осуществляется функцией count().

Перемещаться по массиву позволяют функции next() и prev(). Другим типовым способом перемещения по массиву является использование функции each().

Глава 6. Элементы языка

Любой скрипт PHP состоит из последовательности операторов. Оператор может быть присваиванием, вызовом функции, циклом, условным выражением или пустым выражением (ничего не делающим). Операторы обычно заканчиваются точкой с запятой. Также операторы могут быть объединены в группу заключением группы операторов в фигурные скобки. Группа операторов также является оператором. В этой части описаны различные типы операторов.

Константа

PHP определяет несколько констант и предоставляет механизм для определения Ваших констант. Константы похожи на переменные, но они имеют слегка изменЈнный синтаксис.

ПредопределЈнные константы - это __FILE__ and __LINE__, которые соответствуют имени файла и номеру строки, которая выполняется в настоящий момент.
Пример 6-1. Использование __FILE__ и __LINE__
<?php
function report_error($file, $line, $message) {
    echo "An error occured in $file on line $line: $message.";
}

report_error(__FILE__,__LINE__, "Something went wrong!");
?>
     

Вы можете определить дополнительные константы с помощью функций define() и undefine() .
Пример 6-2. Описание констант
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
undefine ("CONSTANT");
?>
     

Выражения

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

Простейший пример, приходящий на ум это константы и переменные. Когда вы печатаете "$a = 5", вы присваиваете значение '5' переменной $a. '5', очевидно, имеет значение 5, иными словами'5' это выражение со значением5 (в данном случае'5' это целочисленная константа).

После этого присваивания вы считаете значением $a 5, также, если вы напишете $b = $a, вы будете ожидать того же как, если бы вы написали $b = 5. Другими словами, $a это также выражение со значением 5. Если всЈ написано правильно, то именно так оно и случиться.

Несколько более сложные примеры выражений - это функции. К примеру, подумайте на следующей функцией :

function foo () {
    return 5;
}
     

Подразумевая, что вы знакомы с концепциями функции (если нет, взгляните на часть, посвящЈнную функциям), вы считаете, что $c = foo() это практически то же самое, что написать $c = 5 и вы правы. Функции - это выражения с тем значением, которое они возвращают. Так как foo() возвращает 5, значение выражение 'foo()' - 5. Обычно функции подсчитывают возвращаемое значение,а не возвращают постоянное значение.

Конечно, значения в PHP не обязаны быть целыми и зачастую они не являются таковыми. PHP поддерживает 3 скалярных типа значений : целое, число с плавающей точкой и строки ( скалярные выражения вы не можете "разбить" на более маленькие части, как, к примеру, массивы). PHP поддерживает 2 составных (нескалярных) типа : массивы и объекты. Каждое из таких значений может быть присвоено переменной или возвращено функцией.

Итак, пользователи PHP/FI 2 не должны почувствовать каких-то перемен. PHP это язык, ориентированный на выражения, практически всЈ является выражениями.Обратимся к примеру, с которым мы уже разобрались, '$a = 5'. Легко заметить, что тут задействованы два значения - значение целой константы 5 и значение $a, которое также становиться равным 5.На самом деле здесь присутствует ещЈ одно значение, значение самого присваивания. Само присваивание становиться равным присваиваемому значению, в данном случае - 5.На практике это означает, что '$a = 5', не обращая внимания на то, что оно равно выражению со значением 5. То есть, запись типа '$b = ($a = 5)' похожа на запись'$a = 5; $b = 5;' (точка с запятой отмечает конец выражения). Так как присваивания рассматриваются справа налево, вы также можете написать '$b = $a = 5'.

Другой хороший пример направления выражения это прежварительное и последующее увеличение и уменьшение. Рользователи PHP/FI 2 и многих других языков могут быть знакомы с записями variable++ and variable--. Это операторы увеличения и уменьшения. В PHP/FI 2, оператор '$a++' не имеет значения(не является выражением), поэтому вы не можете его присвоить или использовать как-либо иначе. PHP расширяет возможность увеличения/уменьшения делая его выражением, как и в C. В PHP, подобно C, есть 2 типа инкремента - предварительный и последующий. И предыдущий и последующий инкремент увеличивает значение переменной и воздействие на переменную идентично.Разница в значении выражения инкремента. Предыдущее увеличение, которое записывается как '++$variable', приравнивается увеличенной переменной (PHP увеличивает переменную до того, как прочитать еЈ значение). Post-increment, which is written '$variable++' evaluates to the original value of $variable, before it was incremented (PHP increments the variable after reading its value, thus the name 'post-increment').

Очень распространЈнный тип выражений это выражения сравнения. Эти выражения имеют значение 0 или 1 (означает ложь или истину соответственно). PHP поддерживает > (больше, чем), >= ( больше или равно), = (равно), < (меньше,чем) и <= (меньше или равно). Эти выражения в основном используются внутри условий, например оператора IF.

Последний пример выражений, с которыми мы разберЈмся, это совмещЈнные выражения оператор-присваивание. Вы уже знаете, что для того, чтобы увеличить значение $a на еденицу, вы можете написать '$a++' или '++$a'. Но если следует увеличить значение больше, чем на еденицу, к примеру - на 3? Вы можете написать '$a++' несколько раз, но это не очень удобно и эффективно. Намного больше распространено написание '$a = $a + 3'. '$a + 3' вычисляется, как значение $a плюс 3, а затем присваивается переменной $a, в результате чего значение $a увеличивается на 3. В PHP, также как и в ряде других языков типа C, вы можете записать это короче, что со временем бывает проще и быстрее также и для понимания. Добавление 3 к текущему значению $a может быть записано как '$a+=3'. Это значит следующее : 'возьми значение $a, добавь к нему 3 и присвой это обратно $a. Кроме того, что это быстрее и понятнее, такой тип выражений быстрее исполняется. Значение '$a+=3' как и значение обычного присваивания это присвоенное значение. Заметьте, что оно не равно 3, а является общим значением $a и 3. Любой бинарный (имеющий 2 операнда - прим. пер.) оператор может быть записан таким методом, например : '$a-=5' (вычесть 5 из значения $a), '$b*=7' (умножиить значение $a на 7) и так далее.

Есть ещЈ такое выражение, которое может показаться незнакомым, если вы не встречались с ним в других языках - условный оператор с тремя операндами :

$first ? $second : $third

Если значение первого выражения истинно (не равно 0), то испольняется второе выражение и это является результатом данного условного выражения. Иначе исполняется третий оператор.

Этот пример должен помочь Вам лучше понять предварительное и последующее увеличение и вообще выражения ?

function double($i)    /* функция удваивания переменной */
{
  return $i*2;
}
$b = $a = 5;    /* присваиваем значения переменым $a и $b */
$c = $a++;    /* последующее увеличение, присваиваем $c начальное значение $a (5)*/
$e = $d = ++$b;    /* предварительное увеличение, присваиваем $d и $e увеличенное значение$b (6) */
   /* тут и $d и$e равны6 */
$f = double($d++);    /* присвоить удвоенное значение $d до его увеличения, то есть 2*6 = 12, переменной $f*/
$g = double(++$e);    /* присвоить удвоенное значение $e после его увеличения, то есть 2*7 = 14, переменной g */
$h = $g += 10;    /* сначала увеличить значение $g на 10, что даЈт в результате 24, а затем присвоить это значение переменной $h, что также даЈт 24 */

В начале главы мы сказали, что объясним различные типы операторов и, как и было обещано выражения могут быть операторами. Впрочем, не каждое выражения является оператором. В данном случае оператор имеет форму 'выражение' ';', то есть выражение, за которым следует точка с запятой. В '$b=$a=5;' $a=5 это правильное выражение, но само по себе оно не является оператором. А вот '$b=$a=5;' является правильным оператором.

ЕщЈ одна вещь, которую нужно упомянуть - это логические значения выражений. Во многих случаях, в основном в условных операторах и операторах циклов, вы не заинтересованы в конкретных значениях выражений, а только являются ли их значения TRUE или FALSE (в PHP нет специального типа boolean). Логические значения вычисляются примерно так же, как я в языке Perl. Любое не нулевое целое значение - это TRUE, ноль - это FALSE. Обратите внимание на то, что отрицательные значения - это не ноль и поэтому они считаются равными TRUE. Пустая строка и строка '0' это FALSE; все остальные строки - TRUE. И насчЈт составных типов (массивы и объекты) - если значение такого типа не содержит элементов, то оно считается равным FALSE; иначе подразумевается TRUE.

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

IF

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

if (expr) statement

Как объяснялось в части про выражения, вычисляется логический результат "expr" . Если expr равно TRUE, то PHP выполнит "statement", а если FALSE - проигнорирует.

Следующий пример выведет фразу 'a is bigger than b' если $a больше $b:

if ($a > $b)
    print "a is bigger than b";

Зачастую Вам требуется исполнить больше чем одно выражение по условию. Конечно, не надо окружать каждое выражение конструкцией IF. Вместо этого вы можете сгруппировать несколько выражений в блок выражений. К примеру, слежующий код не только выведет фразу, но и присвоит значение $a переменной $b:

if ($a > $b) { print "a is bigger than b"; $b = $a; }

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

ELSE

Зачастую Вам требуется исполнить одно выражение, если соблюдается какое-либо условие и другое выражение в противном случае. Вот для этого применияется ELSE. ELSE расширяет возможности IF по части обработки вариантов выражения, когда оно равно FALSE. Данный пример выведет фразу 'a is bigger than b' если $a больше $b, и 'a is NOT bigger than b' в противном случае:

 
if ($a > $b) { 
    print "a is bigger than b"; 
} else { 
    print "a is NOT bigger than b"; 
}
     

Выражение ELSE выполняется только если выражение IF равно FALSE, а если есть конструкции ELSEIF - то если и они также равны FALSE (см. ниже).

ELSEIF

ELSEIF, как и следует из его названия, является комбинацией IF и ELSE. ELSEIF как и ELSE позволяет выполнить выражение, если значение IF равно FALSE, но в отличие от ELSE оно выполнится только если выражение ELSEIF равно TRUE.К примеру, следующий код выведет 'a is bigger than b' если$a>$b, 'a is equal to b' если $a==$b, и 'a is smaller than b' если$a<$b:

if ($a > $b) {
    print "a is bigger than b";
} elseif ($a == $b) {
    print "a is equal to b";
} else {
    print "a is smaller than b";
}
     

Внутри одного выражения IF может быть несколько ELSEIF. Первое выражение ELSEIF (если таковые есть), которое будет равно TRUE, будет выполнено. В PHP3 вы можете написать 'else if' (два слова), что будет значить то же самое, что и 'elseif' (одно слово).

Выражение ELSEIF будет выполнено только если выражение IF и все предыдущие ELSEIF равно FALSE, а данный ELSEIF равен TRUE.

Иной синтаксис для оператора IF : IF(): ... ENDIF;

PHP3 предлагает иной путь для группирования операторов с оператором IF. Наиболее часто это используется когда вы внедряете блоки HTML внутрь оператора IF, но вообще может использоваться где угодно. Вместо использования фигурных скобок за "IF(выражение)" должно следовать двоеточие, одно или несколько выражений и завершающий ENDIF. Рассмотрите слежующий пример :

<?php if ($a==5): ?> A = 5 <?php endif; ?>

В этом примере блок "A = 5" внедрЈн внутрь выражения IF, используемого альтернативным способом. Блок HTML будет виден только если $a равно 5.statement written in the alternative syntax.

Этот альтернативный синтаксис применим и к ELSE и ELSEIF (expr) .Вот пример подобной структуры :

if ($a == 5):
    print "a equals 5";
    print "...";
elseif ($a == 6):
    print "a equals 6";
    print "!!!";
else:
    print "a is neither 5 nor 6";
endif;
      

WHILE

Цикл WHILE - простейший тип цикла в PHP3. Он действует как и его аналог в C. Основная форма оператора WHILE :

WHILE(expr) statement

Смысл оператора WHILE прост. Он предписывает PHP выполнять вложенный(е) оператор(ы) до тех пор пока expr равно TRUE. Значение выражения проверяется каждый раз при начале цикла, так что если значение выражения изменится внутри цикла, то он не прервЈтся до конца текущей итерации (выполнение всего блока вложенных операторов - это одна итерация). Иногда, если значение expr равно FALSE с самого начала, цикл не выполняется ни разу.

Как и в IF, вы можете сгруппировать несколько операторов внутри фигурных скобок или использовать альтернативный синтаксис :

WHILE(expr): выражения ... ENDWHILE;

Следующие примеры идентичны - оба выводят номера с 1 по 10:

/* example 1 */

$i = 1;
while ($i <= 10) {
    print $i++;  }

/* example 2 */

$i = 1;
while ($i <= 10):
    print $i;
    $i++;
endwhile;
     

DO..WHILE

Цикл DO..WHILE очень похож на WHILE за исключением того, что значение логического выражения проверяется не до, а после окончания итерации. Основное отличие в том, что DO..WHILE гарантировано выполнится хотя бы один раз, что в случае WHILE не обязательно.

Для циклов DO..WHILE существует только один вид синтаксиса:

$i = 0;
do {
    print $i;
} while ($i>0);
     

Этот цикл выполнится один раз, так как после окончания итерации будет проверено значение логического выражения, а оно равно FALSE ($i не больше 0), и выполнение цикла завершится.

Опытные программисты на C может быть знакомы с иным использованием DO..WHILE, позволяющем прекратить исполнение блока операторов в середине путЈм внедрения его в цикл DO..WHILE(0) и использования оператора BREAK. Следующий код демонстрирует такую возможность :

do {
    if ($i < 5) {
        print "i is not big enough";
        break;
    }
    $i *= $factor;
    if ($i < $minimum_limit) {
        break;
    }
    print "i is ok";
    ...process i...
} while(0);
     

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

FOR

Циклы FOR - наиболее мощные циклы в PHP. Они работают подобно их аналогам в C. Синтаксис цикла FOR :

FOR (expr1; expr2; expr3) statement

Первое выражение (expr1) безусловно вычисляется(выполняется) в начале цикла.

В начале каждой итерации вычисляется expr2. Если оно равно TRUE, то цикл продолжается и выполняются вложенный(е) оператор(ы). Если оно равно FALSE, то цикл заканчивается.

В конце каждой итерации вычисляется(исполняется) expr3.

Каждое из этих выражений может быть пустым. Если expr2 пусто, то цикл продолжается бесконечно (PHP по умолчанию считает его равным TRUE, как и С). Это не так бесполезно, как могло бы показаться, так как зачастую вам требуется закончить выполнение цикла используя оператор BREAK в сочетании с логическим условием вместо использования логического выражения в FOR.

Рассмотрим следующие примеры. Все они выводят номера с 1 по 10 :

/* пример 1 */

for ($i = 1; $i <= 10; $i++) {
    print $i;
}

/* пример 2 */

for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
    print $i;
}

/* пример 3 */

$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}

/* пример 4 */

for ($i = 1; $i <= 10; print $i, $i++) ;
     

Конечно, первый вариант кажется лучшим (или четвЈртый), но оказывавется возможность использования пустых выражений в цикле FOR зачастую оказывается полезной.

PHP также поддерживает альтернативный синтаксис FOR :

FOR (expr1; expr2; expr3): выражение; ...; endfor;

Другие языки используют оператор foreach для того, чтобы обрабатывает массивы или списки. PHP использует для этого оператор while и функции list() и each() . Для примера смотрите документацию по этим функциям.

BREAK

VREAK прерывает выполнение текущего цикла.

$i = 0;
while ($i < 10) {
    if ($arr[$i] == "stop") {
        break;
    }
    $i++;
}
     

CONTINUE

CONTINUE переходит на начало ближайшего цикла.

while (list($key,$value) = each($arr)) {
    if ($key % 2) { // skip even members
        continue;
    }
    do_something_odd ($value);
}
     

SWITCH

Оператор SWITCH похож на группу операторов IF с одинаковым выражением. Во многих случаях вам нужно сравнить переменную (или выражение) со многими различными значениями и выполнить различные фрагменты кода в зависимости от того, чему будет равно значение выражения. Это как раз то, для чего предназначается оператор SWITCH.

Следующие 2 примера это 2 разлчиных пути для достижения одной вещи, но один использует серию операторов IF, а другой - оператор SWITCH.

/* пример 1 */


if ($i == 0) {
    print "i equals 0";
}
if ($i == 1) {
    print "i equals 1";
}
if ($i == 2) {
    print "i equals 2";
}

/* пример 2 */

switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}
     

Важно понять как работает оператор SWITCH чтобы избежать ошибок. SWITCH выполняет последовательно оператор за оператором. В начале код не исполняется. Только когда встречается оператор CASE с подходящим значением, PHP начинает выполнять программу. PHP продолжает выполнять операторы до конца блока SWITCH или пока не встретит оператор BREAK. Если вы не напишете BREAK в конце цикла операторов, то PHP продолжит выполнять операторы и следующего SWITCH'а. К примеру :

/* пример 3 */

switch ($i) {
    case 0:
        print "i equals 0";
    case 1:
        print "i equals 1";
    case 2:
        print "i equals 2";
}
     

В этом случае, если $i равно 0, то PHP выполнит все операторы print! Если $i равно 1, то PHP выполнит последние два print. И только если $i равно 2, вы получите ожидаемый результат и выведено будет только 'i equals 2'. Так что важно не забывать ставить BREAK (разве что в некоторых случаях вы специально не захотите их ставить для достижения определЈнной цели).

Специальный случай - это 'default case'. Этот оператор соответствует всем значениям, которые не удовлетворяют другим case'ам. К примеру :

/* example 4 */

switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}
     

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

REQUIRE

Оператор REQUIRE заменяет себя содержимым указанного файла, похоже на то,как в препроцессоре C работает #include.

Это означает, что вы не можете поместить require() внутрь цикла и ожидать, что он включит содержимое дугого файла несколько раз в процессе каждой итерации. Для это используйте INCLUDE.

require ('header.inc');

INCLUDE

Оператор INCLUDE вставляет и выполняет содержимое указанного файла.

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

$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
    include($files[$i]);
}
     

include() отличается от require() тем, что оператор include выполняется каждый раз при его встрече, а require() заменяется на содержимое указанного файла безотносительно будет ли выполнено его содержимое или нет

Так как include() это специальный оператор, требуется заключать его в фигурные скобки при использовании внутри условного оператора.

/* Это неправильно и не будет работать, как хотелось бы. */

if ($condition)
    include($file);
else
    include($other);

/* А вот это - верно. */

if ($condition) {
    include($file);
} else {
    include($other);
}
     

Когда файл исполняется, парсер пребывает в "режиме HTML", то есть будет выводить содержимое файла, пока не встретит первый стартовый тег PHP (<?).

Также смотрите readfile(), virtual().

FUNCTION

Функция может быть объявлена следующим образом:

function foo ($arg_1, $arg_2, ..., $arg_n) {
    echo "Example function.\n";
    return $retval;
}
     

Внутри функции может быть любой верный код PHP3, даже объявление другой функции или класса .

Функции должны быть определены перед тем, как на них ссылаться.

Возвращение результатов

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

function my_sqrt ($num) {
    return $num * $num;
}
echo my_sqrt (4);   // outputs '16'.
      

Множественные результаты не могут быть возврашены в качестве результата, но вы можете реализовать это путЈм возврата списка :

function foo() {
   return array (0, 1, 2);
}
list ($zero, $one, $two) = foo();
      
Аргументы

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

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

function takes_array($input) {
    echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
      

Передача по ссылке

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

Если вы хотите, чтобы аргумент всегда передавался по ссылке, то следует поставить амперсенд (&) перед именем аргумента в объявлении функции :

function foo( &$bar ) {
    $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str;    // выведет :  'This is a string, and something extra.'
       

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

function foo ($bar) {
    $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str;    // выведет 'This is a string, '
foo (&$str);
echo $str;    // выведет 'This is a string, and something extra.'
       

Значения по умолчанию

Функции могут определять значения по умолчанию для скалярных аргументов в стиле C++ как показано :

function makecoffee ($type = "cappucino") {
    echo "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
       

Этот пример выведет следующее :

Making a cup of cappucino.
Making a cup of espresso.
      

Значение по умолчанию должно быть константой, а не переменной или, к примеру, членом класса.

Учтите, что когда вы объявляете аргументы по умолчанию, они должны быть справа от всех "неумолчальных" аргументов, в противном случае это не будет работать, как задумано. К примеру :

function makeyogurt ($type = "acidophilus", $flavour) {
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt ("raspberry");   // не будет работать, как ожидалось       

Этот пример выведет следующее :

Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
      

А теперь сравните с этим :

function makeyogurt ($flavour, $type = "acidophilus") {
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt ("raspberry");   // а вот это работает       

И выводит следующее :

Making a bowl of acidophilus raspberry.
     

OLD_FUNCTION

Оператор OLD_FUNCTION позволяет вам определяить функцию использую синтаксис PHP/FI2 (за исключением того, что вы должны заменить 'function' на 'old_function').

Это свойство только для совместимости и должно использоваться лишь конверторами PHP/FI2 -> PHP3.

Описанные таким образом функции не могут быть вызваны из служебного кода PHP. Это к тому же значит, что вы не можете использовать их в функциях типа usort(), array_walk() и register_shutdown_function(). Вы можете обойти это путЈм введения специальной функции в терминах PHP3, которая будет вызывать OLD_FUNCTION. CLASS

 

Класс - это набор переменных и функций, работающих с этими переменными. Класс определяется следующим образом :

<?php
class Cart {
    var $items;  // Количество вещей в корзине покупателя
  
    // Добавить $num наименований типа $artnr в корзину

    function add_item ($artnr, $num) {
        $this->items[$artnr] += $num;
    }
  
    // Убрать $num наименований  $artnr из корзины

    function remove_item ($artnr, $num) {
        if ($this->items[$artnr] > $num) {
            $this->items[$artnr] -= $num;
            return true;
        } else {
            return false;
        }   
    }
}
?>
     

Это определения класса Cart, который состоит связного списка наименований товаров в корзине и двух функций для добавления и удаления вещей из корзины.

Классы это типы, то есть, заготовки для реальных переменных. Вы должны создавать переменные желаемого типа, используя оператор new :

$cart = new Cart;
$cart->add_item("10", 1);
    

Таким образом, мы создали объект $cart класса Cart. Функция add_item() этого объекта вызывается для добавления 1 товара номер 10 к корзине.

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

class Named_Cart extends Cart {
    var $owner;
 
    function set_owner ($name) {
        $this->owner = $name;
    }
}
    

Это определяет класс Named_Cart, который имеет все переменные и функции класса Cart плюс дополнительную переменную $owner и дополнительную функцию set_owner(). Вы можете создать поименованую корзину обычным образом и установить или получить владельца корзины. Также вы можете использовать и нормальные функции корзины в поименованой корзине :

$ncart = new Named_Cart;    // Создать корзину
$ncart->set_owner ("kris"); // Указать владельца
print $ncart->owner;        // Распечатать имя владельца корзины
$ncart->add_item ("10", 1); // (унаследовано из обычной корзины)
    

Внутри функций класса переменная $this означает сам объект. Вы должны использовать $this->нечто для доступа к переменной или функции с именем 'нечто' внутри объекта.

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

class Auto_Cart extends Cart {
    function Auto_Cart () {
        $this->add_item ("10", 1);
    }
}
    

Мы определили класс Auto_Cart который является тем же классом Cart плюс имеет конструктор, который инициализирует корзину при создании, наполняя еЈ одним товаром типа "10". Конструкторы также могут иметь аргументы, и эти аргументы могут быть необязательными, что делает конструктор более полезным :

class Constructor_Cart {
    function Constructor_Cart ($item = "10", $num = 1) {
        $this->add_item ($item, $num);
    }
}

// Покупаем вся одно и то же :
$default_cart = new Constructor_Cart; // А тут что-то новое : $different_cart = new Constructor_Cart ("20", 17);

Глава 7. Выражения

 

Операторы

 

Арифметические операторы

Помните основную арифметику из школы? Эти операторы работают подобным образом

Таблица 7-1. Арифметические операторы
пример название результат
$a + $b Сложение Сумма $a и $b.
$a - $b Вычитание Вычитает $b из $a.
$a * $b Умножение Произведение $a и $b.
$a / $b Деление Деление $a на $b.
$a % $b Остаток деления Остаток от деления $a на $b.

Оператор деления("/") возвращает целую величину(результат целочисленного деления) если оба оператора - целые (или строка преобразованная в целое). Если каждый операнд является величиной с плавающей запятой, выполнится деление с плавающей запятой.

Операторы строк

B действительности есть только один оператор -- оператор конкатенации (".").

 

 

$a = "Hello ";
$b = $a . "World!"; // теперь $b = "Hello World!"
     

 

Операторы присваивания

Основным оператором присваивания является "=". Вы могли подумать что это "равно"("equal to"). Но это не так. В действительности это означает что левый операнд получает значение выражения в правых (собирательное присваивание).

Значением выражения присваивания является присваиваемая величина. Так что если "$a = 3", то это 3. Это позволит Вам делать некоторые мудреные вещи:

 

$a = ($b = 4) + 5; // теперь $a равно 9, а $b стало равным 4.

 

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

$a = 3; $a += 5; // теперь $a равно 8, как если бы мы сказали: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // теперь $b равно "Hello There!", как если бы мы написали $b = $b . "There!";

 

Бинарные Операторы (Побитовые Логические Операторы)

Бинарные Операторы позволяют вам изменять биты в целых числах.

Table 7-2.Бинарные Операторы
пример название результат
$a & $b И Будут установлены биты, которые были установлены и в $a и в $b.
*Пример вебклуба:
$a=5; /* 0101 */
$b=12; /* 1100 */
$c=$a & $b; /* $c будет равно 4 (0100) */
$a | $b Или Будут установлены биты, установленные в $a или $b .
*Пример вебклуба:
$a=5; /* 0101 */ $b=12; /* 1100 */ $c=$a|$b; /* $c будет (1101) */
~ $a Не Будут установлены не_присутствующие в $a биты (реверс)
*Пример вебклуба:
$a=5; /* 0101 */ ~ $a /* $a будет равно x (1010) */

Логические операторы

Таблица 7-3. Логические операторы
пример название результат
$a and $b И Истина, если истинны $a и $b.
$a or $b Или Истина, если истинны $a или $b.
$a xor $b Или Истина, если истинны $a или $b, но не оба.
! $a Не Истина, если не истинно $a.
$a && $b И Истина, если истинны и $a и $b.
$a || $b Или Истина, если истинны $a или $b.

Разница в двух различных вариантах операторов "and" и "or" - в различии приоритетов операций. (см. ниже)

Операторы Сравнения

Операторы Сравнения, как и подразумевается в их имени, позволяют Вам сравнивать две величины.

Таблица 7-4. Операторы Сравнения
пример название результат
$a == $b равно истина, если $a эквивалентно $b.
$a != $b Не равно Истина, если $a не эквивалентно $b.
$a < $b Меньше чем Истина если $a меньше чем $b.
$a > $b Больше чем Истина если $a больше $b.
$a <= $b Меньше или равно Истина, если $a меньше или равно $b.
$a >= $b Больше или равно Истина, если $a больше или равно $b.


Adabas D функции

ada_afetch

ada_afetch -- загрузка строки результата исполнения скрипта в массив

Description

See odbc_fetch_into()


ada_autocommit

ada_autocommit -- чтение и переключение флага режима автоисполнения соединения

Description

See odbc_autocommit().


ada_close

ada_close -- завершение соединения с сервером

Description

See odbc_close().


ada_commit

ada_commit -- совершение Adabas D транзакции

Description

See odbc_commit()


ada_connect

ada_connect -- соединение с источником данных Adabas D

Description

See odbc_connect().


ada_exec

ada_exec -- подготовка и исполнение SQL инструкции

Description

See odbc_exec() or odbc_do().


ada_fetchrow

ada_fetchrow -- выборка строки из результата исполнения скрипта

Description

See odbc_fetch_row().


ada_fieldname

ada_fieldname -- получение имени поля (столбца)

Description

See odbc_field_name().


ada_fieldnum

ada_fieldnum -- получение номера поля

Description

See odbc_field_num().


ada_fieldtype

ada_fieldtype -- получение типа данных поля

Description

See odbc_field_type().


ada_freeresult

ada_freeresult -- освобождение ресурсов, отводимых под содержимое результата

Description

See odbc_free_result().


ada_numfields

ada_numfields -- получение количества полей (столбцов) в содержимом результата

Description

See odbc_num_fields().


ada_numrows

ada_numrows -- количество строк (рядов) в содержимом результата

Description

See odbc_num_rows().


ada_result

ada_result -- получение данных из содержимого результата

Description

See odbc_result().


ada_resultall

ada_resultall -- распечатка результата в виде HTML таблицы

Description

See odbc_result_all().


ada_rollback

ada_rollback -- откат транзакции

Description

See odbc_rollback().

Специфичные функции Apache

apache_lookup_uri

apache_lookup_uri -- Выполняет подробный запрос для указанного URI и возвращает всю информацию о нем
Описание

class apache_lookup_uri(string filename);

 

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


status
the_request
status_line
method
content_type
handler
uri
filename
path_info
args
boundary
no_cache
no_local_copy
allowed
send_bodyct
bytes_sent
byterange
clength
unparsed_uri
mtime
request_time

 


apache_note

apache_note -- получает и устанавливает значения в таблице нотаций(примечаний) запроса Apache
Описание

string apache_note(string note_name, string [note_value]);

 

apache_note() это специальная функция Apache которая получает и устанавливает значения в таблице нотаций(примечаний) запроса. При вызове с одним аргументом она возвращает текущее значение note_name. При вызове с двумя аргументами она устанавливает значение нотации(примечания) note_name в note_value и возвращает предыдущее значение нотации(примечания) note_name.


getallheaders

getallheaders -- Выбор всех заголовков HTTP-запросов
Описание

array getallheaders(void);

 

Эта функция возвращает ассоциативный массив из всех HTTP заголовков в текущем запросе.

Пример 1. GetAllHeaders()

$headers = getallheaders();
while (list($header, $value) = each($headers)) {
    echo "$header: $value<br>\n";
}
Этот пример покажет все заголовки текущего запроса

Примечание: GetAllHeaders() на данный момент это поддерживается только если PHP запущен как модуль Apache.


virtual

virtual -- Выполняет подзапрос Apache
Описание

int virtual(string filename);

 

virtual() является спец.функцией Apache, которая эквивалентна <!--#include virtual...--> в mod_include. Она выполняет подзапрос Apache. Применима для включения CGI скриптов или .php файлов, или чего-нибудь еще, на чем вы должны выполнить парсинг(анализ текста) через Apache. Помните, что для CGI скриптов, скрипт должен выдавать правильнывые заголовки. Т.е. должне быть как минимуцм Content-type заголовок. Для PHP файлов, вы должны использовать include() или require().

Функции обработки массивов

array

array -- Создает массив
Описание

array array(...);

 

Возвращает массив параметров. Параметры могут быть даныпо индексу при использовании опрератора =>.

Помните что array() - это языковая конструкция, и не является регулярным выражением.

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

Пример 1. array()

$fruits = array(
    "fruits"  => array("a"=>"orange","b"=>"banana","c"=>"apple"),
    "numbers" => array(1, 2, 3, 4, 5, 6)
    "holes"   => array("first", 5 => "second", "third")
);

См. также: list().


array_walk

array_walk -- Применение функции на каждого члена массива.
Описание

int array_walk(array arr, string func);

 

Применяет функцию с именем func для каждого элемента массива arr. Элементы проходят как первый аргумент функции func; если func требует больше чем один аргумент, будет сгенерировано предупреждение всякий раз, когда array_walk() вызывает func. Эти предупреждения могут подавляться добавлением знака '@' при вызове array_walk(), или при использовании error_reporting().

Помните, что func будет работать с елементами массива arr, так что все изменения сделанные над элементами массива будут изменениями для самого массива.


Пример 1. array_walk()

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");

function test_alter( $item1 ) {
   $item1 = 'bogus';
}

function test_print( $item2 ) {
   echo "$item2<br>\n";
}

array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );
      

См. также: each() и list().


arsort

arsort -- Сортировка массива в обратном порядке и поддерка индексных связей.
Описание

void arsort(array array);

 

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

Пример 1. arsort()

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
Пример нам покажет: fruits[a] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple Фрукты показаны в обратном алфавитном порядке, и поддерживаются связанные с ними индексы.

См. также: asort(), rsort(), ksort(), и sort().


asort

asort -- Сортирует массив и поддерживает связанные индексы
Описание

void asort(array array);

 

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

Пример 1. asort()

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
Этот пример покажет: fruits[c] = apple fruits[b] = banana fruits[d] = lemon fruits[a] = orange Фрукты показаны в алфавитном порядке, и поддерживаются индексы связанные с каждым элементом массива.

См. также: arsort(), rsort(), ksort(), и sort().


count

count -- подсчитывает элементы в переменную
Описание

int count(mixed var);

 

Возвращает число элементов в var, который является естественно массивом (что либо другое будет иметь один элемент).

возвращает 0 если переменная не укстановлена.

возвражает 1 если переменная не является массивом.

См. также: sizeof(), isset(), и is_array().


current

current -- возвращает текущий элемент массива
Описание

mixed current(array array);

 

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

Функция current()просто возвращает элемент массива, на который в данный момент указывает внутренний указатель. Он никак не перемещает указатель. Если внутренний указатель указывает на конец списка элементов, current() возвращает false(ложно).

Внимание: если массив содержит пустые элементы (0 или "", пустую строку), то функция возвратит "false" для каждого из них. Это показывает, что текущий элемент является нулевым значением или вы дошли до конца массива. Для того, чтобы правильно просматривать массив, используйте функцию each().

См. также: end(), next(), prev() и reset().


each

each -- возвращает следующую пару ключ/значение из массива
Описание

array each(array array);

 

Возвращает следующую пару ключ/значение из массива array и предоставляет курсор массива. Эта пара возвращается в четырех-элементный массив, с ключами 0, 1, key, и value. Элементы 0 и key - каждое содержит ключевое имя элемента массива, а 1 и value содержат данные.


Пример 1. each()

$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );
      

$bar теперь содержит следующие пары ключ/значение:

 

  • 0 => 0

  • 1 => 'bob'

  • key => 0

  • value => 'bob'

$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );
       

$bar теперь содержит следующие пары ключ/значение:

 

  • 0 => 'Robert'

  • 1 => 'Bob'

  • key => 'Robert'

  • value => 'Bob'

each(), как правило, используется вместе с list() чтобы просмотреть массив; например, $HTTP_POST_VARS:

Пример 2. Просмотр $HTTP_POST_VARS с помощью each()

echo "Values submitted via POST method:<br>";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
   echo "$key => $val<br>";
}
      

См. также key(), list(), current(), reset(), next(), и prev().


end

end -- устанавливаете внутренний указатель массива на последнем элементе
Описание

end(array array);

 

end() перемещает array's внутренний указатель на последний элемент массива.

См. также: current(), each(), end() next() и reset()


key

key -- выбирает ключ из ассоциативного массива
Описание

mixed key(array array);

 

key() Возвращает индекс элемента в текущей позиции массива

См. также: current(), next()


ksort

ksort -- Сортирует массив по ключам.
Описание

int ksort(array array);

 

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

Пример 1. ksort()

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
Этот пример должен показать: fruits[a] = orange fruits[b] = banana fruits[c] = apple fruits[d] = lemon

См. также asort(), arsort(), sort(), и rsort().


list

list -- Связывает переменные, как если бы они были массивом.
Описание

void list(...);

 

Подобно array(), функция list в действительностью является языковой конструкцией а не функцией list() используется для связи списка переменных одной операцией.

Пример 1. list()

<table>
 <tr>
  <th>Employee name</th>
  <th>Salary</th>
 </tr>
<?php

$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
    print(" <tr>\n".
          "  <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
          "  <td>$salary</td>\n".
          " </tr>\n");
}

?></table>

См. также: each(), array().


next

next -- передвигает внутренний указатель массива
Описание

mixed next(array array);

 

Возвращает следующий элемент массива, от текущей позиции внутреннего указателя массива, или "ложь"(false) если нет больше элементов. Внимание: если массив содержит пустые элементы, тогда эта функция возвратит "ложь"(false) и для этих элементов. Чтобы правильно просмотреть массив, который может содержать пустые элементы, смотрите функцию each().

next() ведет себя подобно current(), с одной лишь разницей. Он передвигает внутренний указатель массива на один элемент вперед прежде, чем возвратить элемент. Это означает что он возвращает значение следующего элемента и передвигает на него внутренний указатель массива. Если при обращении к следующему элементу обнаружен конец массива - next() возвращает "ложь"(false).

См. также: current(), end() prev() и reset()


pos

pos -- Возвращает текущий элемент в массиве
Описание

mixed pos(array array);

 

Это - псевдоним для current().

См. также: end(), next(), prev() и reset().


prev

prev -- перемещает внутренний указатель массива
Описание

mixed prev(array array);

 

Возвращает предыдущий элемент массива, или "ложь"(false), если перед текущим нет больше элементов. Внимание: если массив содержит пустые элементы, то функция возвратит "ложь" и на этих элементах. Чтобы правильно просмотреть массив, который может содержать пустые элементы, смотрите функцию each().

prev() ведет себя подобно next(), за исключением того что он переводит внутренний указатель массива на одну позицию назад, а не вперед.

См. также: current(), end() next() и reset()


reset

reset -- устанавливает внутренний указатель массива в первом элементе
Описание

mixed reset(array array);

 

reset() возвращает внутренний указатель массива в первый элемент.

reset() возвращает первыйэлемент массива.

См. также: current(), each(), next() prev() и reset()


rsort

rsort -- Сортирует массив в обратном порядке
Описание

void rsort(array array);

 

Сортирует массив в обратном порядке (по убыванию).

Пример 1. rsort()

    $fruits = array("lemon","orange","banana","apple");
    rsort($fruits);
    for(reset($fruits); ($key,$value) = each($fruits); ) {
        echo "fruits[$key] = ".$value."\n";
    }
	
Этот пример покажет: fruits[0] = orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple Фрукты отсортированы в обратном алфавитном порядке.

См. также arsort(), asort(), ksort(), sort() и usort().


sizeof

sizeof -- получает размер массива
Описание

int sizeof(array array);

 

Возвращает число элементов списка.

См. также: count()


sort

sort -- сортирует массив
Описание

void sort(array array);

 

Эта функция сортирует масси - все элементы по окончании ее работы будут расположены по возрастанию.

Пример 1. sort()

$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
    echo "fruits[$key] = ".$fruits[$key]."\n";
}
Этот пример покажет: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange Фрукты будут отсортированы повозрастанию в алфавитном порядке.

См. также arsort(), asort(), ksort(), rsort(), и usort().


uasort

uasort -- Сортирует массив с использованием функций сравнения, определенных пользователем и поддержкой индексации
Описание

void uasort(array array, function cmp_function);

 

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


uksort

uksort -- Сортирует массив по ключам, с использованием функций сравнения, определенных пользователем
Описание

void uksort(array array, function cmp_function);

 

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

Пример 1. uksort()

function mycompare($a, $b) {   
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
    echo "$key: $value\n";
}
Пример покажет: 20: twenty 10: ten 4: four 3: three

См. также arsort(), asort(), uasort(), ksort(), rsort() и sort().


usort

usort -- сортирует массив по значениям используя используя функции сравнения, определенные пользователем
Описание

void usort(array array, function cmp_function);

 

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

Пример 1. usort()

function cmp($a,$b) {   
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
    echo "$key: $value\n";
}
Пример покажет: 0: 6 1: 5 2: 3 3: 2 4: 1 Очевидно, что в этом тривиальном случае функция rsort() было бы более соответствующей.

См. также arsort(), asort(), ksort(), rsort() и sort().

Данные BC функции задействованы только при условии что PHP был скомпилирован в режиме --enable-bcmath, т.е. при включенных в конфигурацию bcmath функциях.


Математические BC (произвольной точности) функции

bcadd

bcadd -- Сложение двух чисел произвольной точности.

Описание

string bcadd(string левый операнд, string правый операнд, int [масштаб]);

Прибавляет левый операнд к правому операнду  и возвращает сумму типа string (строковая переменная). Факультативный параметрмасштаб используется чтобы установить количество разрядов после десятичной отметки в результате.

Смотрите также bcsub().


bccomp

bccomp -- Сравнение двух чисел произвольной точности.

Описание

int bccomp(string левый операнд, string правый операнд, int [масштаб]);

Сравнивает левый операнд с   правым операндом и возвращает результат типа integer (целое). Факультативный параметр  масштаб используется для установки количества цифр после десятичной отметки, используемых при сравнении. При равенстве двух операндов возвращается значение 0. Если левый операнд больше правого операнда возврашается   +1,  и если  левый операнд  меньше правого операнда возвращается    -1.


bcdiv

bcdiv -- Операция деления для двух чисел произвольной точности.

Описание

string bcdiv(string левый операнд, string правый операнд, int [масштаб]);

Делит левый операнд на   правый операнд и возвращает результат.   Факультативный параметр  масштаб устанавливает количество цифр после десятичной отметки в результате.

Смотрите также bcmul().


bcmod

bcmod -- Получение модуля числа произвольной точности.

Описание

string bcmod(string левый операнд, string модуль);

Получение модуля  левого операнда  используя операнд модуль.

Смотрите также bcdiv().


bcmul

bcmul -- Операция умножения для двух чисел произвольной точности.

Описание

string bcmul(string левый операнд, string правый операнд, int [масштаб]);

Умножает левый операнд на   правый операнд и возвращает результат. Факультативный параметр  масштаб устанавливает количество цифр после десятичной отметки в результате.

Смотрите также bcdiv().


bcpow

bcpow -- Возведение одного числа произвольной точности в степень другого.

Описание

string bcpow(string x, string y, int [масштаб]);

Возведение x   в степень y. Параметр  масштаб может использоваться для установки количества цифр после десятичной отметки в результате.

Смотрите также bcsqrt().


bcscale

bcscale -- Устанавливает масштаб по умолчанию для всех математических BC-функций

Описание

string bcscale(int масштаб);

Эта функция устанавливает заданный по умолчанию параметр масштаба для всех последующих математических BC-функций, которые явно не определяют параметр масштаба.


bcsqrt

bcsqrt -- Получение квадратного корня числа произвольной точности.

Описание

string bcsqrt(string операнд, int масштаб);

Возвращает кваддратный корень операнда. Факультативный параметр  масштаб устанавливает количество цифр после десятичной отметки в результате.

Смотрите также bcpow().


bcsub

bcsub -- Вычитает одно число произвольной точности из другого.

Описание

string bcsub(string левый операнд, string правый операнд, int [масштаб]);

Вычитает правый операнд из  левого операнда  и возвращает результат типа string. Факультативный параметр  масштаб устанавливает количество цифр после десятичной отметки в результате.

Смотрите также bcadd().

 

Календарные функции

Календарные функции - доступны только если Вы скомпилировали календарное расширение в dl/calendar. Смотрите dl/README для получения инструкций.

Календарное расширение в PHP представляет серию функций, которая упрощает преобразование между разными календарными форматами. Посредником прообразования является дневной Юлианский счет. Дневной Юлианский счет это самый старый счет дней (около 4000 д.э.). Чтобы менять числа между разными календарными системами, Вы должны сначала преобразовать вашу дату в дневной Юлианский счет, а только затем в календарную систему по вашему выбору. Дневной Юлианский счет отличается от Юлианского Календаря! Более подробно о календарной систем смотрите на сайте: http://genealogy.org/~scottlee/cal-overview.html. Отрывки с этой страницы включаются в данной инструкцие.


JDToGregorian

JDToGregorian -- Преобразование дневного Юлианcкого счета в Грегорианскую дату
Описание
string jdtogregorian(int julianday);

Преобразование дневного Юлианcкого счета в Грегорианскую в формате "месяц/день/год"


GregorianToJD

GregorianToJD -- Преобразовывает Грегорианскую дату на Дневный Юлианский cчет
Описание
int gregoriantojd(int month, int day, int year);

Правильный дипазон для Грегорианского календаря 4714 д.э. до 9999 н.э.

Хотя это программное обеспечение может оперировать даты в обратном порядке до 4714 д.э., такое использование может быть бесполезно и не значительно. Грегорианский календарь не был учрежден до Октября 15, 1582 (или Октябрь 5, 1582 в Юлианском календаре). Некоторые страны еще очень долго не принимали его. Например, Великобритания преобразовалась в 1752, СССР в 1918 и Греции в 1923. Наиболее Европейские страны использовали Юлианский Календарь До Грегорианского.

 

Пример 1. Календарные функции

<?php
$jd = GregorianToJD(10,11,1970);
echo("$jd\n");
$gregorian = JDToGregorian($jd);
echo("$gregorian\n");
?>

JDToJulian

JDToJulian -- преобразовывает дату Юлианского календаря на дневный Юлианский счет
Описание
string jdtojulian(int julianday);

Преобразование дневного Юлианского счета в строку, содержащую дату Юлианского Календаря в формате "месяц/день/год".


JulianToJD

JulianToJD -- преобразовывает дату Юлианского Календаря на дневной Юлианский счет
Описание
int juliantojd(int month, int day, int year);

Правильный дипазон для Юлианского календаря 4713 д.э. до 9999 н.э.

Хотя это программное обеспечение может оперировать даты в обратном порядке до 4713 д.э. такое использование может быть бесполезно и не значительно. Календарь был создан в 46 д.э., но подробные не стабилизировался до по крайней мере 8 н.э., и возможно познее в 4-ом столетии. Также, начало года различно от одной культуры к другой - не все соглашаются, что Январь это первый месяц.


JDToJewish

JDToJewish -- преобразовывает дневной Юлианский счет в Еврейский календарь
Описание
string jdtojewish(int julianday);

Преобразование дневного Юлианского счета в Еврейский календарь


JewishToJD

JewishToJD -- преобразовывает дату в Еврейском Календаре на дневной Юлианский счет
Описание
int jewishtojd(int month, int day, int year);

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


JDToFrench

JDToFrench -- преобразовывает дневной Юлианский счет в Французский Республиканский календарь
Описание
string jdtofrench(int month, int day, int year);

преобразовывает дневной Юлианский счет в Французский Республиканский календарь


FrenchToJD

FrenchToJD -- преобразовывает дату и Французского Республиканского календаря в дневной Юлианский счет
Описание
int frenchtojd(int month, int day, int year);

преобразовывает дату и Французского Республиканского календаря в дневной Юлианский счет

Эта программа преобразовывают даты в начиная с 1 до 14 (Грегорианские даты 22 Сентября 1792 до 22 1806 Сентября). Это покрывает тот период когда календарь использовался.


JDMonthName

JDMonthName -- возвращает название месяца
Описание
string jdmonthname(int julianday, int mode);

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

Стол 1. Календарные способы
Способ Значение
0 Грегорианский - apreviated
1 Грегорианский
2 Юлианский - apreviated
3 Юлианский
4 Еврейский
5 Французский Республиканский


JDDayOfWeek

JDDayOfWeek -- Возвращает день недели
Описание
mixed jddayofweek(int julianday, int mode);

Возвращает день недели. Может возвратить строку(string) или int в зависимости от способа(mode).

Стол 1. Календарные недельные пути
Способ Значение
0 возвращает дневной номер как int (0=воскресенье, 1=понедельник, и т.п.)
1 возврат string содержание дня недели (английское-грегорианское)
2 возвращает string содержа abreviated дени недели (английский-грегорианский)

Функции даты/времени

checkdate

checkdate -- проверяет правильность даты/времени
Описание

int checkdate (int month, int day, int year);

 

Возвращает true если данная дата правильна, иначе false. Проверяет правильность даты, заданной аргументами. Дата считается правильной, если:

 


date

date -- формат локального времени/даты
Описание

string date (string format, int timestamp);

 

Возвращает строку, отформатированную согласно данной строке и используя данную временную метку или текущее локальное время, если не задана временная метка.

В фоматной строке должны использоваться следующие символы:

 

Нераспознанные символы в форматной строке будут печататься как есть.

Пример 1. Пример date()

print(date( "l dS of F Y h:i:s A" ));
print("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));

Функции date() и mktime() возможно использовать вместе для того, чтобы найти даты в будущем или прошлом.

Пример 2.Пример функций date() и mktime()

$tomorrow  = mktime(0,0,0,date("m")  ,date("d")+1,date("Y"));
$lastmonth = mktime(0,0,0,date("m")-1,date("d"),  date("Y"));
$nextyear  = mktime(0,0,0,date("m"),  date("d",   date("Y")+1);

Для того, чтобы отформатировать даты на других языках, Вы должны использовать функции setlocale() и strftime()

См.также gmdate() and mktime() .


strftime

strftime -- форматирует локальное время согласно установкам locale
Описание

string strftime (string format, int timestamp);

 

Возвращает строку, отформатированную согласно данной форматной строке и используя данную временную метку или текущее локальное время, если метка не задана. Названия месяцев и недель и другие, зависящие от языка строки, зависят от текущего locale, устанавливающегося с помощью setlocale() .

В форматной строке следует использовать следующие спецификаторы преобразований:

 


Пример 1. Пример функции strftime()

setlocale ("LC_TIME", "C");
print(strftime("%A in Finnish is "));
setlocale ("LC_TIME", "fi");
print(strftime("%A, in French "));
setlocale ("LC_TIME", "fr");
print(strftime("%A and in German "));
setlocale ("LC_TIME", "de");
print(strftime("%A.\n"));
Пример будет работать, если у вас установлены соответствующие locale.

См.также setlocale() и mktime() .


getdate

getdate -- получает информацию о дате/времени
Описание

array getdate (int timestamp);

 

Возвращает ассоциативный массив, содержащий информацию о дате со следующими элементами:

 


gmdate

gmdate -- форматирует GMT/CUT время/дату
Описание

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".


Пример 1. пример gmdate()

echo date( "M 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() .


mktime

mktime -- получает временную метку UNIX для даты
Описание

int mktime (int hour, int minute, int second, int month, int day, int year);

 

Предупреждение: Обратите внимание на необычный порядок аргументов, который отличается от порядка аргументов в вызове функции mktime() из UNIX, и который нехорошо ведет себя при неправильно заданных параметрах (см.ниже). Это очень часто встречающаяся ошибка в скриптах.

Возвращает временную метку Unix согласно данным аргументам. Эта временная метка является целым числом, равным количеству секунд между эпохой Unix (1 Января 1970) и указанным временем.

Аргументы могут быть опущены с права налево; каждый опущенный таким образом аргумент будет установлен в текущую величину согласно локальной дате и времени.

MkTime is useful for doing date arithmetic and validation, as it MkTime полезена при арифметических дейтсвиях с датой и ее проверкой, она будет автоматически вычислять корректную величину для вешедших за границы параметров. Например, каждая из следующих строк возвращает строку "Jan-01-1998".


Пример 1. Пример mktime()

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) );

См.также date() и time() .


gmmktime

gmmktime -- получает временную метку UNIX для даты в GMT
Описание

int gmmktime (int hour, int minute, int second, int month, int day, int year);

 

Идентична mktime() за исключением передаваемых параметров, представляющих дату в GMT.


time

time -- возвращает текущую временную метку UNIX
Описание

int time (void);

 

Возвращает текущее время, измеренное в числе секунд с эпохи Unix (1 Января 1970 00:00:00 GMT).

См.также date() .


microtime

microtime -- возвращает текущую временную метку UNIX в микросекундах
Описание

string microtime (void);

 

Возвращает строку "msec sec" где sec текущее время, измеренное в числе секунд с эпохи Unix (0:00:00 1 Января, 1970 GMT), а msec - это часть в микросекундах. Эти функции доступны только в операционных системах, поддерживающих системный вызов gettimeofday().

См.также time() .

Эти функции позволяют получить доступ к записям в  dBase-формате (dbf) базы данных.

Не поддерживаются индексы и мемо(записи) поля. Также не поддерживается блокировка. Два webсервер процесса, одновременно изменяющие файлы dBase вполне возможно повредят вашу базу данных.

В отличие от баз данных SQL, в dBase нельзя изменять определение полей после их создания. Если только файл создан, то поля базы данных фиксировано определены. Не имеется никаких индексов, которые ускоряют поиск или иначе организовывает ваши данные. dBase файлы - это простые последовательные файлы с записями фиксированного размера. Записи добавляются в конец файла и удаленные записи будут присутствовать в вашей базе до тех пор, пока вы не вызовете dbase_pack() функцию.

Мы рекомендуем вы не использовать dBase файлы для профессионального использования фаз данных. Выберете взамен какой-нибудь реальный SQL сервер; MySQL или Postgres лучший выбор для работы вместе с PHP. Поддержка dBase введена для импорта и экспорта ваших данных из и в вашу web базу данных, так как этот формат обычно понимают многие программы, например электронные таблицы, в Windows. Поддержка dBase для любого экспорта или импорта данных хорошо выполняет эти условия.


Функции dBase

dbase_create

dbase_create -- создать dBase базу данных
Описание
int dbase_create(string filename, array fields);
Параметр fields - это массив из массивов, каждый массив определяет формат одного поля в базе данных. Каждое поле состоит из имени, символа , указывающего тип поля, длины, и точность.

Доступные типы полей:

 
L Логическое. Не требует длину или точность.
M Мемо. (Помните, что они не поддерживаются в PHP.) Не требует длину или точность.
D дата (сохраненная как ГГГГММДД). Не требует длину или точность.
N Числовое. Это поле имеет и длину и точность(количество цифр после десятичной точки).
C Строка. Имеет длину и не требует точность.
 
Если создание базы данных успешно, то возвращает dbase_identifier(идентификатор базы данных), в противном случае возвращает false(ложь).
Пример 1. Создание dBase базы данных
// "database" имя
$dbname = "/tmp/test.dbf";

// определяем поля
$def =
    array(
        array("date",     "D"),
        array("name",     "C",  50),
        array("age",      "N",   3, 0),
        array("email",    "C", 128),
        array("ismember", "L")
    );

// создаем
if (!dbase_create($dbname, $def))
    print "<strong>Error!</strong>";

dbase_open

dbase_open -- открыть dBase базу данных
Описание
int dbase_open(string filename, int flags);
Параметр flags используется для системного вызова open(). (Обычно 0 только для чтения, 1 только для записи, и 2 для записи и чтения.)

Возвращает dbase_identifier(идентификатор базы данных) для открытой базы данных, или false(ложь) если база данных не была открыта.


dbase_close

dbase_close -- закрыть dBase базу данных
Описание
bool dbase_close(int dbase_identifier);
Закрыть базу данных, связанную с dbase_identifier.

dbase_pack

dbase_pack -- упаковывает dBase базу данных
Описание
bool dbase_pack(int dbase_identifier);
Упаковывает определенную базу данных (удаляет все записи, помеченные для удаления с помощью dbase_delete_record().

dbase_add_record

dbase_add_record -- добавляет запись в dBase базу данных
Описание
bool dbase_add_record(int dbase_identifier, array record);
Добавляет данные из record в базу данных. Если количество полей в заданном record не идентично количеству полей в базе данных, то операция будет прервана и будет возвращено false(ложь).

dbase_delete_record

dbase_delete_record -- удалить запись из dBase базы данных
Описание
bool dbase_delete_record(int dbase_identifier, int record);
Помечает запись record to на удаление из базы данных. Чтобы физически удалить запись из базы данных, вы должны вызвать dbase_pack().

dbase_get_record

dbase_get_record -- получить запись из dBase базы данных
Описание
array dbase_get_record(int dbase_identifier, int record);
Возвращает данные из записи record в массив. Массив индексирован начиная с 1, и включает в себя поле 'deleted', которое установлено в 1 если запись помечена на удаление (смотри  dbase_delete_record().)

Все поля преобразовываются в соответствующий PHP тип. (Даты остаются строками.)


dbase_numfields

dbase_numfields -- Выясняет, какое количество полей находится в dBase базе данных
Описание
int dbase_numfields(int dbase_identifier);
Возвращает количество полей в определенной базе данных. Номера полей находятся в промежутке с 0 и до dbase_numfields($db)-1, в то время как номера записей начинаются с 1 и до dbase_numrecords($db).
Пример 1. Использование dbase_numfields()
$rec = dbase_get_record($db, $recno);
$nf  = dbase_numfields($db);
for ($i=0; $i < $nf; $i++) {
    print $rec[$i]."<br>\n";
}

dbase_numrecords

dbase_numrecords -- Выясняет, какое количество записей находится в dBase базе данных
Описание
int dbase_numrecords(int dbase_identifier);
Возвращает количество записей в определенной базе данных. Номера записей начинаются с 1 и до dbase_numrecords($db) , в то время как номера полей находятся в промежутке с 0 и до dbase_numfields($db)-1.

Функции dbm

Эти функции позволяют работать с записями dbm-подобных баз данных. Данный тип баз данных (поддерживается как библиотеками Berkley db, gdbm и некоторыми другими, так и встроенной в PHP3 библиотекой) оперирует с парами ключ/значение (в противоположность полноценным записям, поддерживаемым реляционными базами данных).


Пример 1. Пример dbm

$dbm = dbmopen("lastseen", "w");
if (dbmexists($dbm, $userid)) {
  $last_seen = dbmfetch($dbm, $userid);
} else {
  dbminsert($dbm, $userid, time());
}
do_stuff();
dbmreplace($dbm, $userid, time());
dbmclose($dbm);

dbmopen

dbmopen -- открывает базу данных dbm

Описание
int dbmopen(string filename, int flags);

Первый аргумент - это полный путь к открываемому dbm-файлу, а второй - режим открытия файла, который может быть следующим: "r","n", "w" соответственно только для чтения, создания (включает чтение-запись и может обрезать уже существующую базу данных с тем же именем) и чтения-записи.

Возвращает идентификатор, который в дальнейшем передается другим dbm-функциям, или false при неуспехе.

Если используется поддержка ndbm, создаются файлы filename.dir и filename.pag. gdbm использует только один файл, и Berkley db создает файл filename.db. Заметьте, что PHP3 самостоятельно делает свою собственную блокировку в дополнение к блокировке самой dbm-библиотки. PHP не удаляет .lck-файлы, созданные этой библиотекой, а рассматривает эти файлы просто как фиксированные i-узлы на которые надо делать блокировку. Более полную информацию о dbm-файлах можно получить на ftp://prep.ai.mit.edu/pub/gnu и man-страницах.


dbmclose

dbmclose -- закрывает базу данных dbm

Описание
bool dbmclose(int dbm_identifier);

Разблокирует и закрывает указанную базу данных.


dbmexists

dbmexists -- сообщает, существует ли в базе данных значение для ключа

Описание
bool dbmexists(int dbm_identifier, string key);

Возвращает true если существует значение, ассоциируемое с ключом key.


dbmfetch

dbmfetch -- извлекает из базы данных значение ключа

Описание
string dbmfetch(int dbm_identifier, string key);

Возвращает значение ключа key.


dbminsert

dbminsert -- вставляет в базу данных значение ключа

Описание
int dbminsert(int dbm_identifier, string key, string value);

Добавляет в базу данных значение с указанным ключом key.

Возвращает -1 если база данных была открыта в режими только чтение, 0 если добавление произошло успешно и 1 если указанный ключ уже существует. (Для замены значения следует использовать dbmreplace().)


dbmreplace

dbmreplace -- заменяет значение ключа

Описание
bool dbmreplace(int dbm_identifier, string key, string value);

Замещает значение указанного ключа. Если ключ не существует, функция добавляет его в базу данных.


dbmdelete

dbmdelete -- удаляет занчение ключа из базы данных

Описание
bool dbmdelete(int dbm_identifier, string key);

Удаляет значение ключа из базы данных. Возвращает false если ключ в базе данных не существует.


dbmfirstkey

dbmfirstkey -- возвращает первый ключ из базы данных

Описание
string dbmfirstkey(int dbm_identifier);

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


dbmnextkey

dbmnextkey -- возвращает следующий ключ базы данных

Описание
string dbmnextkey(int dbm_identifier, string key);

Возвращает ключ, следующий после ключа key. С помощью вызова dbmfirstkey(), а затем dbmnextkey() возможно пройти по всем парам ключ/значение в базе данных. Например:

Пример 1. Прохождение по всем парам ключ/значение.

$key = dbmfirstkey($dbm_id);
while ($key) {
    echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
    $key = dbmnextkey($dbm_id, $key);
}

dblist

dblist -- описывает используемые dbm-совместимые библиотеки

Описание
string dblist(void);

Функции для работы с каталогами

chdir

chdir -- смена каталога
Описание
int chdir(string directory);
Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена произошла.

dir

dir -- класс каталога (псевдо-объектно ориентированный механизм)
Описание
new dir(string directory);
Псевдо-объектно ориентированный механизм для чтения каталога. Открывает каталог из directory. Два реквезита доступно, если только  каталог был открыт. Реквезит handle может быть использован вместе с другими функциями работы с каталогом типа readdir(), rewinddir() и closedir(). Реквезит path установлен путь каталога, который был открыт. Три метода доступны: чтение, возврат к началу и закрытие.
Пример 1. Dir() Пример
$d = dir("/etc");
echo "Handle: ".$d->handle."<br>\n";
echo "Path: ".$d->path."<br>\n";
while($entry=$d->read()) {
    echo $entry."<br>\n";
}
$d->close();
        

closedir

closedir -- закрыть дескриптор(handle) каталога
Описание
void closedir(int dir_handle);
Закрывает поток каталога, обозначенный как dir_handle. Поток предварительно должен быть открыт финкцией opendir().

opendir

opendir -- открыть дескриптор(handle) каталога
Описание
int opendir(string path);
Возвращает дескриптор(handle) каталога, который в последующем используется в closedir(), readdir(), и rewinddir() обращениях.

readdir

readdir -- чтение данных из каталога по дескриптору(handle)
Описание
string readdir(int dir_handle);
Возвращает имя следующего файла из каталога. Имена не возвращаются в любом специфическом порядке.
Пример 1. Вывод всех файлов в текущем каталоге
<?php
    $handle=opendir('.');
    echo "Directory handle: $handle\n";
    echo "Files:\n";
    while ($file = readdir($handle)) {
        echo "$file\n";
    }
    closedir($handle); 
?>
    

rewinddir

rewinddir -- возврат к началу данных каталога по дескриптору(handle)
Описание
void rewinddir(int dir_handle);
Сбрасывает поток каталога, обозначенный как dir_handle в начало данных.

Функции динамической загрузки

dl

dl -- загрузка PHP расширений во время выполнения
Описание
int dl(string library);
Загружает PHP расширение определенное в library. Смотри также extension_dir директиву конфигурации.

escapeshellcmd

escapeshellcmd -- убирает shell метасимволы
Описание
string escapeshellcmd(string command);
EscapeShellCmd() убирает любые символы в строке, которые могут быть использованы в командном интерпретаторе как произвольные команды. Эту функцию нужно использовать, что бы убедится, что все ваши данные введены правильно, и эту функцию лучше всего вставлять в функции exec() или system(). Стандартное использование этой функции выглядит так:
system(EscapeShellCmd($cmd))

Функции запуска программ

exec

exec -- Запуск внешней программы
Описание
string exec(string command, string [ array ], int [ return_var ]);
exec() запускает программу из строки command, весь стандартный вывод отключен. Возвращает последнюю строку результата выполнения программы. Если вы хотите запустить команду и использовать все данные непосредственно без всякого вмешательства других программ, то используйте функцию PassThru().

Если параметр array установлен, то указанный массив будет заполнен выводом из программы. Помните, если массив уже содержит данные, то exec() добавляет свои данные. Если вы не хотите, что бы функция добавляла данные, вызывайте unset() для массива перед использованием exec().

Если параметр return_var установлен наряду с параметром array, то в него записывается результат выполнения команды.

Обратите внимание, что если ваша функция будет использовать данные из ввода пользователей, то надо использовать EscapeShellCmd() для того, что бы пользователи не смогли запустить произвольные программы.

См. также system(), PassThru(), popen() и EscapeShellCmd().


system

system -- Запуск внешней программы с выводом результата
Описание
string system(string command, int [ return_var ]);
System() такая же, как и C версия этой функции для запуска command и  вывода результата. Если используется второй параметр, то в него записывается результат выполнения команды.

Обратите внимание, что если ваша функция будет использовать данные из ввода пользователей, то надо использовать EscapeShellCmd() для того, что бы пользователи не смогли запустить произвольные программы.

Вызов System() также пробует автоматически вставить в буфер вывода web сервера после каждой строки вывода, если PHP запущен как модель сервера.

Если вы хотите запустить команду и использовать все данные непосредственно без всякого вмешательства других программ, то используйте функцию PassThru(). См. также exec() и popen() функции.


passthru

passthru -- Запускает внешнюю программу и выводит данные напрямую
Описание
string passthru(string command, int [ return_var ]);
Функция passthru() похожа на функцию Exec() для запуска command. Если параметр return_var установлен, то результат Unix команды помещается здесь. Эта функция должна использоваться вместо Exec() или System() тогда, когда вывод из Unix команды является двоичными данными, которые должны быть переданы непосредственно обратно в окно просмотра(browser). Это можно использовать, например, для запуска утилиты pbmplus для вывода непосредственно потока изображения. Установка типа image/gif и вызов программы pbmplus, чтобы вывести gif-рисунок, вы можете создавать PHP скрипты, которые выводят изображения непосредственно.

См. также exec() и fpassthru().

Функции работы с filePro

Эти функии предоставляют доступ "только для чтения" к данным в базе данных filePro.

filePro зарегистрированная торговая марка Fiserv, Inc. Более подробную информацию о filePro вы можете наяти на http://www.fileproplus.com/.


filepro

filepro -- читает и верифицирует map-файл
Описание
bool filepro(string directory);

Читает и верифицирует map-файл, сохраняя файловый счетчик и инфо.

Никакой блокировки не предусмотрено, поэтому вам следует избегать модификации вашей filePro базы данных, пока она открыта в PHP.


filepro_fieldname

filepro_fieldname -- получить имя поля
Описание
string filepro_fieldname(int field_number);

Возвращает имя поля по соответствующему номеру field_number.


filepro_fieldtype

filepro_fieldtype -- получить тип поля
Описание
string filepro_fieldtype(int field_number);

Возвращет тип поля, соответствующего номеру field_number.


filepro_fieldwidth

filepro_fieldwidth -- получить ширину поля
Описание
int filepro_fieldwidth(int field_number);

Возвращает ширину поля по номеру поля field_number.


filepro_retrieve

filepro_retrieve -- прочитать данные из filePro базы данных
Описание
string filepro_retrieve(int row_number, int field_number);

Возвращает данные из указанной ячейки базы данных.


filepro_fieldcount

filepro_fieldcount -- сколько полей в базе данных filePro?
Описание
int filepro_fieldcount(void);

Возвращает количество полей (колонок) в открытой базе filePro.

Смотри также filepro().


filepro_rowcount

filepro_rowcount -- сколько строк в базе filePro?
Описание
int filepro_rowcount(void);

Возвращает количество строк в открытой базе filePro.

Смотри также filepro().


Функции файловой системы

basename

basename -- возвращает из полного пути имя файла
Описание
string basename(string path);

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

В Windows оба слеша - передний (/) и обратный (\) - используются как разделители при задании пути. В других окружениях это только передний слеш (/).


Пример 1. basename() example

$path = "/home/httpd/html/index.php3";
$file = basename($path); // $file устанавливается в "index.php3"

Смотри также: dirname()


chgrp

chgrp -- изменить файловую группу
Описание
int chgrp(string filename, mixed group);

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

Возвращает true при успешном завершении; в противном случае - false.

В Windows ничего не происходит и возвращается true.

смотри также chown() и chmod().


chmod

chmod -- изменить режим файла
Описание
int chmod(string filename, int mode);

Пытается изменить режим файла, указанного в filename на mode.

Заметим, что mode не присваивает автоматически восьмиричное значение, вам необходим префикс mode с нулем (0):

chmod( "/somedir/somefile", 755 );   // десятичный; возможно неправильныйt       
chmod( "/somedir/somefile", 0755 );  // восьмиричный; корректное значение режима

Возвращает true при успешном завершении; в противном случае - false.

смотри также chown() и chgrp().


chown

chown -- изменяет владельца файла
Описание
int chown(string filename, mixed user);

Пытается изменить владельца файла filename на пользователя user. Только суперюзер может изменять владельца файла.

Возвращает true при успешном завершении; в противном случае - false.

Note: В Window ничего не выполняется и возвращается true.

Смотри также chown() и chmod().


clearstatcache

clearstatcache -- очистить кеш статистики файла
Описание
void clearstatcache(void);

Вызовы системных функций stat() или lstat() в большинстве систем достаточно "дорогостоящие". Поэтому, результаты последнего вызова любой из статусных функций (см. ниже) сохраняются для последующего использования при вызове этой же функции для этого же файла. Если вы желаете инициировать новый кеш, например, в случае, когда к файлу было много обращений по проверке статуса, или файл был изменен, используйте эту функцию для очистки памяти результатов вызовов.

Affected functions include stat(), lstat(), file_exists(), is_writeable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), и fileperms().


copy

copy -- скопировать файл
Описание
int copy(string source, string dest);

Создает копию файла. Возвращает true при успешном завершении; в противном случае - false.

Пример 1. copy()

if (!copy($file, $file.'.bak')) {
    print("failed to copy $file...<br>\n");
}

смотри также: rename()


dirname

dirname -- путь к файлу
Описание
string dirname(string path);

Получив строку, содержащую путь у файлу, данная функция возвратит директорию, содержащую файла.

В Windows оба слеша - передний (/) и обратный (\) - используются как разделители при задании пути. В других окружениях это только передний слеш (/).

Пример 1. dirname()

$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"

смотри также: basename()


fclose

fclose -- close an open file pointer
Описание
int fclose(int fp);

Указатель на файл fp закрывается.

Возвращает true при удачной операции и false при ошибке.


Указатель должен быть действующим и указывать на файл, успешно открытый fopen() или fsockopen().


feof

feof -- проверка на достижение указателем конца файла
Описание
int feof(int fp);

Возвращает true если указатель файла равен EOF или в случае ошибки; в противном случае возвращается false.

Указатель должен быть действующим и указывать на файл, успешно открытый fopen(), popen(), или fsockopen().


fgetc

fgetc -- получить символ из файла
Описание

string fgetc(int fp);

Возвращает строку, содержащую один символ, прочитанный по файловому указателю fp. При EOF возвращается false (as does feof()).

Указатель должен быть действующим и указывать на файл, успешно открытый fopen(), popen(), или fsockopen().

Смотри также fopen(), popen(), fsockopen(), и fgets().


fgets

fgets -- получить строку по указателю на файл
Описание
string fgets(int fp, int length);

Возвращает строку до length - читается по одному байту из файла, указанного в fp. Чтение заканчивается, если прочитано length символов - 1 байт прочитается в любом случае, или до символов перевода строки и возврата караетки, или до EOF.

При ошибке возвращается false.

Указатель должен быть действующим и указывать на файл, успешно открытый fopen(), popen(), или fsockopen().

Смотри также fopen(), popen(), fgetc(), и fsockopen().


fgetss

fgetss -- получить строку по указателю файла и вырезать HTML тэги
Описание
string fgetss(int fp, int length);

Идентично fgets(), отличают fgetss попытки удалить HTML и PHP тэги из прочитанного текста.

Смотри также fgets(), fopen(), fsockopen(), и popen().


file

file -- прочитать файл в массив
Описание
array file(string filename);

Идентична readfile(), но file() выдает файл в массив. Каждый элемент массива соответствует строке файла (вместе с символом возврата строки).

Смотри также readfile(), fopen(), и popen().


file_exists

file_exists -- проверяет существование искомого файла.
Описание
int file_exists(string filename);

Возвращает true, если файл, определенный в filename, существует; иначе - false.

Смотри также clearstatcache().


fileatime

fileatime -- время поледнего обращения к файлу
Описание
int fileatime(string filename);

Возврвщет время последнего усешного обращения к файлу, или false в случае ошибки.


filectime

filectime -- время последнего изменения файла
Описание
int filectime(string filename);

Возвращается время последего изменения файла, или false в случае ошибки.


filegroup

filegroup -- группа файла
Описание
int filegroup(string filename);

Возврашает ID группы владельца файла, или false в случае ошибки.


fileinode

fileinode -- inode файла
Описание
int fileinode(string filename);

Возвращает номер inode файла, или false в случае ошибки.


filemtime

filemtime -- время модификации файла
Описание
int filemtime(string filename);

Возвращается время последего изменения файла, или false в случае ошибки.


fileowner

fileowner -- владелец файла
Описание
int fileowner(string filename);

Возвращает ID пользователя, владельца файла, или false в случае ошибки.


fileperms

fileperms -- разрешения для файла
Описание
int fileperms(string filename);

Возвращает разрешения, установленные для файла, или false в случае ошибки. .


filesize

filesize -- размер файла
Описание
int filesize(string filename);

Возвращает размер файла, или false в случае ошибки.


filetype

filetype -- тип файла
 
Описание
 
string filetype(string filename);


Возвращает тип файла. Возможные значения:

    fifo, char, dir,
    block, link, file, и
    unknown.

В случае ошибки возвращется false


fopen

fopen -- открыть файл или URL
Описание
int fopen(string filename, string mode);

Если filename начинается с "http://" (без учета регистра), открывается соединение HTTP 1.0 с указанным сервером и возвращается указатель файла, нга начало текста ответа.

Поскольку редиректы HTTP не обрабатываются, вы должны включать в указание директории завершающие слеши.

Если filename начинается с "ftp://" (без учета регистра), открывается ftp соединение с указанным сервером и возвращается указатель на искомый файл. Если сервер не поддерживает режим пассивного ftp, данная операция завершится ошибкой. Вы можете открывать файлы как для чтения, так и для записи через ftp (но не обе операции одновременно).

Если filename начинается как-нибудь иначе, откравается файл вашей файловой системы, и возвращается указатель на открытый файл.

Если при открвтии файла происходит ошибка, функция возвращает false.

mode выбирается из следующего списка:

 

mode также может содержать символ 'b'. Используется в системах, различающих бинарные и текстовые файлы (не используется в Unix). Если данное значение не имеет смысла, оно игногрируется.


Пример 1. fopen()

$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w");

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

На платформе Windows будьте осторожны, избегая обратных слешей в путях или используйте передние слеши.

 

$fp = fopen("c:\\data\\info.txt", "r");

 

Смотри также fclose() , fsockopen(), и popen().


fpassthru

fpassthru -- вывод всех данных из указателя файла
Описание
int fpassthru(int fp);

Читает до EOF по полученному указателю файла и записывает результат на стандартное устройство вывода.

При возникновении ошибки fpassthru() возвращает false.

Файловый указатель должен быть действующим и указывать на файл, успешно открытый fopen() popen(), or fsockopen(). Файл, закрытый fpassthru(), не читается, оставляя fp неиспользованным.

Если вы хотиде стедать дамп файла на stdout, вы можете использовать readfile(), которая сэкономит вам один вызов fopen().

Смотри также readfile(), fopen(), popen(), и fsockopen()


fputs

fputs -- запись в файл
Описание
int fputs(int fp, string str, int [length]);

fputs() - это псевдоним fwrite(), и обе функции полностью идентичны. Заметим, что параметр length опционален и при его отсутствии записывается вся строка str.


fread

fread -- бинарное чтение файла
Описание
string fread(int fp, int length);

fread() читает байты из файла, на который ссылается fp до length. Чтение заканчивается, когда прочитано length байт или достигнут EOF.

 

// получить содержимое файла в строку
$filename = "/usr/local/something.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );

Смотри также fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file(), и fpassthru().


fseek

fseek -- поиск в файле
Описание
int fseek(int fp, int offset);

Для файла fp устанавливает указатель в потоке файла на смещение в offset байт. Эквивалентно вызову в Си fseek( fp, offset, SEEK_SET ).

При удачном выполнении возвращает 0, в противном слчае возврщается -1. ЗАметим, что поиск после EOF не рассматривается как ошибка.

Не испоьзуется для файловых указателей, возвращенных fopen() при использовании форматов "http://" или "ftp://".

Смотри также ftell() и rewind().


ftell

ftell -- текущая позиция указателя в файле
Описание
int ftell(int fp);

Возвращает позицию указателя в файле, на который ссылвется fp, т.е. смещение в потоке файла.

При возникновении ошибки возвращается false.

TФайловый указатель должен быть действующим и указывать на файл, успешно открытый fopen() или popen().

Смотри также fopen(), popen(), fseek() и rewind().


fwrite

fwrite -- бинарная запись в файл
Описание
int fwrite(int fp, string string, int [length]);

fwrite() записывает содержимое string в файловый поток, указанный fp. Если аргумент length присутствует, запись останавливается после записи length-го байта, или после записи всей строки string.

Заметим, что если есть аргумент length, то конфигурационные опции magic_quotes_runtime игнорируются и никакие слеши из string не удаляются.

Смотри также fread(), fopen(), fsockopen(), popen(), и fputs().


is_dir

is_dir -- filename - директория?
Описание
bool is_dir(string filename);

Возвращает true, если filename существует и это директория.

Смотри также is_file() и is_link().


is_executable

is_executable -- фавйл относится к классу исполнимых
Описание
bool is_executable(string filename);

Возвращает true, если filename существует и является исполнимым файлом.

Смотри также is_file() и is_link().


is_file

is_file -- файл относится к классу обычных файлов
Описание
bool is_file(string filename);

Возвращает true, если filename существует и является обычным файлом.

Смотри также is_dir() и is_link().


is_link

is_link -- файл относится к файлу символических ссылок
Описание
bool is_link(string filename);

Возвращает true, если filename существует и является символической ссылкой.

Смотри также is_dir() и is_file().


is_readable

is_readable -- файл относится к классу читаемых
Описание
bool is_readable(string filename);

Возвращает true, если filename существует и является доступным для чтения.

Помните, что PHP может иметь доступ к файлу как поьлзователь, под чьим id запущен веб-сервер (часто 'nobody'). Ограничения безопасного режима не действуют внутри аккаунта.

Смотри также is_writeable().


is_writeable

is_writeable -- файл относится к классу записываемых
Описание
bool is_readable(string filename);

Возврвщает true если файл существует и доступен для записи.

Помните, что PHP может иметь доступ к файлу как поьлзователь, под чьим id запущен веб-сервер (часто 'nobody'). Ограничения безопасного режима не действуют внутри аккаунта.

Смотри также is_readable().


link

link -- создать жесткую ссылку
Описание
int link(string target, string link);

link() cсоздает жесткую ссылку.

Смотри также symlink() создает символическую ссылку, и readlink() вместе с linkinfo().


linkinfo

linkinfo -- информация о ссылке
Описание
int linkinfo(string path);

linkinfo() возвращает поле st_dev из UNIX C структуры stat, возвращенной системным вызовом lstat. Эта функция используется для верификации, если ссылка (указанная в path) реально существует (испотльзует те же методы, что и макрос S_ISLNK, определенный в stat.h). Возвращает 0 или FALSE в случае ошибки.

Смотри также symlink(), link(), и readlink().


mkdir

mkdir -- создать директорию
Описание
int mkdir(string pathname, int mode);

Пытается создать директорию, указанную в pathname.

Заметим, что если вы захотите указать mode в восьмеричной системе, то число должно начинаться с 0.

 

mkdir("/path/to/my/dir", 0700);

 

Возвращает true при успешном выполнении и false при ошибке.

Смотри также rmdir().


pclose

pclose -- закрывает процесс файлового указателя
Описание
int pclose(int fp);

Закрывает файловый указатель к каналу, открытому popen().

Файловый указатель должен быть действующим и возвращен успешным вызовом popen().

Возврващает статус завершения запущенного процесса.

Смотри также popen().


popen

popen -- открыть процесс файлофого указателя
Описание
int popen(string command, string mode);

ОТкрывает канал к процессу, исполняемому путем форкинга команды command.

Возвращает файловый указаель, идентичный возвращемому fopen(), но этот указатель мононаправленный (может использоваться только для чтения или только для записи) и должен бытть закрыт pclose(). Этот указатель можно использовать с fgets(), fgetss(), и fputs().

При возникновении ошибки возвращет false.

 

$fp = popen( "/bin/ls", "r" );

 

Смотри также pclose().


readfile

readfile -- вывод файла
Описание
int readfile(string filename);

Читает файл и записывает его на стандартное устройство вывода.

Возвращает количество прочитанных байтов. В случае возникновения ошибки возвращется false и за исключением функции, вызванной как @readfile, выводится сообщение об ошибке.

Если filename начинается с "http://" (без учета регистра), открывается соединение HTTP 1.0 к указанному серверу и текст ответа выводится на стандартное устротйство вывода.

Поскольку редиректы HTTP не обрабатываются, вы должны включать в указание директории завершающие слеши.

Если filename начинается с "ftp://" (без учета регистра), открывается ftp соединение с указанным сервером и файл ответа выводится на стандартное устройство вывода. Если сервер не поддерживает режим пассивного ftp, этот вызов завершится ошибкой.

Если filename начинается как-нибудь иначе, будет открыт файл файловой системы и его ссодержимое выведется на стандартное устройство вывода.

Смотри также fpassthru(), file(), fopen(), include(), require(), и virtual().


readlink

readlink -- цель символической ссылки
Описание
string readlink(string path);

readlink() работает аналогично функции Си readlink и возвращает содержимое символической ссылки path или 0 в случае ошибки.

Смотри также symlink(), readlink() и linkinfo().


rename

rename -- переименовать файл
Описание
int rename(string oldname, string newname);

Пытается переименовать oldname в newname.

Возвращает true при успешном выполнениии и false при сбое.


rewind

rewind -- rewind the position of a file pointer
Описание
int rewind(int fp);

Позиционирует файловфй указатель для fp на начало потока файла.

При возникновении ошибки возвращается 0.

Файловый указатель должен быть действующим и указавать на файл, успешно открытый fopen().

Смотри также fseek() и ftell().


rmdir

rmdir -- удалить директорию
Описание
int rmdir(string dirname);

Пытается удалить директорию, указанную путем. Директория лдолжна быть пустой, и релевантные разрешения должны допустить это.

При возникновении ошибкт возвращается 0.

Смотри также mkdir().


stat

stat -- информация о файле
Описание
array stat(string filename);

Собирает статичтику о файле filename.

Возвращает массив статистической информации о файле со следующими элементами:

 

  1. устройство

  2. inode

  3. номер ссылки

  4. id пользователя или владельца

  5. id группы владельца

  6. device type if inode device *

  7. размер в байтах

  8. время последнего доступа

  9. время последней модификации

  10. время последнего изменения

  11. размер блока для I/O файловой системы *

  12. количество занатых блоков

* - тоьлко для систем, поддерживающих тип st_blksize -- в других системах (i.e. Windows) возвращается -1

lstat

lstat -- информация о файле или символической ссылке
Описание
array lstat(string filename);

Собирает информацию и файле иил символической ссылке filename. Эта функция идентична stat(), но если filename - это символическая ссылка, то возвращается статус символической ссылки, а не статус файла, на который указывает данная ссылка.

Возвращает массив статистической информации со следующими элементами:

  1. устройство

  2. inode

  3. число ссылок

  4. id пользователя или владельца

  5. id группы владельца

  6. тип устройства, если inode - устройство *

  7. размер в байтах

  8. время последнего доступа

  9. время последней модификации

  10. время последнего изменения

  11. размер болка для I/O файловой системы *

  12. количество занатых блоков

* - тоьлко для систем, поддерживающих тип st_blksize -- в других системах (i.e. Windows) возвращается -1

symlink

symlink -- создать символическую ссылку
Описание
int symlink(string target, string link);

symlink() создает символическую ссылку с существующей целью target с указанным именем link.

Смотри также link() создает жесткую ссылку, и readlink() вместе с linkinfo().


tempnam

tempnam -- создать уникальное имя файла
Описание
string tempnam(string dir, string prefix);

Создает никальное имя файла в указанной директории. Если директория не существует, tempnam() может сгененрировать имя файла во временной директории системы.

Возвращает новое временное имя файла, или нулевую строку при ошибке.

Пример 1. tempnam()

$tmpfname = tempnam( "/tmp", "FOO" );


touch

touch -- установить время модификации файла
Описание
int touch(string filename, int time);

Пытается установить время модификации файла filename в значение time. Если опция time отсутствует, испотьлзуется текущее время.

Если файл не существует, то он создается.

Возвращает true при успешном выполнении и false в обратном случае.


umask

umask -- изменить текущую umask
Описание
int umask(int mask);

umask() устанавливает текущую umask PHP в mask & 0777 и возвращает старую umask. Когда PHP используется ска серверный модуль, umask сохраняется при завершении каждого запроса.

umask() без аргументов возвращает текущую маску.


unlink

unlink -- удалить файл
Описание
int unlink(string filename);

Удаляет filename. Аналогично функции Unix C unlink().

Возвращает 0 или FALSE при ошибке.

Смотри также rmdir() для удаления директорий.


Функции, связанные с HTTP

Эти функции позволяют вам управлять ывводом на удаленный браузер на уровне протокола HTTP.


header

header -- послать необработанный заголовок HTTP
Описание

int header(string string);

Функция Header() используется в начале HTML-файла для отправки строки HTTP заголовка. Смотри HTTP 1.1 Specification для более подробной информации о заголовках HTTP.
Замечание:
Помните, что функция Header() должна быть вызвана перед любыми другими операциями вывода, описанными стандартными тэгами HTML или PHP. Наиболее общие ошибки в коде - применение include() с auto_prepend и пробелами или пустыми строками, которые инициируеют вывод до вызова header().

 

Header("Location: http://www.php.net");  /* Редирект браузера на сайт PHP */
exit;  /* Код, следующий ниже, не будет исполняться после редиректа. */

 

PHP-скрипты часто генерируют динамический HTML, который не следует кешировать на клиентском браузере или прокси-сервере. Многие прокси и клиенты можно заставить отключить кеш:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Прошедшая дата
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); // всегда модифицировать
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0


setcookie

setcookie -- послать кук
Описание
int setcookie(string name, string value, int expire, string path, string domain, int secure);

SetCookie() определяет кук, который будет послан вместе с остальной информацией из заголовка. Все аргументы, исключая name опциональны. Если присутствует только аргумент name, кук с указанным именем будет удален с клиента. Вы также можете представить любой из аргументов пустой строкой, с целью пропуска оного (""). Параметры expire и secure являются целочисленными и ен могут быть заменены пустыми строками. Для этой цели используют (0). Аргумент expire - это стандартное время Unix, возвращаемое функциями time() или mktime(). secure показывает, что кук следует передавать только по защищенному соединению HTTPS. Некоторые примеры:

Пример 1. SetCookie

SetCookie("TestCookie","Test Value");
SetCookie("TestCookie",$value,time()+3600);  /* истекает через час */
SetCookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);

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

 

echo $TestCookie;

 

Для получения более подробной информации о куках, смотрите спецификацию Netscape по http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 с Service Pack 1 могут некорректно работать с куками, где установлен параметр path.


Функции работы с Hyperwave

Вступление

Hyperwave был разработан IICM в Гразе (Graz). Первоначально пакет назывался Hyper-G и был изменен на Hyperwave после коммерциализации (где-то в 1996).

Hyperwave не является свободно распространяемым ПО. Текущая версия, 4.0, доступна www.hyperwave.com. Существует 30-дневная версия.

Hyperwave - это информационная сиситема, похожая на базы данных (HIS, Hyperwave Information Server). Она напраавлена на хранение документов и управление ими. Документом может быть любая часть данных, которая может быть сохранена в файле. Каждый документ сопровождается своей объектной записью. Объектная запись содержит мета-данные документа. Мета-данные - это список атрибутов, который может быть расширен пользователем. Постоянные атрибуты всегда назначаются сервером Hyperwave, остальные могут меняться пользователем.

Помимо документов, все содержащиеся в документах гиперссылки также сохраняются в виде объектных записей. Гиперссылки, содержащиеся в документе, при его вставке в базу данных удаляются и сохраняются в виде отдельных объектов. объектные записи ссылок содержат информацию о начале и конце ссылки. Для восстановления оригинала документа вым нужно будет получить "плоский" докумет, без ссылок, список ссылок и заново вставить их в документ. Для этого предназаначены функции hw_pipedocument() и hw_gettext(). Преимущества выделения ссылок из документа очевидны. Как только документ, на который указывает ссылка, изменит свое имя, соответствующая ссылка также может быть легко изменена. Документ, содержащий ссылки, не подвержен изменениям. Вы даже можете добавить в документ ссылку, не изменяя его.

Говорят, что hw_pipedocument() и hw_gettext() выполняют вставку ссылок в документ автоматически, однако быстро сказка сказывается, да не просто дело делается. Вставка ссылок предполагает неизменную иерархию документов. На веб-сервере существует иерархия, полученная от файловой системы, но Hyperwave имеет свою собственную иерархию и имена не отражают позицию объекта в этой иерархии. Поэтому оздание ссылок прежде всего требует маппинга имен из иерархии Hyperwave в соотвествующие имена иерархии веб. Фундаментальное отличие между Hyperwave и Веб заключается в том, что в Hyperwave имя и иерархия - суть разные понятия. Имя не содержит никакой информации о положении объекта в иерархии. В Веб имя содержит и информацию о том, гед объект расположен иерархически. Это указывает на два возможных пути маппинга. В URL можно отражать иерархию Hyperwave и имя объекта или только имя. С цель сделать вещи проще, второй вариант более применим. Объект Hyperwave с именем 'my_object' мапится в 'http://host/my_object' безотносительно к его положению в иерархии Hyperwave. Объект с именем 'parent/my_object' может быть порожден 'my_object' в иерархии Hyperwave, однако в пространстве имен Веб оно проявится как противоположное и пользователь может быть неприятно удивлен. Это может быть предотвращено только путем оригинального именования объектов.

Применение этого решения порождает вторую проблему. Как вы запускаете php3? URL http://host/my_object не вызовет ни одного скрипта php3 до тех пор, пока вы не укажете вашему веб-скрверу переписать ее подобным образом: 'http://host/php3_script/my_object' и переменная $PATH_INFO должна быть равна скрипту 'php3_script', и возвращется объект с именем 'my_object' от Hyperwave сервера. Это только один недостаток, который может быть исправлен легко. Переписывание URL не дает доступа к другим документам веб-сервера. Скрипт php3 для поиска в Hyperwave сервере принципиально невозможен. По этой причине вам необходимо по меньшей мере два переназначения правила для исключения постоянных URLов, начинающихся с http://host/Hyperwave. Это - основное разделение пространства имен между Hyperwave и веб серверами.

На основе вышеизложенных механизмов ссылки вставляются в документ.

Это получается более сложно, если php3 не запущено как скрипт module/CGI, а как самостоятельное приложение, т.е. дампит содержимое Hyperwave сервера на CD-ROM. В этом случае имеет смысл сохранять иерархию Hyperwave и мапить ее на файловую систему. Это может вызвать конфликты с именамаи объектов если оини отражают свою собственную иерархию (если имена включают символ "/"). Однако, "/" может быть заменен на другой символ, типа "_", и все вроде встенет на свои места.

Сетевой протокол соединяется с Hyperwave сервером HG-CSP (Hyper-G Client/Server Protocol). Он основан на сообщениях, инициирующих определенный события, например получекния объектной записи. Вранних версиях Hyperwave сервера предлагалось два родных клиента (Harmony, Amadeus) для связи с сервером. Оба они исчезли после коммерциализации Hyperwave. На замену пришло нечто, называемое wavemaster. Wavemaster - это нечто протоколоподобное, конвертирующее HTTP в HG-CSP. Идея состоит в том, чтобы все администрирование базами данных и визуализация документов должно осуществляться через Веб-интерфейс. Wavemaster обеспечивает множество плейсхолдеров (placeholders) для постоянных операций по насторйке интерфейса. Эти плейсхолдеры называются языком PLACE. PLACE-у недостает множества преимуществ настоящих языков программирования, и любые расширения - это только увеличение списка плейсхолдеров. Это дает мне основание к использованию JavaScript, который, IMHO, не делает жизнь легче.

Добавление поддержки Hyperwave в PHP3 было введено с целью заполнить пробелы языков програмирования в управлении интерфейсов. Оно выполлняет все сообщения, определенные в HG-CSP, и более сложныве команды по получению завершенных документов.

Hyperwave имеет свою собственную терминологию для именования различных порций информации. Это было заимствовонно и расширенно. Практически все функции оперируют с одним из следующих типов данны:

 

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

 

Hidden

Число объектных записей с атрибутом PresentationHints, установленным в Hidden.

CollectionHead

Число объектных записей с атрибутом PresentationHints, установлденным в CollectionHead.

FullCollectionHead

Число объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead.

CollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в CollectionHead.

FullCollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead.

Total

Общее число объектных записей.

Интеграция с Apache

 

Модуль Hyperwave лучьше всего использовать, когда PHP3 скомпилированн в как модуль Apache. В этом случае основной Hyperwave сервер может быть скрыт от пользователя почти полностью, если Apache использует свой движок. Это объясняют следующие инструкции.

С тех пор, как PHP3 с Hyperwave поддерживают встраивание в Апач, предполагается, что родное решение Hyperwave - wavemaster - автоматически замещается. Т.е. Апач примет на себя функции веб-интерфейса к Hyperwave. Это не есть необходимость, но конфигурация упрощается. Идея достаточно проста. Перво-наперво вам необходим PHP3-скрипт, который оценивает переменную PATH_INFO и рассматривает ее значение как имя Hyperwave объекта. Пусть скрипт называется 'Hyperwave'. URL http://your.hostname/Hyperwave/name_of_object возвратит Hyperwave объект с именем 'name_of_object'. Реакция скрипта зависит от типа объекта. Если это коллекция, он возможно вернет список наследников. Если это документ, он возвратит mime-тип и содержание. Небольшое улучшение может быть достигнуто, если используется движок перезаписи Апача. С точки зрения пользователя, это более прямой путь, если URL http://your.hostname/name_of_object будет возвращать объект. Правило перезаписи достаточно простое:

 

RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]

 

Теперь каждый URL относится к объекту в Hyperwave серере. Это основание для простого решения проблемы. Это еще не путь для выполнения различных скриптов, например поиска, как в скрипте 'Hyperwave'. Это может быть решено другим правилом перезаписи:

 

RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]

 

При этом будет зарезервирована директория /usr/local/apache/htdocs/hw для допонительных скриптов и других файлов. Следует удостоверится, что это правило выполнится перед рассмотренным выше. Есть небольшой недостаток - все объекты Hyperwave, чье имя начинается с '/hw' будут скрытыми. Поэтому, будьте уверены, что вы не используете таких имен. Если вам необходимо больше директорий, например для изображений, добавьте еще правила или сложите все в оодной директории. Наконец, не забудьте запустить перезаписывающий движок с

 

RewriteEngine on

 

Мой опыт подсказывает, что вам понадобятся следующие скрипты:

 

Замечания

 

Еще несколько заечаний:

 


hw_Changeobject

hw_Changeobject -- Сменить объект
Описание

int hw_changeobject(int connection, int object_to_change, string commands);

 

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

<command> ::= <remcmd> |
              <addcmd> |
              <remcmd> "\" <addcmd>

<remcmd>  ::= "rem " <attribute> "=" <value>

<addcmd>  ::= "add " <attribute> "=" <value>                 Заметим, что в запросе на удаление или перемещение атрибута, его старое значение также поддерживается (некоторые атрибуты могут иметь одновременно несколько значений). Команда, подобная rem attr=value\add attr=value позводяет модифицировать атрибуты за одну операцию.

Возвращает True при отсутствии ошибок, иначе False.


hw_Children

hw_Children -- ID наследников объекта
Описание

array hw_children(int connection, int objectID);

 

Возвращает массив идентификаторов объектов. Каждый иденитификатор - часть коллекции с идентификатором objectID. Массив содержит всех наследников, документы и коллекции.


hw_ChildrenObj

hw_ChildrenObj -- объектные записи наследников.
Описание

array hw_childrenobj(int connection, int objectID);

 

Возвращает массив объектных записей. Каждая запись - часть коллекции с идентификатором objectID. Массив содержит всех наследников, документы и коллекции.


hw_Close

hw_Close -- закрыть соединение Hyperwave
Описание

int hw_close(int connection);

 

Возвращет false, если соединение не является действующим, в противном случае - true. Closes закрывает соединение с Hyperwave сервером с указанным номером соединения connection.


hw_Connect

hw_Connect -- открыть соединение.
Описание

int hw_connect(string host, int port, string username, string password);

 

Открывает соединение с Hyperwave сервером и возвращает номер соединение при успешном открытиии, или False, ели слединение не может быть установлено. Каждый аргумент должен быть "закавыченой" строкой, исключая номер порта. Аргумент username и password опциональны и могут не указываться. В случае ошибки идентификации, сервер завершит работу. Проще использовать идентификацию как пользователь anonymous. Функция возращает индекс соединения, необходимы для других функций Hyperwave. Вы можете открыть несколько соединений. Помните, что пароли не шифруются.

Смотри также hw_pConnect().


hw_Cp

hw_Cp -- копировать оюъекты
Описание

int hw_cp(int connection, array object_id_array, int destination id);

 

Копирует объекты с идентификаторами, указанными во втором параметре в коллекцию с идентификатором destination id.

Возвращается число скопированных объектов.

Смотри также hw_mv().


hw_Deleteobject

hw_Deleteobject -- удалить объект
Описание

int hw_deleteobject(int connection, int object_to_delete);

 

Удаляет объект с идентификатором, указанным во втором параметре. Будут удалены все экземпляры объекта.

При отсутствии ошибок возвращает true, инача - false.

Смотри также hw_mv().


hw_DocByAnchor

hw_DocByAnchor -- ИД объекта, относящегося к якорю
Описание

int hw_docbyanchor(int connection, int anchorID);

 

Возвращает идентификатор оъекта документа, который относится к якорю anchorID.


hw_DocByAnchorObj

hw_DocByAnchorObj -- объектная запись объекта, относящегося к якорю
Описание

string hw_docbyanchorobj(int connection, int anchorID);

 

Возвращает объектную запись объекта документа, относящегося к якорю anchorID.


hw_DocumentAttributes

hw_DocumentAttributes -- объектная запись Hyperwave документа
Описание

string hw_documentattributes(int hw_document);

 

Возвращает объектную запись документа.

Смотри также hw_DocumentBodyTag(), hw_DocumentSize().


hw_DocumentBodyTag

hw_DocumentBodyTag -- тег body hw-документа
Описание

string hw_documentbodytag(int hw_document);

 

Возвращает тег BODY для документа. Если документ в формате HTML, тег BODY должен быть напечатен перед документом.

Смотри также hw_DocumentAttributes(), hw_DocumentSize().


hw_DocumentSize

hw_DocumentSize -- размер hw-документа
Описание

int hw_documentsize(int hw_document);

 

Возвращает размер документа в байтах.

Смотри также hw_DocumentBodyTag(), hw_DocumentAttributes().


hw_ErrorMsg

hw_ErrorMsg -- возврат сообщения об ошибке
Описание

string hw_errormsg(int connection);

 

Возвращает строку, содержащую последнее сообщени об ошибке или 'No Error'. Если возвратилось False, функция не выполнилась. Сообщение относится к последней команде.


hw_EditText

hw_EditText -- получение текстового документа
Описание

int hw_edittext(int connection, int hw_document);

 

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

Смотри также hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument(), hw_GetText().


hw_Error

hw_Error -- номер ошибки
Описание

int hw_error(int connection);

 

Возвращет номер последней ошибки. Если 0 - ошибок не было. Ошибка относится к последней команде.


hw_Free_Document

hw_Free_Document -- освободить hw-документ
Описание

int hw_free_document(int hw_document);

 

освобождает память, занятую hw-документом.


hw_GetParents

hw_GetParents -- ИД родителей объекта
Описание

array hw_getparentsobj(int connection, int objectID);

 

Возвращает индексированный массив идентификаторов объектов. Каждый ИД объекта относится к родителям объекта с идентификатором objectID.


hw_GetParentsObj

hw_GetParentsObj -- объектные записи родителей
Описание

array hw_getparentsobj(int connection, int objectID);

 

Возвращает индексированный массив объектных записей плюс ассоциативный массив со статистической информацией об объектных записях. Ассоциативный массив - последний член возвращенного массива. Каждая объектная запись относится к родителю объекта с ИД objectID.


hw_GetChildColl

hw_GetChildColl -- ИД объекта коллекции наследников
Описание

array hw_getchildcoll(int connection, int objectID);

 

Возвращает массив идентификаторов оюъектов. Каждый ИД объекта относится к наследной коллекции, коллекции с идентификатором objectID. Функция не возвращает наследуемые документы.

Смотри также hw_GetChildren(), hw_GetChildDocColl().


hw_GetChildCollObj

hw_GetChildCollObj -- объектные записи коллекции наследников
Описание

array hw_getchildcollobj(int connection, int objectID);

 

Возвращает массив объектных записей. Каждая запись относится к наследной коллекции, коллекции с идентификатором objectID. Функция не возвращает наследуемые документы.

Смотри также hw_ChildrenObj(), hw_GetChildDocCollObj().


hw_GetSrcByDestObj

hw_GetSrcByDestObj -- возвращает якорные точки объекта
Описание

array hw_getsrcbydestobj(int connection, int objectID);

 

Возвращает объектные записи всех якорных точек объекта с ИД objectID. Объект может быть как документом, так и якорем.

Смотри также hw_GetAnchors().


hw_GetObject

hw_GetObject -- объектная запись
Описание

array hw_getobject(int connection, int objectID);

 

Возвращает объектную запись объекта с идентификатором objectID.

Смотри также hw_GetAndLock().


hw_GetAndLock

hw_GetAndLock -- вернуть объектную запись и запереть объект
Описание

string hw_getandlock(int connection, int objectID);

 

Возвращает объектную запись объекта с ИД objectID. Объект также запирается, поэтому другие позователи не имеют к нему доступа, пока объект не будет разблокирован.

Смотри также hw_Unlock(), hw_GetObject().


hw_GetText

hw_GetText -- получить текстовый документ
Описание

int hw_gettext(int connection, int objectID, int rootID);

 

Возвращается документ с идентификатором объекта objectID. Если документ имеет якоря, которые можно вставить, то они будут сразу вставлены. Опциональный параметр rootID определяет, как ссылки будут вставляться в документ. По умолчанию подставляется 0, что означает конструирование ссылок из имен объктов назначения ссылок. Это применимо для веб-приложений. Если ссылка указывает на объект с именем 'internet_movie', ссылка HTML будет выглядеть как <A HREF="/internet_movie">. Настоящее положение исходного объекта и объекта назначения в иерархии документа полностью игнорируется. Вы будете вынуждены установить ваш браузер, переписать URL приблизительно так: example '/my_script.php3/internet_movie'. 'my_script.php3' обработает $PATH_INFO и выдаст документ.

Если rootID не равен 0, ссылка конструируется из всех имен, начиная с объекта с ИД rootID, разделенных слешами от текущего объекта. Если для предидущего примера документ 'internet_movie' расположен в 'a-b-c-internet_movie', где '-' - разделители между уровнями иерархии, и исходный документ расположен по пути 'a-b-d-source', результирующая HTML-ссылка будет: <A HREF="../c/internet_movie">. Это используется, если вы хотите утянуть се содержание сервера на диск и мапить иерархию докмента на файловую систему.

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

Смотри также hw_PipeDocument(), hw_FreeDocument(), hw_DocumentBodyTag(), hw_DocumentSize(), hw_OutputDocument().


hw_GetObjectByQuery

hw_GetObjectByQuery -- поиск объекта
Описание

array hw_getobjectbyquery(int connection, string query, int max_hits);

 

Ищет объекты по всему серверу и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits. Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

Смотри также hw_GetObjectByQueryObj().


hw_GetObjectByQueryObj

hw_GetObjectByQueryObj -- поиск объекта
Описание

array hw_getobjectbyqueryobj(int connection, string query, int max_hits);

 

Ищет объекты по всему серверу и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits. Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

Смотри также hw_GetObjectByQuery().


hw_GetObjectByQueryColl

hw_GetObjectByQueryColl -- поиск объекта в коллекции
Описание

array hw_getobjectbyquerycoll(int connection, int objectID, string query, int max_hits);

 

Ищет объект в коллекции с идентификатором objectID и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits. Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

Смотри также hw_GetObjectByQueryCollObj().


hw_GetObjectByQueryCollObj

hw_GetObjectByQueryCollObj -- search object in collection
Описание

array hw_getobjectbyquerycollobj(int connection, int objectID, string query, int max_hits);

 

Ищет объект в коллекции с идентификатором objectID и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits. Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

Смотри также hw_GetObjectByQueryColl().


hw_GetChildDocColl

hw_GetChildDocColl -- ИД объектов наследуемых документов коллекции
Описание

array hw_getchilddoccoll(int connection, int objectID);

 

Возвращает массив идентификатров объектов наследуемых документов коллекции.

Смотри также hw_GetChildren(), hw_GetChildColl() .


hw_GetChildDocCollObj

hw_GetChildDocCollObj -- объектные записи наследуемых документов коллекции
Описание

array hw_getchilddoccollobj(int connection, int objectID);

 

Возвращает массив идентификатров объектов наследуемых документов коллекции.

Смотри также hw_ChildrenObj(), hw_GetChildCollObj().


hw_GetAnchors

Описание

array hw_getanchors(int connection, int objectID);

 

Возвращает массив идентификаторов объектов для якорей документа с ИД objectID.


hw_GetAnchorsObj

hw_GetAnchorsObj -- объектные записи якорей документа
Описание

array hw_getanchorsobj(int connection, int objectID);

 

Возвращает массив объектных записей для якорей документа с ИД objectID.


hw_Mv

hw_Mv -- переместить объект
Описание

int hw_mv(int connection, array object id array, int source id, int destination id);

 

Перемещает объект с объектным идентификатром, указанным во втором параметре, из коллекции с идентификатором source id в коллекцию с идентификатором destination id. Если исходный ИД равен 0, объекты будут "отвязаны" от исходной коллекции. Если это последний экземпляр этого объекта, он будет удален.

Возвращется число перемещенных объектов.

Смотри также hw_cp(), hw_deleteobject().


hw_Identify

hw_Identify -- идентификация пользователя
Описание

int hw_identify(string username, string password);

 

Идентификация пользователя с именем username и паролем password. Идентификация имеет силу только для текущей сессии. Я не думаю, что данная функция так уж часто используется. В большинстве случаев будет проще проводить идентификацию при установлении соединения.

Смотри также hw_Connect().


hw_InCollections

hw_InCollections -- есть ли такой объект в коллекции
Описание

array hw_incollections(int connection, array object_id_array, array collection_id array, int return_collections);

 

Проверяет, является ли множество объектов (документов или коллекций), определенное в object_id_array, частью коллекций, определенных в коллекции id_array. Если четвертый параметр return_collections равен 0, подмножество идентификаторов объектов, которое является частью коллекций (т.е. документы или коллекции, которые являются наследниками одной или более коллекций идентификаторов коллекции или их подколлекций, рекурсивно) возвращается как массив. Когда четвертый праметр равен 1, однако, множество соллекций, которые имеют наследников в этом подмножестве, возвращается как массив. Это позволяет пользователю, например, подчеркнуть часть иерархии коллекции, которая содержит находки предидущего запроса, в графическом виде.

 


hw_Info

hw_Info -- информация о соединении
Описание

string hw_info(int connection);

 

Возвращает сведения о текущем соединении. Возвращаемая строка имеет следующий формат: <Serverstring>, <Host>, <Port>, <Username>, <Port of Client>, <Byte swapping>


hw_InsColl

hw_InsColl -- добавление коллекции
Описание

int hw_inscoll(int connection, int objectID, array object_array);

 

Вставить новую коллекцию с атрибутами как в object_array в коллекцию с идентификатором objectID.


hw_InsDoc

hw_InsDoc -- добавление доукмента
Описание

int hw_insdoc(int connection, int parentID, string object_record, string text);

 

Вставить новый документ с атрибутами как в object_array в коллекцию с идентификатором objectID. Эта функци может добавить как отдельную объектную запись, так и чистый ascii текст из text, если text получен. Если вы хотите добавить документ в общем, используйте hw_insertdocument().

Смотри также hw_InsertDocument(), hw_InsColl().


hw_InsertDocument

hw_InsertDocument -- добавление любого документа
Описание

int hw_putdocument(int connection, int parent_id, int hw_document);

 

Загружает документ в коллекцию parent_id. Перед этим документ должен быть создан hw_NewDocument(). Удостоверьтесь, что объектная запись нового документа содержит следующие атрибуты: Type, DocumentType, Title и Name. Возможно, вы захотите также установить MimeType.

Смотри также hw_PipeDocument().


hw_New_Document

hw_New_Document -- создание нового документа
Описание

int hw_new_document(string document_data, string object_record, int document_size);

 

Возвращает новый hw-документ с данными, установленными по document_data и объектной записью object_record. Длина данных документа document_data передается в document_size. Эта функция не добавляет документ в Hyperwave сервер.

Смотри также hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument(), hw_InsertDocument().


hw_Objrec2Array

hw_Objrec2Array -- конвертировать атрибуты из объектной записи в объектный массив
Описание

array hw_objrec2array(string object_record);

 

Преобразует object_record в объектный массив.


hw_OutputDocument

hw_OutputDocument -- печать hw-документа
Описание

int hw_outputdocument(int hw_document);

 

Печатает документ без тега BODY.


hw_pConnect

hw_pConnect -- создание устойчивого соединения с базой данных
Описание

int hw_pconnect(string host, int port, string username, string password);

 

Возвращает индекс соединения в случае удачи, или false, если соединение не может быть установлено. Открывает устойчивое соединение с Hyperwave сервером. Каждый аргумент должен быть "заавыченной" строкой, исключая номер порта. Аргументы username и password опциональны и могут быть опущены. В случае ошибки идентификации, сервер будет остановлен. Проще применять вход пользователя anonymous. В ыможете открыть множество устойчивых соединений.

Смотри также hw_Connect().


hw_PipeDocument

hw_PipeDocument -- полдучение любого документа
Описание

int hw_pipedocument(int connection, int objectID);

 

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

Смотри также hw_GetText() for more on link insertion, hw_FreeDocument(), hw_DocumentSize(), hw_DocumentBodyTag(), hw_OutputDocument().


hw_Root

hw_Root -- идентификатор коренного объекта
Описание

int hw_root();

 

Возвращает объектный идентификатор для гиперкоренной коллекции. Обычно это 0. Наследная коллекция от гиперкорневой - корневая, на сервере, с которым установлено соединение.


hw_Unlock

hw_Unlock -- разблокировать объект
Описание

int hw_unlock(int connection, int objectID);

 

Разблокирует документ для доступа другим пользователям.

Смотри также hw_GetAndLock().


hw_Username

hw_Username -- имя текущего пользователя
Описание

string hw_getusername(int connection);

 

Возвращает имя пользователя соединения.


Функции работы с изображениями

Вы можете использовать фуннкции работы с изображениями для получения размеров картинок в файлах JPEG, GIF, PNG, и, если у Вас есть библиотека GD (доступна на http://www.boutell.com/gd/), Вы также будете иметь возможность создавать GIF-изображения и управлять ими.


GetImageSize

GetImageSize -- получение размеров GIF, JPG или PNG изображений
Описание
array getimagesize(string filename, array [imageinfo]);

Функция GetImageSize() определяет размеры любых изображений в файлах GIF, JPG или PNG и возвращает размерность вместе с типом файла и строкой в формате высота/ширина, которую можно использовать в стандартном теге HTML IMG.

Возвращается массив из четырех элементов. Индекс 0 содержит ширину изображения в пикселах. Элемент 1 содержит высоту. Элемент 2 - флаг типа изображения. 1 = GIF, 2 = JPG, 3 = PNG. Элемент 3 - строку с корректным заданием "height=xxx width=xxx" для прямого использования в теге IMG

Пример 1. GetImageSize

<?php $size = GetImageSize("img/flag.jpg"); ?>

<IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>>

Опциональный параметр imageinfo позволяет Вам получить некоторую дополнительную информацию о файле изображения. Сейчас возвращаеются разнообразные JPG APP маркеры в ассоцированном массиве. Некоторые программы используют эти APP для встраивания текстовой информации в изображение. Очень распространено встраивание IPTC http://www.xe.net/iptc/ информации в APP13 маркер. Вы можете использовать функцию iptcparse() для перевода бинарного APP13 маркера в нечто читабельное.

Пример 2. GetImageSize возвращает IPTC

<?php 
    $size = GetImageSize("testimg.jpg",&$info);
    if (isset($info["APP13"])) {
        $iptc = iptcparse($info["APP13"]);
        var_dump($iptc);
    }
?>

Примечание: Эта функция не требует библиотеки GD.


ImageArc

ImageArc -- рисует часть эллипса
Описание
int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col);

ImageArc рисует чать эллипса с центро в cx, cy (верхний левый угол - 0,0) в изображении im. w и h определяют высоту и ширину эллипса в соответствии с начальной и конечной точкой, определенными в аргументах s и e.


ImageChar

ImageChar -- рисует символы горизонтально
Описание
int imagechar(int im, int font, int x, int y, string c, int col);

ImageChar рисует первый символ из c в рисунке id с верхним левым углом в x,y (верхний левый - 0,0) цветом col. Шрифтом 1, 2, 3, 4 или 5, используются встроенные шрифты (больше цифра - больше шрифт).

Смотри также imageloadfont().


ImageCharUp

ImageCharUp -- рисует символы вертикально
Описание
int imagecharup(int im, int font, int x, int y, string c, int col);

ImageCharUp рисует символ c вертикально в изображении im по координатам x, y (верхний левый - 0, 0) с цветом col. Если font равен 1, 2, 3, 4 или 5, используются встроенные шрифты.

Смотри также imageloadfont().


ImageColorAllocate

ImageColorAllocate -- определяет цвет изображения
Описание
int imagecolorallocate(int im, int red, int green, int blue);

ImageColorAllocate возвращает цвет в схеме RGB. Аргумент im возвращается функцией imagecreate(). ImageColorAllocate должна быть вызвана для создания каждого цвета, который планируется использовать в изображении, представленном im.

$white = ImageColorAllocate($im, 255,255,255);
$black = ImageColorAllocate($im, 0,0,0);

ImageColorTransparent

ImageColorTransparent -- определить цвет как прозрачный
Описание
int imagecolortransparent(int im, int [col]);

ImageColorTransparent устанавливает прозрачный цвет в изображении im в col. im - идентификатор изображения, возвращенный imagecreate(), а col - идентификатор цвета, возвращенный функцией imagecolorallocate().

Возвращается идентификатор нового (или текущего, если не указан параметр col) прозрачного цвета.


ImageCopyResized

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);

ImageCopyResized копир область одного изображения в другое. dst_im - изображение-получатель, src_im - исходное изображение. Если координаты исходного и результирующего изображений различны по ширине и высоте, производится соответствующее сжатие/растягивание фрагмента изображения. Координаты - относительно левого верхнего угла. Функция может быть использована для копирования фрагментов одного и того же изображения (если dst_im равно src_im) но если области перекроются, результат может быть непредсказуемым.


ImageCreate

ImageCreate -- создать новое изображение
Описание
int imagecreate(int x_size, int y_size);

ImageCreate возвращает идентификатор изображения чистого листа размерами x_size на y_size.


ImageCreateFromGif

ImageCreateFromGif -- создать новое изображение из файла или URL
Описание
int imagecreatefromgif(string filename);

ImageCreateFromGif возвращает идентификатор изображения, полученного из filename.


ImageDashedLine

ImageDashedLine -- нарисовать пунктирную линию
Описание
int imagedashedline(int im, int x1, int y1, int x2, int y2, int col);

ImageLine рисует пунктирную линию от x1,y1 до x2,y2 (верхний левй угол - 0,0) в изображении im цветом col.

Смотри также imageline().


ImageDestroy

ImageDestroy -- уничтожить изображение
Описание
int imagedestroy(int im);

ImageDestroy освобождает память, ассоциированную с изображением im. im - идентификатор, возвращенный функцией imagecreate().


ImageFill

ImageFill -- заливка
Описание
int imagefill(int im, int x, int y, int col);

ImageFill выполняет заливку, начиная с координат x, y (верхний левй угол - 0,0) цветом col изображения im.


ImageFilledPolygon

ImageFilledPolygon -- нарисовать закрашенный многоугольник
Описание
int imagefilledpolygon(int im, array points, int num_points, int col);

ImageFilledPolygon создает закрашенный многоугольник в изображении im. points - массив PHP содержит вершины многоугольника:

    
    points[0] = x0,
    points[1] = y0, points[2] = x1,
    points[3] = y1, etc.
num_points - общее число вершин.

ImageFilledRectangle

ImageFilledRectangle -- нарисовать закрашенный прямоугольник
Описание
int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col);

ImageFilledRectangle создает закрашенный прямоугольник цвета col в изображении im, начиная с координат верхнего левого угла x1, y1, и заканчивая в правом нижнем - x2, y2. 0, 0 - левый верхний угол изображения.


ImageFillToBorder

ImageFillToBorder -- заливка до указанного цвета
Описание
int imagefilltoborder(int im, int x, int y, int border, int col);

ImageFillToBorder выполняет заливку до границы, определенной цветом в border. Начальная точка заливки - x,y (верхний левый угол - 0,0) и облласть заливается цветом col.


ImageFontHeight

ImageFontHeight -- узнать высоту шрифта
Описание
int imagefontheight(int font);

Возвращает высоту шрифта font в пикселах.

Смотри также imagefontwidth() и imageloadfont().


ImageFontWidth

ImageFontWidth -- узнать ширину шрифта
Описание
int imagefontwidth(int font);

Возвращает ширину символа шрифта font в пикселах.

Смотри также imagefontheight() и imageloadfont().


ImageGif

ImageGif -- вывести изображение на браузер или в файл
Описание
int imagegif(int im, string filename);

ImageGif создает GIF файл с именем filename из изображения im. Аргумент im возвращается функцией imagecreate().

Формат изображения будет соответствовать спецификации GIF87a, если изображение не было сделано прозрачным функцией imagecolortransparent(), в этом случае формат будет соответствовать GIF89a.

Аргумент filename опционален, и если он отсутствует, строки изображения будут выводиться непосредственно на брайзер потоком. Указав тип изображения image/gif в функции header, вы можете создавать PHP скрипты, которые будут выводить GIF на браузер.


ImageInterlace

ImageInterlace -- включение/выключение чередования (interlace)
Описание
int imageinterlace(int im, int [interlace]);

ImageInterlace() переключает бит чередования. Если interlace равен 1, изображение im будет выводиться поэтапно, и если interlace равно 0, чередование выключено.

Возвращается текущее состояние бита чередования для изображения.


ImageLine

ImageLine -- нарисовать линию
Описание
int imageline(int im, int x1, int y1, int x2, int y2, int col);

ImageLine рисует линию от x1,y1 до x2,y2 (левй верхний точка - 0,0) в изображении im цветом col.

Смотри также imagecreate() и imagecolorallocate().


ImageLoadFont

ImageLoadFont -- загрузить новый шрифт
Описание
int imageloadfont(string file);

ImageLoadFont загружает пользовательский растровый шрифт и возвращает идентификатор шрифта (который всегда больше 5, тобы не вызвать конфликта со встроенными шрифтами).

Файл шрифта - двоичный и архиетктурно зависимый. Это значит, что Вам следует генерировать файл шрифта на том процессоре (архитектуре), на котором Вы будете запускать PHP.

 

Таблица 1. Формат файла шрифта
позиция байта тип данных C Описание
байты 0-3 int число символов в шрифте
байты 4-7 int значение первого символа в шрифте (часто 32 для пробела)
байты 8-11 int ширина символов в пикселах
байты 12-15 int высота символов в пикселах
байты 16- char массив с данными на символы, один байт на пиксел, для каждого символа - nchars*width*height.

Смотри также ImageFontWidth() и ImageFontHeight().


ImagePolygon

ImagePolygon -- нарисовать многоугольник
Описание
int imagepolygon(int im, array points, int num_points, int col);

ImagePolygon создает многоугольник в изображении im. points - массив PHP, содержащий вершины многоугольника, т.е points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points - общее число вершин.

Смотри также imagecreate().


ImageRectangle

ImageRectangle -- нарисовать прямоугольник
Описание
int imagerectangle(int im, int x1, int y1, int x2, int y2, int col);

ImageRectangle создает прямоугольник цветом col в изображении im, начиния с левой верхней координаты x1,y1 и заканчивая нижней правой x2,y2. 0,0 - левй верхний угол изображения.


ImageSetPixel

ImageSetPixel -- установить один пиксел
Описание
int imagesetpixel(int im, int x, int y, int col);

ImageSetPixel рисует пиксел x,y (верхний левый - 0,0) в изображении im цветом col.

Смотри также imagecreate() и imagecolorallocate().


ImageString

ImageString -- нарисовать строку горизонтально
Описание
int imagestring(int im, int font, int x, int y, string s, int col);

ImageString рисует строку s в изображении im по координатам x,y (верхний левый - 0,0) цветом col. Если font равен 1, 2, 3, 4 или 5, используются встроенные шрифты.

Смотри также imageloadfont().


ImageStringUp

ImageStringUp -- нарисовать строку вертикально
Описание
int imagestringup(int im, int font, int x, int y, string s, int col);

ImageStringUp рисует строку s вертикально в изображении im по координатам x,y (верхний левый - 0,0) цветом col. Если font равен 1, 2, 3, 4 или 5, используются встроенные шрифты.

Смотри также imageloadfont().


ImageSX

ImageSX -- get image width
Описание
int imagesx(int im);

ImageSX возвращает ширину изображения, определяемого im.

Смотри также imagecreate() и imagesy().


ImageSY

ImageSY -- узнать высоту изображения
Описание
int imagesy(int im);

ImageSY возвращает высоту изображения, определяемого im.

Смотри также imagecreate() и imagesx().


ImageTTFBBox

ImageTTFBBox -- установить границы области для текста, где используются шрифты TypeType
Описание
array ImageTTFBBox(int size, int angle, string fontfile, string text);

Функция рассчитывает и возвращает границы области (в пикселах) для текста с шрифтами TrueType.

 

text

Измеряемая строка.

size

Размер шрифта.

fontfile

Имя файла TrueType шрифта. (Может быть и URL.)

angle

Угол в градусах, под которым наклонен измеряемый text.

ImageTTFBBox() возвращает массив из 8-и элементов, представляющих четыре точки границы области текста:
0 нижний левый угол, позиция X
1 нижний левый угол, позиция Y
2 нижний правый угол, позиция X
3 нижний правый угол, позиция Y
4 верхний правый угол, позиция X
5 верхний правый угол, позиция Y
6 верхний левый угол, позиция X
7 верхний левый угол, позиция Y

Точки относятся к text безотносительно к углу, т.е "верхний левый" означает верхний левый угол текста при его горизонтальном расположении.

Функция требует две библиотеки: GD и Freetype.

Смотри также ImageTTFText().


ImageTTFText

ImageTTFText -- впсать текст в изображение, используя TrueType шрифт
Описание
array ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text);

ImageTTFText рисует строку text в изображении, идентифицируемом im, начиная с координат x,y (верхняя левая - 0,0), под углом angle цветом col, используя файл TrueType шрифта, указанный в fontfile.

Координаты, указанные в x, y определяют базовую точку символа (приблизительно нижний левый угол). Это отличается от ImageString(), где x,y определяют верхний правый угол первого символа.

angle в градусах, 0 означает написание текста с лава на право (в направлении на 3 часа), более высокие значения - поворот против часовой стрелки (т.е. 90 - написание текста с низу вверх).

fontfile - путь к файлу шрифта TrueType, который планируется использовать.

text - строка текста, которая может включать символы UTF-8 (в форма: &#123; ) для доступа к сиволам за пределами первых 255.

col индекс цвета. Использование отрицания индекса цвета имеет эффект включения антиалиасинга.

ImageTTFText() возвращает массив из 8 элементов, представляющих четыре точки границы области вывода текста. Порядок точек: вепхняя левая, верхняя правая, нижняя правая, нижняя левая. ТОчки относятся к тексту без учета угла, т.е. "верхняя левая" означает верхний левый угол горизонтально расположенного текста.

Скрипт этого примера создает черный GIF 400x30 пикселей, со словом "Testing...", написанным шрифтом Arial.

Пример 1. ImageTTFText
<?php
Header("Content-type: image/gif");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Testing... Omega: &#937;");
ImageGif($im);
ImageDestroy($im);
?>

Эта функция требует обе библиотеки: GD и FreeType<.

Смотри также ImageTTFBBox().


ImageColorAt

ImageColorAt -- узнать индекс цвета пиксела
Описание
int imagecolorat(int im, int x, int y);

Returns the index of the color of the pixel at the specified location in the image.

Смотри также imagecolorset() и imagecolorsforindex().


ImageColorClosest

ImageColorClosest -- узнать индекс цвета, ближайшего заданному
Описание
int imagecolorclosest(int im, int red, int green, int blue);

Возвращает индекс цвета в палитре изображения, который "ближе всего" к указанному набору RGB.

"Дистанция" между желанным цветом и каждым цветом в палитре определяется так, как будто значения RGB определяют точки в трехмерном пространстве.

Смотри также imagecolorexact().


ImageColorExact

ImageColorExact -- узнать индекс указанного цвета
Описание
int imagecolorexact(int im, int red, int green, int blue);

Возвращает индекс указанного цвета в палитре изображения.

Если цвет в палитре изображения не присутствует, возвращается -1.

Смотри также imagecolorclosest().


ImageColorResolve

ImageColorResolve -- узнать индекс указанного цвета или его ближайшую возможную альтернативу
Описание
int imagecolorresolve(int im, int red, int green, int blue);

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

Смотри также imagecolorclosest().


ImageColorSet

ImageColorSet -- установить цвет для указанного индекса в палитре
Описание
bool imagecolorset(int im, int index, int red, int green, int blue);

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

Смотри также imagecolorat().


ImageColorsForIndex

ImageColorsForIndex -- узнать цвет по индексу
Описание
array imagecolorsforindex(int im, int index);

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

Смотри также imagecolorat() и imagecolorexact().


ImageColorsTotal

ImageColorsTotal -- количество цветов в палитре изображения
Описание
int imagecolorstotal(int im);

Возвращает количество цветов в указанной палитре.

Смотри также imagecolorat() и imagecolorsforindex().


Функции IMAP

Для того, чтобы эти функции заработали вц должны скомпилировать PHP с флагом --with-imap. Этот флаг требут, чтобы была установлена библиотека c-client. Последнюю версию можно получить по адресу ftp://ftp.cac.washington.edu/imap/. Затем скопируйте c-client/c-client.a в /usr/local/lib или какую либо другую директорию, прописанную в пути, затем скопируйте c-client/rfc822.h, mail.h и linkage.h в /usr/local/include или другую директорию с include-файлами.


imap_append

imap_append -- Добавляет текстовое сообщение в указанный почтовый ящик

Описание
int imap_append(int imap_stream, string mbox, string message, stringflags);

Возвращает true в случае успеха или false иначе.

imap_append() добавляет текстовое сообщение в указанный почтовый ящик mbox. Если указаны необязательные флаги, также записывает в почтовый ящик и флаги.

При общении с сервером Cyrus IMAP нужно использовать в качестве ограничителей строки "\r\n" вместо "\n", иначе действие не выполнится.


imap_base64

imap_base64 -- Декодирует текст, закодированный с помощью BASE64

Описание
string imap_base64(string text);

Функция imap_base64() декодирует текст в формате BASE-64. Декодированное сообщение возвращается как строка.


imap_body

imap_body -- Читает тело сообщения

Описание
string imap_body(int imap_stream, int msg_number, int flags);

Функция imap_body() возвращает тело сообщения, имеющего номер п/п msg_number в текущем почтовом ящике. Необязательные флаги это битовые маски из

FT_UID - Номер сообщения msgno является UID'ом сообщения
FT_PEEK - Не устанавливать флаг \Seen если он еще не установлен.
FT_INTERNAL - Возвращаемая строка записана во внутреннем формате и не может быть приведена к канонической форме с CRLF.


imap_check

imap_check -- Проверяет текущий почтовый ящик

Описание
array imap_check(int imap_stream);

Возвращает информацию о текущем почтовом ящике. В случае неуспеха возвращает FALSE.

Функция imap_check() проверяет статус текущего почтового ящика на сервере и возвращает информацию в объекте со следующими свойствами.

Date : дата сообщения
Driver : драйвер
Mailbox : название почтового ящика
Nmsgs : количество сообщений
Recent : количество недавно пришедших сообщений


imap_close

imap_close -- Закрывает поток IMAP

Описание
int imap_close(int imap_stream, int flags);

Закрывает поток imap. Необязательный флаг CL_EXPUNGE заставляет стереть помеченные на удаление сообщения при закрытии.


imap_createmailbox

imap_createmailbox -- Создает новый почтовый ящик.

Описание
int imap_createmailbox(int imap_stream, string mbox);

imap_createmailbox() создает новый почтовый ящик указанный в mbox. Возвращает true в случае успеха и false при ошибке.


imap_delete

imap_delete -- Помечает сообщение из текущего почтового ящика на удаление

Описание
int imap_delete(int imap_stream, int msg_number);

Возвращает true.
Функция imap_delete() помечает сообщение, указанное через msg_number на удаление. Настоящее удаление сообщений осуществляется функцией imap_expunge().


imap_deletemailbox

imap_deletemailbox -- Удаляет почтовый ящик

Описание
int imap_deletemailbox(int imap_stream, string mbox);

imap_deletemailbox() удаляет указанный почтовый ящик. Возвращает true в случае успеха и false иначе.


imap_expunge

imap_expunge -- Удаляет все сообщения, помеченные на удаление

Описание
int imap_expunge(int imap_stream);

imap_expunge() удаляет все сообщения помеченные на удаление с помощью imap_delete(). Возвращает true.


imap_fetchbody

imap_fetchbody -- Извлекает простую секцию тела сообщения

Описание
string imap_fetchbody(int imap_stream, int msg_number, int part_number, flags flags);

Эта функция заставляет извлечь подробную секцию указанного сообщения как текстовую строку. Секция - это строка целых чисел, разделенных точками, которые указывают на части тела сообщения в списке частей согласно спецификации IMAP4. Части тела не декодируются этой функцией. Необязательным параметром к imap_fetchbody () является битовая маска из


imap_fetchstructure

imap_fetchstructure -- Читает структуру простого сообщения

Описание
array imap_fetchstructure(int imap_stream, int msg_number);

Эта функция заставляет извлечь всю информацию о структуре сообщения с номером msg_number. Возвращаемая величина является объектом со следующими элементами.
type encoding ifsubtype subtype ifdescription description ifid id lines bytes ifparameters
тип кодировка подтип интерфейса подтип описание интерфейса описание идентификатор интерфейса идентификатор строки байты параметры интерфейса

Также функция возвращает массив объектов под названием parameters[]. Этот объект имеет следующие свойства.
attribute value
атрибут величина

В случае сообщения из нескольих частей, функция также возвращает массив объектов всех свойств под название parts[].


imap_header

imap_header -- Читает заголовок сообщения

Описание
object imap_header(int imap_stream, int msg_number, 
int fromlength, int subjectlength, int defaulthost);

Эта функция возвращает объект различных элементов заголовка

       remail,date,Date,subject,Subject,in_reply_to,message_id,newsgroups,
       followup_to,references

toaddress (полная строка To: строка длиной до 1024 символов)

to[] (возвращает массив объектов из строки To, содержит:)
   personal
   adl
   mailbox
   host

fromaddress (полная строка From: строка длиной до 1024 символов)

from[] (возвращает массив объектов из строки From, содержит:)
   personal
   adl
   mailbox
   host

ccaddress (полная строка  Cc: строка длиной до 1024 символов)
cc[] (возвращает массив объектов из строки Cc, содержит:)
   personal
   adl
   mailbox
   host

bccaddress (полная строка Bcc: строка длиной до 1024 символов)
bcc[] (возвращает массив объектов из строки Bcc, содержит:)
   personal
   adl
   mailbox
   host

reply_toaddress (полная строка Reply_to: строка длиной до 1024 символов)
reply_to[] (возвращает массив объектов из строки Reply_to, содержит:)
   personal
   adl
   mailbox
   host

senderaddress (полная строка Sender: строка длиной до 1024 символов)
sender[] (возвращает массив объектов из строки Sender, содержит:)
   personal
   adl
   mailbox
   host

return_path (полная строка Return-path: строка длиной до 1024 символов)
return_path[] (возвращает массив объектов из строки Return_path, содержит:)
   personal
   adl
   mailbox
   host

udate ( дата сообщения в формате времени unix)

fetchfrom (строка From, отформатированная до fromlength символов)
fetchsubject (строка Subject, отформатированная до subjectlength символов)

imap_headers

imap_headers -- Возвращает заголовки всех сообщений в почтовом ящике

Описание
array imap_headers(int imap_stream);

Возвращает строковый массив из информации по заголокам. Один элемент массива на сообщение.


imap_listmailbox

imap_listmailbox -- Читает список почтовых ящиков

Описание
array imap_listmailbox(int imap_stream, string ref, string pat);

Возвращает массив, содержащий названия почтовых ящиков.


imap_listsubscribed

imap_listsubscribed -- Перечисляет все подписанные ящики

Описание
array imap_listsubscribed(int imap_stream, string ref, string pattern);

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


imap_mail_copy

imap_mail_copy -- Копирует указанные сообщения в почтовый ящик

Описание
int imap_mail_copy(int imap_stream, string msglist, string mbox, int flags);

Возвращает true в случае успеха и false иначе. Копирует почтовые сообщения указанные с помощью msglist в почтовый ящик mbox. msglist - это диапазон, а не просто номера сообщений.

флаги - это битовые маски из


imap_mail_move

imap_mail_move -- Переносит указанные сообщения в почтовый ящик

Описание
int imap_mail_move(int imap_stream, string msglist, string mbox);

Переносит почтовые сообщения указанные с помощью msglist в почтовый ящик mbox. msglist - это диапазон, а не просто номера сообщений. Возвращает true в случае успеха и false иначе.


imap_num_msg

imap_num_msg -- Выдает количество сообщений в текущем почтовом ящике

Описание
int imap_num_msg(void);

Возвращает количество сообщений в текущем почтовом ящике.


imap_num_recent

imap_num_recent -- Возвращает количество недавно пришедших сообщений в текущем почтовом ящике

Описание
int imap_num_recent(int imap_stream);

Возвращает количество недавно пришедших сообщений в текущем почтовом ящике.


imap_open

imap_open -- Открывает поток IMAP в почтовый ящик

Описание
int imap_open(string mailbox, string username, string password, int flags);

В случае успеха возвращает поток IMAP или false иначе. Эта функция может быть использована для открытия потоков к POP3 и NNTP серверам. Для того, чтобы присоединиться к серверу IMAP на 143-й порт на локальной машине сделайте следующее:

$mbox = imap_open("{localhost:143}INBOX","user_id","password");

Для того, чтобы подсоединиться к POP3-серверу на 110-й порт на локальном сервере используйте:

$mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password");

Для того, чтобы подсоединиться к NNTP-серверу на 119-й порт на локальном сервере используйте:

$nntp = imap_open("{localhost/nntp:119}comp.test","","");

Для того, чтобы подсоединиться к удаленному серверу замените "localhost" на имя или IP-адрес сервера к которому Вы хотите подсоединиться.

Опции - битовая маска из


imap_ping

imap_ping -- Проверяет поток IMAP на работоспособность

Описание
int imap_ping(int imap_stream);

Возвращает true если поток еще работоспособен и false иначе. Функция imap_ping() проверяет поток на работоспособность. Он может также проверять новую почту; это предпочтительный метод для периодической проверки новой почты и "живучести" удаленных серверов.


imap_renamemailbox

imap_renamemailbox -- Переименовывает старый почтовый ящик в новый

Описание
int imap_renamemailbox(int imap_stream, string old_mbox, string new_mbox);

Эта функция переименовывает старый почтовый ящик в новый. Возвращает true в случае успеха и false иначе.


imap_reopen

imap_reopen -- Заново открывает поток IMAP на новый почтовый ящик

Описание
int imap_reopen(string imap_stream, string mailbox, string [flags]);

Возвращает true в случае успеха и false иначе. Эта функция заново открывает указанный поток на новый ящик.

Опции - битовая маска из


imap_subscribe

imap_subscribe -- Подписывает на почтовый ящик

Описание
int imap_subscribe(int imap_stream, string mbox);

Подписывает на новый почтовый ящик. Возвращает true в случае успеха и false иначе.


imap_undelete

imap_undelete -- Снимает отметку с сообщения помеченного на удаление

Описание
int imap_undelete(int imap_stream, int msg_number);

Эта функция cнимает отметку с сообщения помеченного на удаление функцией imap_delete(). Возвращает true в случае успеха и false иначе.


imap_unsubscribe

imap_unsubscribe -- Снимает подписку с почтового ящика

Описание
int imap_unsubscribe(int imap_stream, string mbox);

Снимает подписку с почтового ящика. Возвращает true в случае успеха и false иначе.


imap_qprint

imap_qprint -- Конвертирует строку формата quoted-printable в 8-битовую строку

Описание
string imap_qprint(string string);

Конвертирует строку формата quoted-printable в 8-битовую строку. Возвращает 8-битовую (бинарную) строку


imap_8bit

imap_8bit -- Конвертирует 8-битовую строку в формат quoted-printable

Описание
string imap_8bit(string string);

Конвертирует 8-битовую строку в формат quoted-printable. Возвращает строку в формате quoted-printable.


imap_binary

imap_binary -- Конвертирует 8-битную строку в формат base64

Описание
string imap_binary(string string);

Конвертирует 8-битную строку в формат base64. Возвращает строку в формате base64.

imap_scanmailbox

imap_scanmailbox -- Читает список почтовых ящиков, проводит поиск в названиях ящиков

Описание
array imap_scanmailbox(int imap_stream, string string);

Возвращает массив, содержащий имена почтовых ящиков, которые имеют строку string в названии.


imap_mailboxmsginfo

imap_mailboxmsginfo -- Получает информацию о текущем почтовом ящике

Описание
array imap_mailboxmsginfo(int imap_stream);

Возвращает информацию о текущем почтовом ящике. FALSE в случае неудачи. Функция imap_mailboxmsginfo() проверяет статус текущего почтового ящика на сервере и возвращает информацию в объекте со следующими свойствами:


imap_rfc822_write_address

imap_rfc822_write_address -- Возвращает правильно отформатированный email адрес

Описание
string imap_rfc822_write_address(string mailbox, string host, string personal);

Возвращает правильно отформатированный email адрес по данному почтовому ящику, хосту и персональной информации.


imap_rfc822_parse_adrlist

imap_rfc822_parse_adrlist -- Проводит разбор адресной строки

Описание
string imap_rfc822_parse_adrlist(string address, string default_host);

Эта функция разбирает адресную строку и для каждого адреса возвращает массив объектов. Есть 4 типа объектов:

imap_setflag_full

imap_setflag_full -- Устанавливает флаги на сообщения

Описание
string imap_setflag_full(int stream, string sequence, string flag, string options);

Эта функция застваляет добавить указанный флаг к набору флагов сообщения в указанной последовательности.

options - это битовая маска из


imap_clearflag_full

imap_clearflag_full -- Очищает флаги сообщения

Описание
string imap_clearflag_full(int stream, string sequence, string flag, string options);

Эта функция заставляет удалить флаги из набора флагов сообщения в указанной последовательности.

options - это битовая маска из


imap_sort

imap_sort -- Сортирует сообщения в текущем почтовом ящике

Описание
string imap_sort(int stream, int criteria, int reverse, int options);

Возвращает массив номеров сообщений рассортированных по данному параметру. Rev должен быть равен 1 если нужна сортировка в обратном порядке. Критерии сортировки (должен быть указан только один):

                SORTDATE        по дате сообщения
                SORTARRIVAL     по дате поступления
                SORTFROM        по полю From
                SORTSUBJECT     по теме сообщения
                SORTTO          по полю To
                SORTCC          по полю cc
                SORTSIZE        по размеру
опции - битовая маска из

imap_fetchheader

imap_fetchheader -- Возвращает заголовок сообщения

Описание
stringimap_fetchheader(int imap_stream, int msgno, int flags);

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

Опиции:


imap_uid

imap_uid -- Эта функция возвращает UID по данному номеру сообщения в последовательности

Описание
string imap_uid(string mailbox, int msgno);

Эта функция возвращает UID по данному номеру сообщения в последовательности.


PHP опции и информация

error_log

error_log -- отослать сообщение об ошибке
Описание
int error_log(string message, int message_type, string [ destination ], string [ extra_headers ]);
Посылает сообщение об ошибке в web сервер лог,  TCP порт или в файл. Первый параметр, message, определяет сообщение об ошибке, которое должно быть отослано. Второй параметр, message_type, определяет способ передачи сообщения:
Таблица 1. error_log() лог типы
 
0 message посылается в системный лог PHP, используя механизм системного логирования Операционной Системы или в файл, в зависимости от того, как определена конфигурация error_log директивы. 
1 message посылается по электронной почте, адрес определен в destination параметре. Только для этого типа сообщений используется параметр extra_headers. Этот тип использует ту же внутреннюю функцию, что и Mail()
2 message отсылается через соединение PHP отладки. Эта опция доступна только тогда, когда установлена remote debugging has been enabled. В этом случае параметр destination определяет имя машины или IP адрес и опционально, номер порта, сокета получающего отладочную информацию. 
3 message добавляется к файлу, определенному в destination

Пример 1. примеры error_log() 
// Послать сообщение в системный лог, если не получено соединение с базой данных
if (!Ora_Logon($username, $password)) {
    error_log("Oracle database not available!", 0);
}

// Информировать администратора по почте об ошибке выделения FOO
if (!($foo = allocate_new_foo()) {
    error_log("Big trouble, we're all out of FOOs!", 1,
              "operator@mydomain.com");
}

// другие способы вызова error_log():
error_log("You messed up!", 2, "127.0.0.1:7000");
error_log("You messed up!", 2, "loghost");
error_log("You messed up!", 3, "/var/tmp/my-errors.log");

error_reporting

error_reporting -- устанавливает уровень сообщений об ошибках PHP
Описание
int error_reporting(int [ level ]);
Устанавливает уровень сообщений об ошибках PHP и возвращает старый уровень. Уровень сообщений об ошибках задается битовой маской и использует следующие значения (используйте линки для получения информации об их назначении):
Таблица 1. error_reporting() битовые значения
 
значение внутреннее имя
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING

getenv

getenv -- Получить значение переменной среды окружения.
Описание
string getenv(string varname);
Возвращает значение переменной среды окружения varname, или false(ложь) в случае ошибки.
$ip = getenv("REMOTE_ADDR"); // получить ip номер пользователя

get_cfg_var

get_cfg_var -- Получить значение опции конфигурации PHP.
Описание
string get_cfg_var(string varname);
Возвращает текущее значение опции конфигурации PHP, заданной в varname, или false(ложь), если произошла ошибка.

Не возвращает информацию конфигурации, установленную при компиляции PHP, или прочитанную из файла конфигурации Apache (использование php3_configuration_option директив).

Что бы проверить, использует ли система php3.ini файл, попробуйте получить значение cfg_file_path. Если оно установлено, то php3.ini файл используется.


get_current_user

get_current_user -- Получить имя владельца текущего PHP скрипта.
Описание
string get_current_user(void);
Возвращает имя владельца текущего PHP скрипта.

См. также getmyuid(), getmypid(), getmyinode(), и getlastmod().


get_magic_quotes_gpc

get_magic_quotes_gpc -- Получить текущие активные установки magic_quotes_gpc.
Описание
long get_magic_quotes_gpc(void);
Возвращает текущие активные установки magic_quotes_gpc. (0 для выключенных(off), 1 для включенных(on))

См. также get_magic_quotes_runtime(), set_magic_quotes_runtime().


get_magic_quotes_runtime

get_magic_quotes_runtime -- Получить текущие активные установки magic_quotes_runtime.
Описание
long get_magic_quotes_runtime(void);
Возвращает текущие активные установки magic_quotes_runtime. (0 для выключенных(off), 1 для включенных(on))

См. также get_magic_quotes_gpc(), set_magic_quotes_runtime().


getlastmod

getlastmod -- Получить время последней модификации страницы.
Описание
int getlastmod(void);
Возвращает время последней модификации текущей страницы. Возвращаемое значение - Unix timestamp, подходящее для использование в функции date(). Возвращает false(ложь) при ошибке.
Пример 1. getlastmod() пример
// выводит что-то вроде этого 'Последнее изменение: March 04 1998 20:43:59.'
echo "Последнее изменение: ".date( "F d Y H:i:s.", getlastmod() );
      

См. также date(), getmyuid(), get_current_user(), getmyinode(), и getmypid().


getmyinode

getmyinode -- Получить inode текущего скрипта.
Описание
int getmyinode(void);
Возвращает inode текущего скрипта, или false(ложь) при ошибке.

См. также getmyuid(), get_current_user(), getmypid(), и getlastmod().


getmypid

getmypid -- Получить ID процесса PHP.
Описание
int getmypid(void);
Возвращает текущий ID процесса PHP, или false(ложь) при ошибке.

Обратите внимание, что при работе PHP как модуля сервера, вы не получите точный IP процесса.

См. также getmyuid(), get_current_user(), getmyinode(), и getlastmod().


getmyuid

getmyuid -- Получить UID владельца скрипта PHP.
Описание
int getmyuid(void);
Возвращает UID текущего скрипта, или false(ложь) при ошибке.

См. также getmypid(), get_current_user(), getmyinode(), и getlastmod().


phpinfo

phpinfo -- Вывод большого количества информации о PHP.
Описание
int phpinfo(void);
Вывод большого количества информации о текущем состоянии PHP. Это включает информацию относительно опций компиляции и расширений PHP, версию PHP, информации сервера и среды окружения (если скомпилировано как модуль), среда окружения PHP, информация о версии операционной системы, пути, основных и локальных опций конфигурации, HTTP заголовок и GNU Public License.

См. также phpversion().


phpversion

phpversion -- Получить текущую версию PHP.
Описание
string phpversion(void);
Возвращает строку, содержащую версию запущенного в данный момент PHP.
Пример 1. phpversion() пример
// Печатает что-то вроде этого 'Текущая версия PHP: 3.0rel-dev'
echo "Текущая версия PHP: ".phpversion();
      

См. также phpinfo().


putenv

putenv -- Устанавливает значение переменной среды окружения.
Описание
void putenv(string setting);
Добавляет setting в среду окружения.
Пример 1. Устанавливает значение переменной среды окружения
putenv("UNIQID=$uniqid");
      

set_magic_quotes_runtime

set_magic_quotes_runtime -- Устанавливает в текущих активных установках конфигурации установки для magic_quotes_runtime.
Описание
long get_magic_quotes_runtime(int new_setting);
Устанавливает в текущих активных установках конфигурации установки для magic_quotes_runtime. (0 для выключенных(off), 1 для включенных(on))

См. также get_magic_quotes_gpc(), get_magic_quotes_runtime().


set_time_limit

set_time_limit -- Установка лимита на максимальное время работы скрипта
Описание
void set_time_limit(int seconds);
Устанавливает длительность в секундах, во время которого скрипт должен быть выполнен. Если период превышен, то скрипт возвращает фатальную ошибку. По умолчанию лимит составляет 30 секунд или, если этот параметр установлен, значение max_execution_time в php3.ini. Если значение установлено в ноль(0), то лимит выключен.

При вызове, set_time_limit() перезапускает счетчик времени исполнения с нуля. Другими словами, если установлен лимит по умолчанию 30 секунд, и прошло 25 секунд со времени запуска, то после вызова set_time_limit( 20 ) общее время будет составлять 45 секунд после с начала запуска скрипта.


Функции работы с Informix

Драйверы Informix для Online (ODS) 7.x, SE 7.x и Universal Server (IUS) 9.x выполнены в "functions/ifx.ec" и "functions/php3_ifx.h". В данный момент написание поддержки ODS 7.2 в известной степени завершено, с полной поддержкой BLOB. Поддержка IUS 9.1 завершена частично: новые типы данных уже есть, но поддержка SLOBS все еще в стадии разработки.

Замечания по конфигурации:

Перед тем, как вы запустите скрипт "configure", убедитесь, что переменная "INFORMIXDIR" установлена.

Конфигурационный скрипт автоопределяет библиотеки и включаемые (include) директории, если вы запустите "configure --with_informix=yes". Вы можете переопределить эти директории, специфицировав переменные окружения "IFX_LIBDIR", "IFX_LIBS" и "IFX_INCDIR". Скрипт также патается автоопределить версию сервера Informix. Он установит переменную условного завершения "HAVE_IFX_IUS", если у вас Informix версии >= 9.00.

Несколько замечаний по использованию BLOB:

Текущая версия (18 Сентября 1998) полностью поддерживает select/insert/update для BLOB.

BLOBы в общем случае адрексуются целочисленными идентификаторами BLOB. Запрос Select возвращает "blob id" для каждой колонки BYTE и TEXT. Вы можете получить содержание путем "string_var = ifx_get_blob($blob_id);" если была выбрана передача BLOBов в память ("ifx_blobinfile(0);"). Если вы предпочитаете получать содержимое колонки BLOB в файл, используйте "ifx_blobinfile(1);", и "ifx_get_blob($blob_id);" возвратит вам имя файла. Для получения содержания используйте стандартные операции файлового ввода/вывода

Для запросов insert/update вам неоходимо создать "blob id's" своими силами, используя "ifx_create_blob(..);". Затем включите идентификатор BLOB в массив и замените колонку BLOB знаком вопроса (?) в строке запроса. Для updates/inserts вы определяете содержание BLOB, используя ifx_update_blob(...).

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

 

конфигурационная переменная : ifx.textasvarchar

конфигурационная переменная : ifx.byteasvarchar

 

функция времени выполнения :

ifx_textasvarchar(0) : использовать идентификатор BLOB для запросов select для колонок TEXT.

ifx_byteasvarchar(0) : использовать идентификатор BLOB для запросов select для колонок BYTE.

ifx_textasvarchar(1) : возвращать колонку TEXT так, как будто это VARCHAR, без использования идентификатора BLOB для запросов select.

ifx_byteasvarchar(1) : возвращать колонку BYTE так, как будто это VARCHAR, без использования идентификатора BLOB для запросов select.

 

Конфигурационная переменная : ifx.blobinfile

функция времени выполнения :

ifx_blobinfile_mode(0) : возвращать колонку BYTE в память, идентификатор BLOB позволяет получить содержание.

ifx_blobinfile_mode(1) : возвращать колонку BBYTE в файл, по идентификатору BLOB - имя файла

Если вы устанавливаете ifx_text/byteasvarchar в 1, то можете использовать колонки TEXT и BYTE в запросах select как обычные (но довольно длинные) поля VARCHAR. С тех пор, как все строки в PHP3 "счетные", это напоминает "бинарную безопасность". Возвращаемые данные могут содержать все, что угодно, вы отвечаете за содержимое.

Если вы устанавливаете ifx_blobinfile в 1, используйте имя файла, возвращаемое ifx_get_blob(..) для получения бинарного содержания. Заметим, что в этом случае ВЫ ОТВЕТСТВЕННЫ ЗА УДАЛЕНИЕ ВРЕМЕННЫХ ФАЙЛОВ, СОЗДАННЫХ INFORMIX при выборке ряда. Каждый новый выбранный ряд создает новые временные файлы для каждой колонки типа BYTE.

Местоположение временных файлов указывается в переменной окружения "blobdir", по умолчанию - "." (текущая директория). Что-то вроде putenv(blobdir="tmpblob"); облегчит удаление случайно оставленных временных файлов (имена всех таких файлов начинаются с "blb").

Автоудаление пробелов для данных "char" (SQLCHAR и SQLNCHAR):

Может быть устанвлено в конфигурационной переменной :

ifx.charasvarchar : если установлена в 1 , то концевые пробелы будут удаляться автоматически.


ifx_connect

ifx_connect -- открытие соединения с сервером Informix
Описание

int ifx_connect(string [database], string [userid], string [password]);

 

При успешном завершении возвращает идентификатор соединения, при ошибке - false.

ifx_connect() устанавливает соединение к серверу Informix. Все аргументы опциональны и при их отсутствии берутся установки по умолчанию, из файла php3.ini: хост - ifx.default_host (если не определено, то библиотеки Informix используют переменную окружения $INFORMIXSERVER), пользователь - ifx.default_user, пароль - ifx.default_password (может быть не определен).

В случае повтороного вызова функции ifx_connect() с теми же параметрами, новое соединение установлено не будет, а возвратится идентификатор уже установленного соединения.pened link

Ссылка к серверу будет уничтожена, как только завершится выполнение скрипта, если только она не будет закрыта раньше вызовом ifx_close().

Смотри также ifx_pconnect(), и ifx_close().

Примет 1. Соединение с базой данных Informix

$conn_id = ifx_pconnect (mydb@ol_srv1, "imyself", "mypassword");


ifx_pconnect

ifx_pconnect -- открыть устойчивое соединение с Informix
Описание

int ifx_pconnect(string [database], string [userid], string [password]);

 

Возвращает идентификатор реальной устойчивой ссылки к Informix при успешном завершении и false при ошибке.

ifx_pconnect() работает очень похоже с ifx_connect(), но с двумя основными отличиями.

Эта функция ведет себя точно так же, как ifx_connect(), когда PHP не запкщено как модуль Апача. Во-первых, при соединении функция перво-наперво пытается найти устойчивую ссылку, которая была открыта ранее к тому же хосту с теми же параметрами (пользователь, пароль). Если поиски увенчались успехом, будет возвращен идентификатор ранее установленного соединения.

Во-вторых, соеденение с SQL-сервером не закроется по окончании выполнения скрипта. Вместо этого, ссылка останется открытой для дальнейшего использования (ifx_close() не закроет ссылку, установленную CLASS="FUNCTION">ifx_pconnect()).

Ссылкт такого типа обычно называют устойчивыми (persistent).

Смотри также: ifx_connect().


ifx_close

ifx_close -- закрыть соединение с Informix
Описание

int ifx_close(int [link_identifier]);

 

Всегда возвращает true

ifx_close() закрывает ссылку к базе данных Informix, которая ассоциируется со специальным идентификатором ссылки. Если идентификатор ссылки не указан, предполагается последнее установленное соединение.

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

ifx_close() не закрое устойчивое соединение, сгенерированное ifx_pconnect().

Смотри также: ifx_connect(), и ifx_pconnect().

Пример 1. закрытие соединения с Informix

$conn_id = ifx_connect (mydb@ol_srv, "itsme", "mypassword");
... несколько запросов и др. ...
ifx_close($conn_id);

ifx_query

ifx_query -- послать запрос Informix
Описание

int ifx_query(string query, int [link_identifier], int [cursor_type], mixed [blobidarray]);

 

Возвращает определенный идентификатор результата Informix при успешном выполнении и false при ошибке.

Целочисленный "result_id" используется другими функциями для выборки результата запроса. Устанавливайте "affected_rows" для выборки, используя функцию ifx_affected_rows().

ifx_query() посылает запрос к текущей активной базе данных на сервере, который указан в link_identifier. Если идентификатор ссылки не специфицирован, подразумевается последнее открытое соединение. Если до этого не было установлено никакое соединение, функция пытается установить ссылку (как при вызове функции ifx_connect()), и использовать ее.

Выполняется query на соединении conn_id. Для запросов типа Select курсор объявлен и открыт. опциональный параметр cursor_type позволяет вам сделать курсор "scroll" и/или "hold". Это маска и может принимать одно из значаний IFX_SCROLL, IFX_HOLD, или обы вместе. Не-select запросы "выполняются немедленно".

Для любого типа запроса количество (предполагаемое или действительное) обрабатываемых рыдов сохраняется для выборки в ifx_affected_rows().

Если у вас есть колонки BLOB (BYTE или TEXT) в запросе update, вы может добавить параметрblobidarray, содержащий соответствующие идентификаторы BLOB; тогда следует заменить эти колонки на знак вопроса (?) в тексте запроса.

Если содержание колонки TEXT/BYTE позволяет, то вы можете также использовать "ifx_textasvarchar(1)" и "ifx_byteasvarchar(1)". Это позволит вам обращаться с колонками TEXT/BYTE так же, как с обычными (но довольно длинными) колонками VARCHAR в запросах select, и нет необходимости морочиться с идентификаторами BLOB.

С ifx_textasvarchar(0) или ifx_byteasvarchar(0) (ситувация по умолчанию) запрос select возвратит колонки BLOB как идентификаторы BLOB (целые значения). Вы можете получитьзначения этих идентификаторов как стори или файлы путем использования специтальных функций для BLOB (см. ниже).

Смотри также: ifx_connect().

Пример 1. показ всех рядов таблицы "orders" как таблицы html

ifx_textasvarchar(1);      // использовать режим "text mode" для BLOBов
$res_id = ifx_query("select * from orders", $conn_id);
if (! $res_id) {
    printf("Can't select orders : %s\n<br>%s<br>\n",
        ifx_error();
        ifx_errormsg();
  die;
}
ifx_htmltbl_result($res_id, "border=\"1\");
ifx_free_result($res_id);

Пример 2. Вставка нескольких значений в таблицу "catalog"

                      // создание идентификаторов BLOB для колонок byte и text
$textid = ifx_create_blob(0, 0, "Text column in memory");
$byteid = ifx_create_blob(1, 0, "Byte column in memory");
                      // сохранение идентификаторов BLOB в масиве 
$blobidarray[] = $textid;
$blobidarray[] = $byteid;
                      // запуск запроса
$query = "insert into catalog (stock_num, manu_code, " .
         "cat_descr,cat_picture) values(1,'HRO',?,?)";
$res_id = ifx_query($query, $conn_id, $blobidarray);
if (! $res_id) {
  ... ошибка ...
}
                     // освобождение идентификатора результата
ifx_free_result($res_id);


ifx_prepare

ifx_prepare -- подготовка SQL-выражения к выполнению
Описание

int ifx_prepare(string query, int conn_id, int [cursor_def], mixed blobidarray);

 

Возвращает целое result_id для использования в ifx_do(). Устанавливает affected_rows для извлечения данных функцией ifx_affected_rows().

Подготавливает query на соединении conn_id. Для запросов типа Select курсор объявлен и открыт. опциональный параметр cursor_type позволяет вам сделать курсор "scroll" и/или "hold". Это маска и может принимать одно из значаний IFX_SCROLL, IFX_HOLD, или обы вместе. Не-select запросы "выполняются немедленно".

Для любого типа запроса количество (предполагаемое или действительное) обрабатываемых рыдов сохраняется для выборки в ifx_affected_rows().

Если у вас есть колонки BLOB (BYTE или TEXT) в запросе update, вы может добавить параметрblobidarray, содержащий соответствующие идентификаторы BLOB; тогда следует заменить эти колонки на знак вопроса (?) в тексте запроса.

Если содержание колонки TEXT/BYTE позволяет, то вы можете также использовать "ifx_textasvarchar(1)" и "ifx_byteasvarchar(1)". Это позволит вам обращаться с колонками TEXT/BYTE так же, как с обычными (но довольно длинными) колонками VARCHAR в запросах select, и нет необходимости морочиться с идентификаторами BLOB.

С ifx_textasvarchar(0) или ifx_byteasvarchar(0) (ситувация по умолчанию) запрос select возвратит колонки BLOB как идентификаторы BLOB (целые значения). Вы можете получитьзначения этих идентификаторов как стори или файлы путем использования специтальных функций для BLOB (см. ниже).

Смотри также: ifx_do().


ifx_do

ifx_do -- выполняет предварительно подготовленное SQL-выражение
Описание

int ifx_do(int result_id);

 

Возвращает true при успешном выполнении, false при ошибке.

Выполняет предварительно подготовленный запрос или открывает курсор для него.

НЕ освобождает result_id при ошибке.

ТАкже устанавливает реальное значение ifx_affected_rows() для не-select выражений для выборки данных в ifx_affected_rows().

Смотри также: ifx_prepare().


ifx_error

ifx_error -- возвратить код ошибки последнего вызова Informix
Описание

string ifx_error(void);

 

Коды оошибок The Informix (SQLSTATE & SQLCODE) имеют следующий фомат:

x [SQLSTATE = aa bbb SQLCODE=cccc]

где:

x = space : нет ошибок

E : ошибка

N : нет больше данных

W : предупреждене

? : неопределенность

Первый символ возвращет общий результата, SQLSTATE и SQLCODE описывают ошибку более детально. Обрабатывается последняя ошибка.

Просмотрите Руководство к Informix для получения описания SQLSTATE и SQLCODE.

Смотри также: ifx_errormsg()


ifx_errormsg

ifx_errormsg -- возвратить сообщение об ошибке последнего вызова Informix
Описание

string ifx_errormsg(int [errorcode]);

 

Возвращает сообщение об ошибке Informix, ассоциируещееся с последней ошибкой, или, если установлен опциональный параметр "errorcode", сообщение, соответствующее "errorcode".

Смотри также: ifx_error()

 

printf("%s\n<br>", ifx_errormsg(-201));

 


ifx_affected_rows

ifx_affected_rows -- получить число рядов, обработанных запросом
Описание

int ifx_affected_rows(int result_id);

 

result_id is a valid result id returned by ifx_query() или ifx_prepare().

Возвращает число рядов, обработанных запросом, ассоциорванным с result_id.

Для вставок, обновлений и удалений - это реальное количество (sqlerrd[2]) обработанных рядов. Для выборок - ожидаемое количество (sqlerrd[0]). Не полагайтесь на него.

Часто используется после ifx_prepare() для ограничения запроса до приемлимого уровня.

Смотри также: ifx_num_rows()

Пример 1. Обрабатываемые ряды Informix

$rid = ifx_prepare ("select * from emp where name like " . $name, $connid);
if (! $rid) {
    ... ошбка ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}


ifx_fetch_row

ifx_fetch_row -- получить ряд как перечислимый массив
Описание

array ifx_fetch_row(int result_id, mixed [position]);

 

Возвращает ассоциативный массив, соответсвующий выбранному ряду, или false, если нет больше рядов.

Колонки BLOB возвращаются как целые идентификторы BLOB для использоваиня в ifx_get_blob(), если только вы не используете ifx_textasvarchar(1) или ifx_byteasvarchar(1), в этом случае BLOBы возвратятся как строкоыве значения. При ошибке возвращается false.

result_id - это действительный идентификатор результата, возвращенный ifx_query() или ifx_prepare() (только для запросов типа select).

[position] - опциональный параметр для операций выборки только при подвижном курсоре (scroll cursor): "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" или номер. Если указан номер, выполняется "абсолютная" выборка ряда.

ifx_fetch_row() выбирает один ряд данных из результата, ассоциирующегося с указанным идентификатором результата. Ряд возвращается как массив. аждая колонка результата сохраняется в смещении массива, начиная со смещения 0.

Последующий вызов ifx_fetch_row() возвртит следующий ряд результата, или false, если нет больше рядов.

Пример 1. Выборка рядов Informix

$rid = ifx_prepare ("select * from emp where name like " . $name,
                     $connid, IFX_SCROLL);
if (! $rid) {
    ... ошибка ...
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}
if (! ifx_do ($rid)) {
   ... ошоибка ...
}
$row = ifx_fetch_row ($rid, "NEXT");
while (is_array($row)) {
    for(reset($row); $fieldname=key($row); next($row)) {
        $fieldvalue = $row[$fieldname];
        printf ("%s = %s,", $fieldname, $fieldvalue);
    }
    printf("\n<br>");
    $row = ifx_fetch_row ($rid, "NEXT");
}
ifx_free_result ($rid);


ifx_htmltbl_result

ifx_htmltbl_result -- форматировать все ряды запроса в таблицу HTML
Описание

int ifx_htmltbl_result(int result_id, string [html_table_options]);

 

Возвращает количество выбранных рядов или false по ощибке.

Форматирует все ряды запроса с идентификатором result_id в html-таблицу. Второй опциональный параметр - строка с тегами установок <table>

Пример 1. Результат Informix как таблица HTML

$rid = ifx_prepare ("select * from emp where name like " . $name,
                     $connid, IFX_SCROLL);
if (! $rid) {
   ... ошибка ...
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
    printf ("Too many rows in result set (%d)\n<br>", $rowcount);
    die ("Please restrict your query<br>\n");
}
if (! ifx_do($rid) {
  ... ошибка ...
}

ifx_htmltbl_result ($rid, "border=\"2\"");

ifx_free_result($rid);


ifx_fieldtypes

ifx_fieldtypes -- список полей Informix SQL
Описание

array ifx_fieldtypes(int result_id);

 

Возвращает асоциативный масив с именами полей как ключами и типами данных SQL как данными для запроса с result_id. При ошибке FALSE.

Пример 1. Имена полей и типы данных SQL

$types = ifx_fieldtypes ($resultid);
if (! isset ($types)) {
  ... ошибка ...
}
for ($i = 0; $i < count($types); $i++) {
    $fname = key($types);
    printf("%s :\t type =  %s\n", $fname, $types[$fname]);
    next($types);
}

ifx_fieldproperties -- список свойств полей SQL

Описание

array ifx_fieldproperties(int result_id);

 

Возвращает ассоциативный массив с именами полей как ключами и SQL свойствами полей как данными для запроса с result_id. При ошибке - FALSE.

Возвращает свойства полей Informix SQL для каждого поля в запросе как ассоциативный массив. Свойства расшифровываются как: "SQLTYPE;длина;точность;размер;ISNULLABLE" где SQLTYPE = тип Informix типа "SQLVCHAR" и т.п. и ISNULLABLE = "Y" или "N".

Пример 1. Сойства полей Informix SQL

$properties = ifx_fieldtypes ($resultid);
if (! isset($properties)) {
  ... ошибка ...
}
for ($i = 0; $i < count($properties); $i++) {
    $fname = key ($properties);
    printf ("%s:\t type =  %s\n", $fname, $properties[$fname]);
    next ($properties);
}


ifx_num_fields

ifx_num_fields -- возвратить число полей в запросе
Описание

int ifx_num_fields(int result_id);

 

Возвращает число колонок в запросе для result_id или FALSEпо ошибке.

После подготовки или выполнения запроса, этот вызов дает вам количество колонок в запросе.


ifx_num_rows

ifx_num_rows -- подсчет рядов, уже выбранных по запросу
Описание

int ifx_num_rows(int result_id);

 

Дает количество строк, выбранных до сих пор для запроса с result_id после ifx_query() или ifx_do().


ifx_free_result

ifx_free_result -- освободить ресурсы запроса
Описание

int ifx_free_result(int result_id);

 

Освобождает ресурсы, занятые запросом с идентификатором результата result_id. Возвращает FALSE при ошибке.


ifx_create_char

ifx_create_char -- создание симывольного объекта
Описание

int ifx_create_char(string param);

 

Создает символьный объект. param должен иметь символьное содердимое.


ifx_free_char

ifx_free_char -- удалить символьный объект
Описание

int ifx_free_char(int bid);

 

Удаляет символьны объеккт для аолученного идентификатора символьногго объекта bid. Возвращает FALSE при ошибке, в противном случае - TRUE.


ifx_update_char

ifx_update_char -- обновить содержимое символьного объекта
Описание

int ifx_update_char(int bid, string content);

 

Обновляет содержимое символьного объекта с идентификатором bid. content - строка с новыми данными. Возвращает FALSE при ошибке, в противном случае - TRUE.


ifx_get_char

ifx_get_char -- прочесть содержимое символьного объекта
Описание

int ifx_get_char(int bid);

 

Возвращает содержание символьного объекта с идентификатором bid.


ifx_create_blob

ifx_create_blob -- создать объект BLOB
Описание

int ifx_create_blob(int type, int mode, string param);

 

Создает объект BLOB

type: 1 = TEXT, 0 = BYTE

mode: 0 = BLOB-объект хранится в памяти 1 = BLOB-объект хранит содержимое в файле

param: если режим = 0: указатель на содержимое если режим = 1: указатель на файл-строку

Возвращает FALSE при ошибке, в противном случае - новый идентификатор BLOB-объекта.


ifx_copy_blob

ifx_copy_blob -- дублирование полученного объекта BLOB
Описание

int ifx_copy_blob(int bid);

 

Дублирует полученный BLOB-объект. bid - идентификатор дублируемого объекта

Возвращает FALSE при ошибке, в противном случае - новый идентификатор BLOB-объекта.


ifx_free_blob

ifx_free_blob -- удалить BLOB-объект
Описание

int ifx_free_blob(int bid);

 

Удаляет объект BLOB сидентификатором bid. Возвращает FALSE при ошибек и TRUE в противном случае.


ifx_get_blob

ifx_get_blob -- прочитать содержимое BLOB
Описание

int ifx_get_blob(int bid);

 

Возвращает содержимое объекта BLOB с идентификатором bid.


ifx_update_blob

ifx_update_blob -- обновить содержимое объекта BLOB
Описание

ifx_update_blob(int bid, string content);

 

Обновляет содержимое объекта BLOB c идентификатором bid. content - строка с новыми данными. Возвращает FALSE при ошибке и TRUE в противном случае.


ifx_blobinfile_mode

ifx_blobinfile_mode -- установка умолчаний для BLOB для всех запросов select
Описание

void ifx_blobinfile_mode(int mode);

 

Устанавливает для BLOB режимы по умолчанию для всех запросов select. Режим "0" означает сохранение Byte-BLOB в памяти, а режим "1" - сохранение в файл.


ifx_textasvarchar

ifx_textasvarchar -- установка умолчаний для текстового режима
Описание

void ifx_textasvarchar(int mode);

 

Устанавливает умолчания для текстового режима для всех запрососв типа select. Режим "0" - возвращается идентификатор BLOB, а при режиме "1" - возвратится varchar с текстовым содержанием.


ifx_byteasvarchar

ifx_byteasvarchar -- установка умолчаний для байтового режима
Описание

void ifx_byteasvarchar(int mode);

 

Устанавливает умолчани для байтового режима для всх запросов select. Режим "0" - возвращается идентификатор BLOB, а при режиме "1" - возвратится varchar с текстовым содержанием.


ifx_nullformat

ifx_nullformat -- установка возвращаеого по умолчанию значения при выборке ряда
Описание

void ifx_nullformat(int mode);

 

Устанавливает возвращаемое по умолчанию значение при выборке ряда для полей созначением NULL. При mode=0 вощвращается пустая строка, при mode=1 - NULL.


ifxus_create_slob

ifxus_create_slob -- создать объект slob и открыть его
Описание

int ifxus_create_slob(int mode);

 

Создает slob-объект и открывает его. Режимы: Modes: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-маска. Вы также можете использовать константы, именованные IFX_LO_RDONLY, IFX_LO_WRONLY etc. Возвращает FALSE при ошибке и новый идентификатор объекта slob в противном случае.


ifx_free_slob

ifx_free_slob -- удалить объект slob
Описание

int ifxus_free_slob(int bid);

 

Удаляет объект slob с идентификатором bid. Возвращает FALSE приошибке и TRUE в противном случае.


ifxus_close_slob

ifxus_close_slob -- удалить объект slob
Описание

int ifxus_close_slob(int bid);

 

Удаляет объект slob с идентификатором bid. Возвращает FALSE приошибке и TRUE в противном случае.


ifxus_open_slob

ifxus_open_slob -- открыть объект slob
Описание

int ifxus_open_slob(long bid, int mode);

 

Открывает объект slob. bid должен быть существующим идентификатором slob. Режимы: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-маска. Возвращает FALSE при ошибке и новый идентификатор объекта slob в противном случае.


ifxus_tell_slob

ifxus_tell_slob -- возвратить текущий файл или позицию поиска
Описание

int ifxus_tell_slob(long bid);

 

Возвращает текущий файл или позицию поиска для открытього объекта slob, bid должен быть действующим идентификатором slob. Возвращает FALSE при ошибке, в противном случае - позицию поиска.


ifxus_seek_slob

ifxus_seek_slob -- установить текущий файл или позицию поиска
Описание

int ifxus_seek_blob(long bid, int mode, long offset);

 

Устанавливает текуцщий файл или позицию поиска для открытого объекта slob. bid должен быть существующим идентификатором slob. Режимы: 0 = LO_SEEK_SET, 1 = LO_SEEK_CUR, 2 = LO_SEEK_END и offset - байтовое смещение. Возвращает FALSE при ошибке, в противном случае - позицию поиска.


ifxus_read_slob

ifxus_read_slob -- читать байты в объект slob
Описание

int ifxus_read_slob(long bid, long nbytes);

 

Читает байты в объект slob. bid - существующий идентификатор slob и nbytes - количество байт, которое надо прочесть. Возвращает FALSE при ошибке и строку в протвном случае.


ifxus_write_slob

ifxus_write_slob -- записать строку в объект slob
Описание

int ifxus_write_slob(long bid, string content);

 

Записывает строку в объект slob. bid - существующий идентификатор slob и content - содержание записи. Возвращает FALSE при ошибке или число записанных байт в противном случае.


Функции работы с InterBase

ibase_connect

ibase_connect --
Описание

ibase_connect( );

 


ibase_pconnect

ibase_pconnect --
Описание

ibase_pconnect( );

 


ibase_close

ibase_close --
Описание

ibase_close( );

 


ibase_query

ibase_query --
Описание

ibase_query( );

 


ibase_fetch_row

ibase_fetch_row --
Описание

ibase_fetch_row( );

 


ibase_free_result

ibase_free_result --
Описание

ibase_free_result( );

 


ibase_prepare

ibase_prepare --
Описание

ibase_prepare( );

 


ibase_bind

ibase_bind --
Описание

ibase_bind( );

 


ibase_execute

ibase_execute --
Описание

ibase_execute( );

 


ibase_free_query

ibase_free_query --
Описание

ibase_free_query( );

 


ibase_timefmt

ibase_timefmt --
Описание

ibase_timefmt( );

 


LDAP функции

Введение в LDAP

LDAP (Lightweight Directory Access Protocol) - Протокол Доступа к Директориям (каталогам), является протоколом, используемым для доступа к "Серверам Каталогов". Директория является специальной разновидностью базы данных, которая хранит информацию используя древовидную структуру.

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

Для ссылки на файл в подкаталоге на жестком диске используется нечто подобное

    /usr/local/myapp/docs

Прямая косая черта отмечает каждый раздел в ссылке, а вся последовательность символов ссылки читается слева направо.

Эквивалентом полностью определенной ссылки в LDAP является "distinguished name" (различаемое имя), обозначаемое просто как "dn". Примером dn может быть:

    cn=John Smith,ou=Accounts,o=My Company,c=US

Каждый раздел такой ссылки отмечается запятой, а вся последовательность читается справа налево. Ссылка читается как ..

    country = US
    organization = My Company
    organizationalUnit = Accounts
    commonName = John Smith

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

 

Поиск информации для всех записей, где фамилия начинается с "S", в сервере директории, вывод на дисплей и извлечение с именем и email-адресом.

Пример 1. Пример поиска в LDAP

<?php
// базовая последовательность в LDAP это соединение, связь,
// поиск, интерпретация поиска, результат, закрытие соединения

echo "<h3>LDAP тест запроса</h3>";
echo "Соединение ...";
$ds=ldap_connect("localhost");  // должен существовать LDAP-сервер!
echo "результат соединения ".$ds."<p>";

if ($ds) { 
    echo "Установка связи ..."; 
    $r=ldap_bind($ds);  // это "anonymous" связь, обычно доступ
                        // только для чтения, вывод "Результат связи.."
    echo "Результат связи ".$r."<p>";

    echo "Поиск для (sn=S*) ...";
    // Поиск записи с фамилией
    $sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");  
    echo "Результат поиска ".$sr."<p>";

    echo "Количество возвращенных записей ".ldap_count_entries($ds,$sr)."<p>";

    echo "Получение записей ...<p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Данные для ".$info["count"]." объектов возвращены:<p>";

    for ($i=0; $i<$info["count"]; $i++) {
        echo "dn is: ". $info[$i]["dn"] ."<br>";
        echo "первая запись cn: ". $info[$i]["cn"][0] ."<br>";
        echo "первая запись email: ". $info[$i]["mail"][0] ."<p>";
    }

    echo "Закрытие соединения";
    ldap_close($ds);

} else {
    echo "<h4>Нет соединения с LDAP сервером</h4>";
}
?>

Использование PHP LDAP вызовов

Вам потребуется установить и скомпилировать библиотеки LDAP-клиента или из пакета University of Michigan ldap-3.3, или из Netscape Directory SDK. Вам также потребуется перекомпилировать PHP с поддержкой LDAP для того чтобы применение PHP LDAP вызовов стало доступным.

Прежде чем использовать LDAP вызовы, необходимо знать ..

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

  ldap_connect()    // установка соединения с сервером
     |
  ldap_bind()       // анонимный или идентифицируемый "вход"
     |
 действия подобные поиску или обновлению каталога
с выводом результата 

     |
  ldap_close()      // "выход"

Дополнительная информация

Большое количество информации по LDAP может быть найдено:

Netscape SDK одержит полезное Руководство Программиста в .html формате.


ldap_add

ldap_add -- добавляет записи в  LDAP каталог

Описание

int ldap_add(целочисленный link_identifier, строковое dn, массив записи);

возвращает true при успехе и false при ошибке.

Функция ldap_add() используется для добавления записей в LDAP каталог. DN добавляемой записи выражается посредством dn. Массив записи определяет информацию о записи. Значения записей индексируются посредством индивидуальных атрибутов. В случае множественных значений для атрибута, они индексируются целыми числами начиная с 0.

    запись["атрибут1"] = значение
    запись["атрибут2"][0] = значение1
    запись["атрибут2"][1] = значение2


Пример 1. Полный прример с идентифицируемой связью

<?php
$ds=ldap_connect("localhost");  // проверка наличия LDAP сервера на хосте

if ($ds) {
    // связь с подходящим dn для получения обновленного доступа
    $r=ldap_bind($ds,"cn=root, o=My Company, c=US", "secret");

    // подготовка данных
    $info["cn"]="John Jones";
    $info["sn"]="Jones";
    $info["mail"]="jonj@here.and.now";
    $info["objectclass"]="person";

    // добавление данных в каталог
    $r=ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info);

    ldap_close($ds);
} else {
    echo "Нет соединения с LDAP сервером"; 
}
?>

ldap_bind

ldap_bind -- связь с LDAP каталогом

Описание

int ldap_bind(целое link_identifier, строковое bind_rdn, строковое bind_password);

Связь с LDAP каталогом с определенным RDN и паролем. Возвращает true при успехе и false при ошибке.

ldap_bind() осуществляет операцию связи с каталогом. bind_rdn и bind_password используются факультативно. Если не определено, применяется связь anonymous.


ldap_close

ldap_close -- закрывает связь с LDAP сервером

Описание

int ldap_close(целое link_identifier);

Возвращает true при успехе, false при ошибке.

ldap_close() закрывает связь с LDAP сервером,  которая ассоциировалась с определенным link_identifier.

Этот вызов внутренне идентичен ldap_unbind(). LDAP API использует вызов ldap_unbind(), поэтому возможно он предпочтительнее вызова ldap_close().


ldap_connect

ldap_connect -- соединение с LDAP сервером

Описание

int ldap_connect(строковое hostname, целое port);

Возвращает положительный LDAP идентификатор связи при успехе, false при ошибке.

ldap_connect() устанавливает соединение с LDAP сервером по определенным hostname и port. Оба аргумента факультативные. Если аргументы не определены, то будет возвращен идентефикатор  уже открытого соединения. Если определено только hostname, то по умолчанию используется порт 389.


ldap_count_entries

ldap_count_entries -- подсчет количества записей при поиске

Описание

int ldap_count_entries(целое link_identifier, целое result_identifier);

Возвращает количество записей в результате или false при ошибке.

ldap_count_entries() возвращает количество записей хранимых в результате от предыдущей операции поиска. result_identifier идентифицирует внутренний ldap результат.


ldap_delete

ldap_delete -- удаляет запись из каталога

Описание

int ldap_delete(целое link_identifier, строковое dn);

Возвращает true при успехе и false при ошибке.

ldap_delete() удаляет отдельную запись из LDAP каталога, определенную по dn.


ldap_dn2ufn

ldap_dn2ufn -- конвертирует DN в User Friendly Naming формат

Описание

string ldap_dn2ufn(строковое dn);

ldap_dn2ufn() преобразует DN в более дружественную для пользователя форму, удаляя имена типа.


ldap_explode_dn

ldap_explode_dn -- разбивает DN на составные части

Описание

array ldap_explode_dn(строковое dn, целое with_attrib);

ldap_explode_dn() разбивает DN возвращаемое по ldap_get_dn() на составные части. Каждая часть известна как Relative Distinguished Name, или RDN. ldap_explode_dn() возвращает массив всех компонентов. with_attrib используется для запроса, возвращать ли RDN толъко со значениями или также с их атрибутами. Чтобы получить RDN-части с атрибутами (т.е. в формате атрибут=значение) установите with_attrib в 1,  чтобы получить только значения установите его в 0.


ldap_first_attribute

ldap_first_attribute -- возвращает первый атрибут

Описание

string ldap_first_attribute(целое link_identifier, целое result_entry_identifier, целое ber_identifier);

Возвращает первый атрибут в записи при успехе и false при ошибке.

Подобно чтению записей, атрибуты также читаются один за другим из отдельной записи. ldap_first_attribute() возвращает первый атрибут в записи, отмеченной идентификатором записи. Оставшиеся атрибуты ищутся последовательными вызовами ldap_next_attribute(). ber_identifier является идентификатором указателя положения внутренней памяти. Он передается по ссылке. Аналогичный ber_identifier передается ldap_next_attribute() функции, которая изменяет этот указатель.

См. также ldap_get_attributes()


ldap_first_entry

ldap_first_entry -- возвращает первый идентификатор (id) результата

Описание

int ldap_first_entry(целое link_identifier, целое result_identifier);

Возвращает идентификатор записи для первой записи результата при успехе и  false при ошибке.

Записи в LDAP-результате считываются последовательно с использованием функций ldap_first_entry() и ldap_next_entry(). ldap_first_entry() возвращает идентификатор записи для первой записи в результате. Этот идентификатор записи передается затем в процедуру lap_next_entry() для получения последовательных записей из результата.

См. также ldap_get_entries().


ldap_free_result

ldap_free_result -- освобождает память результата

Описание

int ldap_free_result(целое result_identifier);

Возвращает true при успехе и false при ошибке.

ldap_free_result() освобождает внутреннюю память, предназначенную для хранения результата и отмечаемую посредством result_identifier. Вся память результата автоматически освобождается когда скрипт завершается.

 

Обычно вся память, выделяемая для ldap результата освобождается при окончании скрипта. В случае, когда скрипт выполняет последовательные поиски, которые возвращают большие наборы записей в результате, ldap_free_result() может быть вызвана для сохранения работоспособности оперативной памяти для следующей части скрипта..


ldap_get_attributes

ldap_get_attributes -- получает атрибуты записи в результате от поиска

Описание

array ldap_get_attributes(целое link_identifier, целое result_entry_identifier);

Возвращает полную информацию о записи в многоразмерном массиве при успехе и false при ошибке.

ldap_get_attributes() используется для упрощения чтения атрибутов и значений из записи в результате от поиска. Возвращаемым значением функции является многоразмерный массив атрибутов и значений.

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

return_value["count"] = количество атрибутов в записи
return_value[0] = первый атрибут
return_value[n] = n-ый атрибут

return_value["attribute"]["count"] = количество значений атрибута
return_value["attribute"][0] = первое значение атрибута
return_value["attribute"][i] = i-тое значение атрибута


Пример 1. Показывает список атрибутов отдельной записи каталога

// $ds является идентификатором связи для каталога

// $sr допустимый результат поиска от предыдущего вызова к
// текущему при вызовах поиска по ldap каталогу

$entry = ldap_first_entry($ds, $sr);

$attrs = ldap_get_attributes($ds, $entry);

echo $attrs["count"]." атрибуты для данной записи:<p>";

for ($i=0; $i<$attrs["count"]; $i++)
    echo $attrs[$i]."<br>";

См. также ldap_first_attribute() и ldap_next_attribute()


ldap_get_dn

ldap_get_dn -- получает DN записи результата

Описание

string ldap_get_dn(целое link_identifier, целое result_entry_identifier);

Возвращает DN записи результата или false при ошибке.

ldap_get_dn() используется для нахождения DN записи в результате.


ldap_get_entries

ldap_get_entries -- получает все записи результата

Описание

array ldap_get_entries(целое link_identifier, целое result_identifier);

Возвращает полную информацию о результате в многомерном массиве при успехе и false при ошибке.

ldap_get_entries() используется для упрощения чтения множества записей из результата и затем чтения атрибутов и множественных значений. Информация о записи возвращается по одиночному вызову функции в многомерном массиве. Структура массива представлена ниже.

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

return_value["count"] = количество записей в результате
return_value[0] : ссылается на детали первой записи

return_value[i]["dn"] =  DN i-той записи в результате

return_value[i]["count"] = количество атрибутов i-той записи
return_value[i][j] = j-тый атрибут i-той записи результата

return_value[i]["attribute"]["count"] = количество значений атрибута в i-той записи
return_value[i]["attribute"][j] = j-тое значение атрибута в i-той записи

См. также ldap_first_entry() и ldap_next_entry()


ldap_get_values

ldap_get_values -- получение всех значений из записи результата

Описание

array ldap_get_values(целое link_identifier, целое result_entry_identifier, строковое attribute);

Возвращает массив значений атрибута при успехе и false при ошибке.

ldap_get_values() используется для чтения всех значений атрибута в записи в данном результате. Запись определяется по result_entry_identifier. Количество значений может быть получено при индексации "счетчика" в результирующем массиве. Отдельные значения доступны по целочисленному индексу в массиве. Первый индекс начинается с 0.

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

Ваше приложение или может быть жестко настроено на поиск определенных атрибутов (таких как "фамилия" или "почта") или вы должны использовать вызов ldap_get_attributes() для получения информации о том, какие атрибуты существуют для данной записи.

В LDAP может быть более одной записи для атрибута, поэтому можно, например, хранить несколько адресов email в записи каталога для одной персоны, при этом все записи будут отмечены с атрибутом "mail"

return_value["count"] = количество значений для атрибута
return_value[0] = первое значение атрибута
return_value[i] = i-тое значение атрибута


Пример 1. Список значений атрибута "mail" для записи каталога

// $ds допустимый идентификатор связи для сервера каталога

// $sr допустимый результат поиска от предыдущего вызова к
// текущему при вызовах поиска по ldap каталогу

// $entry допустимый идентификатор записи от предыдущего 
// вызова к текущему от вызовов возвращающих запись каталога

$values = ldap_get_values($ds, $entry,"mail");

echo $values["count"]." email адрес для данной записи.<p>";

for ($i=0; $i < $values["count"]; $i++)
    echo $values[$i]."<br>";

ldap_list

ldap_list -- одноуровневый поиск

Описание

int ldap_list(целое link_identifier, строковое base_dn, строковое filter);

Возвращает идентификатор результата поиска или false при ошибке.

ldap_list() выполняет поиск с определенным фильтром по каталогу с областью LDAP_SCOPE_ONELEVEL.

LDAP_SCOPE_ONELEVEL означает что такой поиск может вернуть только информацию, находящуюся на уровне непосредственно ниже базового dn, заданного в вызове. (Эквивалентно вводу "ls" и получению списка файлов и папок в текущем рабочем каталоге).

Этот вызов берет факультативно четвертый параметр который является массивом требуемых атрибутов. См. примечание к ldap_search().

Пример 1. Составление списка всех подразделений организации

// $ds допустимый идентификатор связи для сервера каталога

$basedn = "o=My Company, c=US";
$justthese = array("ou");

$sr=ldap_list($ds, $basedn, "ou=*", $justthese);

$info = ldap_get_entries($ds, $sr);

for ($i=0; $i<$info["count"]; $i++)
    echo $info[$i]["ou"][0] ;


ldap_modify

ldap_modify -- изменение записи LDAP

Описание

int ldap_modify(целое link_identifier, строковое dn, массив entry);

Возвращает true при успехе и  false при ошибке.

ldap_modify() используется для изменения существующих записей в каталоге LDAP. Структура записи такая же как и в ldap_add().


ldap_next_attribute

ldap_next_attribute -- получает следующий атрибут в результате

Описание

string ldap_next_attribute(целое link_identifier, целое result_entry_identifier, целое ber_identifier);

Возвращает следующий атрибут в записи или false при ошибке.

ldap_next_attribute() вызывается для поиска атрибутов в записи. Внутреннее положение указателя устанавливается по ber_identifier. Он посылается в данную функцию по ссылке. Первый вызов ldap_next_attribute() осуществляется с result_entry_identifier получаемым от ldap_first_attribute().

См. также ldap_get_attributes()


ldap_next_entry

ldap_next_entry -- получает следующую запись в результате

Описание

int ldap_next_entry(целое link_identifier, целое result_entry_identifier);

Возвращает идентефикатор записи для следующей записи в результате, записи которого начинали считываться функцией ldap_first_entry(). Если больше нет записей в результате, то возвращается false.

ldap_next_entry() используется для поиска записей, хранящихся в результате. Последовательные вызовы ldap_next_entry() возвращают записи одну за другой пока не закончатся все записи. Первое обращение к ldap_next_entry() осуществляется после вызова ldap_first_entry() с параметром result_identifier,   который возвращается от ldap_first_entry().

См. также ldap_get_entries()


ldap_read

ldap_read -- чтение записи

Описание

int ldap_read(целое link_identifier, строка base_dn, строка filter, массив [attributes]);

Возвращает идентификатор результата поиска или false при ошибке.

ldap_read() выполняет поиск при определенном фильтре по каталогу с областью LDAP_SCOPE_BASE. Таким образом, это эквивалентно чтению записи из каталога.

Пустой фильтр не допустим. Если вы хотите получить абсолютно всю информацию для данной записи, используйте фильтр "objectClass=*". Если вы знаете какие типы записей используются в сервере каталога, вы можете применить подходящий фильтр, такой как "objectClass=inetOrgPerson".

Этот вызов берет факультативно четвертый параметр который является массивом требуемых атрибутов. См. примечание ldap_search().


ldap_search

ldap_search -- поиск по дереву LDAP

Описание

int ldap_search(целое link_identifier, строковое base_dn, строковое filter, массив [attributes]);

Возвращает идентификатор результата поиска или false при ошибке.

ldap_search() осуществляет поиск для определенного фильтра по каталогу с областью   LDAP_SCOPE_SUBTREE. Это эквивалентно поиску по всему каталогу. base_dn определяет базовый DN для данного каталога.

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

Четвертый параметр является стандартным строковым массивом PHP с требуемыми атрибутами, т.е. array("mail","sn","cn"). Заметим, что "dn" требуется всегда, независимо от того, какие типы атрибутов запрашиваются.

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

Поисковый фильтр может быть простым или расширенным, использующим булевы операторы в формате описанном в документации LDAP (См. Netscape Directory SDK для дополнения информации по фильтрам).

Приведенный ниже пример отыскивает the отдел организации, фамилию, данное имя и адрес email для всех людей в "My Company" где фамилия или данное имя содержат подстроку $person. Этот пример использует логический фильтр для указания серверу на поиск информации более чем в одном атрибуте.

Пример 1. LDAP поиск

// $ds допустимый идентификатор связи сервера каталога

// $person вся часть имени персоны, т.е. "Jo"

$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array( "ou", "sn", "givenname", "mail");

$sr=ldap_search($ds, $dn, $filter, $justthese);

$info = ldap_get_entries($ds, $sr);

print $info["count"]." записей возвращено<p>";

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

$normerr = error_reporting ();
error_reporting (0);  // выключает предупреждение!
$sr = ldap_search ($ds, $dn, $searchfor);
$normerr = error_reporting ($normerr);
if (!$sr) {
    print "слишком много записей!";
} else .....
      

Вы можете попробовать сузить эту область, добавив особый фильтр,  т.е. (cn=a*), но было бы лучше иметь возможность захватить результаты в битах (т.е. 1-100, 101-200...).


ldap_unbind

ldap_unbind -- прекращение связи из каталога LDAP

Описание

int ldap_unbind(целое link_identifier);

Возвращает true при успехе и false при ошибке.

ldap_unbind() прекращает связь из каталога LDAP.

 


Почтовые функции

mail

mail -- шлет почту
Описание
bool mail(string to, string subject, string message, string additional_headers);

Функция mail() позволяет отсылать почту.
Mail() автоматически посылает сообщение, содержащееся в message адресату, указанному в to.
Несколько получателей могут быть указаны в поле to в виде строки с адресами, разделенными пробелами.
Пример 1. Посылка почты.
mail("rasmus@lerdorf.on.ca", "Моя тема", "Строка 1\nСтрока 2\nСтрока 3");

Если задан четвертый строковый аргумент, он автоматически вставляется в конец заголовка. обычно это используется при добавлении дополнительных полей в заголовок. Несколько дополнительных полей разделяются символом новой строки. Пример 2. Посылка почты с дополнительными полями заголовка.
mail("ssb@guardian.no", "the subject", $message, "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());


Математические функции

Введение

Эти математические функции работают только с диапазоном чисел типа long и double. Если Вы хотите использовать большие числа, взгляните на математические функции произвольной точности. .

Математические константы

Следующие величины определяются как математические константы PHP:

Таблица 1. Математические константы
Константа Величина Описание
M_PI 3.14159265358979323846 Значение ¶ (pi)


Abs

Abs -- абсолютная величина
Описание

mixed abs(mixed number);

 

Возвращает абсолютную величину числа. Если число с плавающей запятой, то также возвращает число с плавающей запятой.


Acos

Acos -- арккосинус
Описание

float acos(float arg);

 

Возвращает арккосинус аргумента в радианах.

См.также asin() и atan().


Asin

Asin -- арксинус
Описание

float asin(float arg);

 

Возвращает арксинус аргумента в радианах.

См.также acos() и atan().


Atan

Atan -- арктангенс
Описание

float atan(float arg);

 

Возвращает арктангенс аргумента в радианах.

См.также acos() и atan().


Atan2

Atan2 -- арктангенс от двух переменных
Описание

float atan2(float y, float x);

 

Эта функция вычисляет арктангенс от двух переменных x и y. Аналогично вычислению арктангенса y / x, за исключением того, что знаки обоих аргументов используются для определения сектора результата.

Функция возвращает результат в радианах, находящихся между -PI и PI (включительно).

См.также acos() и atan().


base_convert

base_convert -- конвертирует число между произвольными основаниями
Описание

strin base_convert(string number, int frombase, int tobase);

 

Возвращает строку, содержащую number, представленное по основанию tobase. Основание, в котором дается число which number указывается в frombase. Основания frombase и tobase должны находиться в диапазоне от 2 до 36 включительно. Цифры в числах с основанием выше, чем 10 будут представлены буквами a-z, со значениями a - 10, b - 11 и z - 36.

Пример 1. base_convert()

$binary = base_convert($hexadecimal, 16, 2);


BinDec

BinDec -- двоичное в десятичное
Описание

int bindec(string binary_string);

 

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

OctDec конвертирует двоичное число в десятичное. Наибольшее число, которое может быть сконвертировано равно 31 битам или 2147483647 в десятичном виде.

См.также функцию decbin().


Ceil

Ceil -- округлить дробную часть наверх
Описание

int ceil(float number);

 

Возвращает следующее наивысшее целое значение number. Использование ceil() на целых числах - абсолютная трата времени.

ЗАМЕЧАНИЕ: Функция ceil() в PHP/FI 2 возвращаля число типа float. Используйте: $new = (double)ceil($number); для того, чтобы сэмулировать старое поведение функции.

См.также floor() и round().


Cos

Cos -- косинус
Описание

float cos(float arg);

 

Возвращает косинус аргумента в радианах.

См.также sin() и tan().


DecBin

DecBin -- десятичное в двоичное
Описание

string decbin(int number);

 

Возвращает строку, содержащую двоичное представление аргумента number. Наибольшее число, которое может быть сконвертировано равно 2147483647 в десятичном виде или 31 бит.

См.также функцию bindec().


DecHex

DecHex -- десятичное в шестнадцатиричное
Описание

string dechex(int number);

 

Возвращает строку, содержащую шестнадцатиричное представление аргумента number. Наибольшее число, которое может быть сконвертировано равно 2147483647 в десятичном виде или "7fffffff" в шестнадцатиричном.

См. также функцию hexdec().


DecOct

DecOct -- десятичное в восьмеричное
Описание

string decoct(int number);

 

Возвращает строку, содержащую восьмеричное представление аргумента number. Наибольшее число, которое может быть сконвертировано равно 2147483647 в десятичном виде или "17777777777" в восьмеричном. См.также octdec().


Exp

Exp -- e в степени ...
Описание

float exp(float arg);

 

Возвращает число e, возведенное в степень arg.

См.также pow().


Floor

Floor -- округляет дробную часть вниз
Описание

int floor(float number);

 

Возвращает следующее нижележащее значение после number. Использование floor() на целых числах - абсолютная потеря времени.

ЗАМЕЧАНИЕ: Функция floor() в PHP/FI 2 возвращала число типа float. Используйте: $new = (double)floor($number); для эмулирования старого поведения этой функции.

См.также ceil() и round().


getrandmax

getrandmax -- показывает наибольшую возможную случайную величину
Описание

int getrandmax(void );

 

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

См.также rand(), srand() mt_rand(), mt_srand() и mt_getrandmax().


HexDec

HexDec -- шестнадцатиричное в десятичное
Описание

int hexdec(string hex_string);

 

Возвращает десятичный эквивалент числа, представленного аргументом hex_string. HexDec конвертирует шестнадцатиричную сстроку в десятичное число. Наибольшее число, которое может быть сконверьтировано равно 7fffffff в шестнадцатиричном виде или 2147483647 в десятичном.

См. также функцию dechex().


Log

Log -- натуральный логарифм
Описание

float log(float arg);

 

Возвращает натуральный логарифм от аргумента arg.


Log10

Log10 -- логарифм по основанию 10
Описание

float log10(float arg);

 

Возвращает логарифм по основанию 10 от аргумента arg.


max

max -- находит максимум
Описание

mixed max(mixed arg1, mixed arg2, mixed argn);

 

max() возвращает наибольшее число из перечисленных в параметрах.

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

Если одна или более величин типа double, все остальные величины будут обращены double, и, соответственно, возвратится число типа double. Если ни одно из чисел не является double, то все будут обращены в целые и возвратится целое число.


min

min -- находит минимум
Описание

mixed min(mixed arg1, mixed arg2, mixed argn);

 

min() возвращает наименьшее значение из указанных в аргументах.

Если первый параметр - массив, min() возвратит наименьшую величину массива. Если первый параметр - целое число, строка или double, следует указать минимум два парметра и min() возвратит наименьшую из них величину. Вы можете сравнивать неограниченно количество величин.

Если одна или более величин типа double, все остальные величины будут обращены double, и, соответственно, возвратится число типа double. Если ни одно из чисел не является double, то все будут обращены в целые и возвратится целое число.


mt_rand

mt_rand -- генерирует наилучшее случаное число
Описание

int mt_rand([int min], [int max]);

 

Множество генераторов случайных чисел, написанных на старой библиотеке libcs, имеют неясные или неизвестные характеристики, и к тому же, медленны. По умолчанию с функцией rand() PHP использует генератор случайных чисел, написанный на libc. Функция mt_rand() является его полной заменой. Она использует генератор случайных чисел с известными характеристиками (Mersenne Twister), который производит случайные числа, пригодные для использования в криптографии и работает в четыре раза быстрее, чем средняя скорость, которую обеспечивает libc. Домашняя страница Mersenne Twister'а Вы можете найти по адресу http://www.math.keio.ac.jp/~matumoto/emt.html, а оптимизированную версию исходных текстов на http://www.scp.syr.edu/~marc/hawk/twister.html.

Если функция вызывается без необязательных аргументов min и max, mt_rand() возвращает псевдо-случайное число между 0 и RAND_MAX. Если Вы хотите получить случайное число между 5 и 15 (включительно), то можно использовать следующий вызов функции: mt_rand(5,15).

Не забудьте инициализировать генератор случайных чисел перед использованием функции mt_srand().

См.также mt_srand(), mt_getrandmax(), srand(), rand() и getrandmax().


mt_srand

mt_srand -- инициализирует лучший генератор случаных чисел
Описание

void mt_srand(int seed);

 

Инициализирует генератор случайных чисел значением seed.

 

// инициализируется количеством микросекунд с посленей "целой" секунды
mt_srand((double)microtime()*1000000);
$randval = mt_rand();
      

 

См.также mt_rand(), mt_getrandmax(), srand(), rand() и getrandmax().


mt_getrandmax

mt_getrandmax -- показывает наибольшее возможное случайное число
Описание

int mt_getrandmax(void );

 

Возвращает максимальную величину, которая может быть возвращена вызовом функции mt_rand().

См.также mt_rand(), mt_srand() rand(), srand() и getrandmax().


number_format

number_format -- форматирует число с сгруппированными тысячами
Описание

string number_format(float number, int decimals, string dec_point, string thousands_sep);

 

number_format() возвращает форматированную версию числа number. Эта функция принимает один, два или четыре параметра (не три):

Если дан только один параметр, число number будет отформатировано без десятичных цифр, но с запятой (",") между каждой группой тысяч.

Если дано два параметра, число number will будет отформатировано с десятичным знаком decimals с точкой (".") впереди и запятой (",") между каждой группой тысяч.

Если даны все четыре параметра, то число number будет отформатировано с десятичным знаком decimals, dec_point вместо точки (".") перед десятичным знаком и thousands_sep вместо запятой (",") между каждой группой тысяч.


OctDec

OctDec -- восьмеричное в десятичное
Описание

int octdec(string octal_string);

 

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

См.также decoct().


pi

pi -- величина pi
Описание

double pi(void );

 

Вохвращает аппроксимированное значение pi.


pow

pow -- степень числа
Описание

float pow(float base, float exp);

 

Возвращает base, возведенное в степень exp.

См.также exp().


rand

rand -- генерирует случаную величину
Описание

int rand([int min], [int max]);

 

Если функция вызывается без необязательных параметров min и max, rand() возвращает псевдо-случайную величину между 0 и RAND_MAX. При желании получить случайное число между 5 и 15 (включительно), используйте rand(5,15).

Не забудьте проинициализировать генератор случайных чисел перед использованием srand().

См.также srand(), getrandmax(), mt_rand(), mt_srand() и mt_getrandmax().


round

round -- округляет число с плавающей запятой
Описание

double round(double val);

 

Возвращает округленную величину val.

 

$foo = round( 3.4 );   // $foo == 3.0
$foo = round( 3.5 );   // $foo == 4.0
$foo = round( 3.6 );   // $foo == 4.0
      

 

См.также ceil() and floor().


Sin

Sin -- синус
Описание

float sin(float arg);

 

Возврашает синус аргумента.

См.также cos() и tan().


Sqrt

Sqrt -- квадратный корень
Описание

float sqrt(float arg);

 

Возвращает квадратный корень аргумента.


srand

srand -- инициализирует генератор случайных чисел
Описание

void srand(int seed);

 

Инициализирует генератор случайных чисел значением seed.

 

// инициализируется числом микросекунд с последней "целой" секунды
srand((double)microtime()*1000000);
$randval = rand();
      

 

См.также rand(), getrandmax(), mt_rand(), mt_srand() и mt_getrandmax().


Tan

Tan -- тангенс
Описание

float tan(float arg);

 

Возвращает тангенс аргумента.

См.также sin() и cos().


Возможности PHP3

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

eval

eval -- Производит выполнение строки содержащей PHP код
Описание
void eval(string code_str);
 
eval() производит выполнение строки, данной в code_str содержащей PHP код. Кстати, это может пригодиться для сохранения кода в текстовом поле базы данных для более позднего выполнения.

Имеются некоторые условия, которые надо иметь в виду при использовании eval(). Не забудьте, что переданная строка должна иметь допустимый PHP код, при включении чего-нибудь подобного завершению кода с точкой с запятой дальнейшее выполнение  не прервется  на строке после eval(), поэтому пропускайте это в code_str.

Также не забудьте, что при изменении переменных значений в eval() эти переменные будут изменены и в основных данных.
 
Пример 1. eval()  - простое объединение текста
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
      

При выполнении вышеприведенного примера будет выведено следующее:

This is a $string with my $name in it.
This is a cup with my coffee in it.

die

die -- Вывод сообщения и завершение текущего скрипта
Описание
void die(string message);
 
Эта функция выводит сообщение и прекращает выполнение текущего скрипта. Не возвращает значение.
 
Пример 1. die 
<?php
$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
  or die "unable to open file ($filename)";
?>
      

exit

exit -- Завершает текущий скрипт
Описание
void exit(void);
 
Эта функция завершает текущий скрипт.  Не возвращает значение.

iptcparse

iptcparse -- Анализирует двоичный IPTC http://www.xe.net/iptc/ блок на одиночные тэги.
Описание
array iptcparse(string iptcblock);
 
Эта функция анализирует двоичный блок IPTC на одиночные теги.  Возвращает массив, использующий tagmarker как индекс и значение как значение. Возвращает false при ошибке или если никаких IPTC данных не было найдено. См. GetImageSize() для примера.

leak

leak -- Отсечение куска памяти
Описание
void leak(int bytes);
 
Leak() отсекает определенный объем памяти.

Это полезно при отладке диспетчера памяти, который автоматически очищает "отсеченную" память при выполнении запроса.


pack

pack -- упаковывает данные в двоичную строку
Описание
string pack(string format, mixed [ args ]...);
 
Упаковывает данные в двоичную строку согласно формату. Возвращает двоичную строку, содержащую данные.

Идея на эту функцию принималась из Perl и всей работы кодов форматирования также как там. Строка формата состоит из кодов формата, сопровождаемые факультативным параметром ретранслятора. Параметр ретранслятора может быть или целочисленное значение или * для повторение до конца входных данных. Для a, A, h, H количество повторов определяет, сколько принимается символов одного параметра данных, для @ это безусловная позиция, где поместить следующие данные, для всего остального количество повторов определяет сколько данных будет использовано и упаковано в возникающую в результате двоичную строку. В настоящее время выполнено:
 


Пример 1. pack форматируем строку
$binarydata = pack(" nvc* ", 0x1234, 0x5678, 65, 66);
Возникающая в результате двоичная строка будет длиной 6 байтов и содержать последовательность байтов 0x12, 0x34, 0x78, 0x56, 0x41, 0x42. 

Обратите внимание, что различие между знаковыми и без знаковыми значениями эффективно только для функции unpack(), так как  функция pack() дает тот же самый результат для знаковых и без знаковых кодов форматирования.

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


register_shutdown_function

register_shutdown_function -- Устанавливает функцию, которая будет выполнена при завершении.
Описание
int register_shutdown_function(string func);
 
Устанавливает функцию с именем func, которая будет выполнена при завершении.

serialize

serialize -- Генерирует удобохраниемое представление значения
Описание
string serialize(mixed value);
 
serialize() возвращает строку состоящую из потока байтов при представлениизначения value, которое может где-нибудь сохранено.

Это полезно для сохранения или передачи значений PHP  без потери их типа и структуры..

Чтобы преобразовать строку обратно в PHP значение, используйте unserialize(). serialize() обрабатывает следующие типы:  integer double string array (многомерный) и  object (объект будет преобразован в последовательную форму, но методы при этом будут утеряны).
 
Пример 1. serialize 
// $session_data содержит многомерный массив с информацией о сессии 
// текущего пользователя.  Мы используем serialize() для сохранения
// этого в базе данных в конце запроса.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
                     "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array(serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata)) {
    $stmt = odbc_prepare($conn,
                         "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, &$sqldata)) {
        /* Что-то сделано неправильно. */
    }
}


sleep

sleep -- Задержка выполнения
Описание
void sleep(int seconds);
 
Sleep фукция выполняет задержку выполненя программы в секундах (seconds).

См. также usleep().


unpack

unpack -- Распаковывает данные из двоичной строки
Описание
array unpack(string format, string data);
 
Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий распакованные элементы.

Unpack работает не так как в Perl поскольку распакованные данные сохранены в ассоциативном массиве. Чтобы сделать это, Вы должны установить различные коды формата, и отделить их наклонной чертой вправо /.
 
Пример 1. Распаковываем строку
$array = unpack("c2chars/nint", $binarydata);
Возникающий в результате массив будет содержать "chars1", "chars2" и "int". 

Для объяснения кодов формата см. также: pack()

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


unserialize

unserialize -- создает PHP значение из сохраненного представления
Описание
mixed unserialize(string str);
 
unserialize() берет одно сохраненное значение  (см. serialize()) и преобразует обратно в PHP значение. Возвращает преобразованное значение, и может иметь тип:  integer double string array или  object . Если был преобразован object, то методы не востановятся.
 
Пример 1. unserialize 
// Здесь мы используем unserialize() для загрузки данных о сессии из базы данных
// в $session_data.  Этот пример дополняет описанный в месте
// с serialize().

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata) || !odbc_fetch_into($stmt, &$tmp)) {
    // Если сбой запуска или выборки , то инициализируем массив
    $session_data = array();
} else {
    // Мы должны иметь представление в $tmp[0].
    $session_data = unserialize($tmp[0]);
    if (!is_array($session_data)) {
        // Что-то неправильно, инициализируем массив
        $session_data = array();
    }
}

uniqid

uniqid -- генерирует уникальный идентификатор
Описание
int uniqid(string prefix);
 
uniqid() возвращает уникальный идентификатор, основанный на текущем времени в микросекундах. Префикс может быть полезен, например, если Вы генерируете идентификаторы одновременно на отдельных хостах, которые, могли бы случилось,  генерировали идентификатор в одной и той же микросекунде. Префикс может быть длиной до 114 символов.

Если Вы нуждаетесь в уникальном идентификаторе или лексеме(маркере), и Вы предполагаете раздавать эту лексему(маркер) пользователю через сеть (то есть сеанс cookies), то рекомендуется, чтобы Вы использовали что - нибудь со строками

$token = md5(uniqid("")); // Не произвольно
$better_token = md5(uniqid(random())); // Намного лучше, труднее подобрать
Это создаст 32 символьный идентификатор (128 бит hex число) который чрезвычайно трудно предсказать.

usleep

usleep -- Задержка выполнения в микросекундах
Описание
void usleep(int micro_seconds);
 
Задержка выполнения программы в микросекундах(micro_seconds).

См. также sleep().


Функции mSQL

msql

msql -- посылает mSQL-запрос
Описание

int msql (string database, string query, int link_identifier);

 

Возвращает положительный идентификатор результата mSQL-запроса или false в случае ошибки.

msql() выбирает базу данных и выполняет на ней запрос. Если не указан необязательный идентификатор связи, функция будет пытаться найти открытую связь с mSQL-сервером и если ни одной связи найдено не будет, функция попытается создать ее, как если бы вызывалась функция msql_connect() без аргументов (см. msql_connect() ).

msql_affected_rows

msql_affected_rows -- возвращает количество строк результата запроса
Описание

int msql_affected_rows (int query_identifier);

 

Возвращает количество строк результата запроса (т.е. количество строк, возвращаемых SELECT, количество строк, модифицированных UPDATE или количество строк, удаленных DELETE).

См.также: msql_query()

msql_close

msql_close -- закрывает соединение с mSQL
Описание

int msql_close (int link_identifier);

 

Возвращает true в случае успеха и false в случае ошибки.

msql_close() закрывает связь с базой данных mSQL, которая ассоциирована с указанным идентификатором связи. Если идентификатор связи не указан, закрывается последняя открытая связь.

Заметьте, что обычно нет необходимости это делать, т.к. непостоянные связи автоматически закрываются после исполнения скрипта.

msql_close() не закрывает постоянную связь, открытую с помощью msql_pconnect() .

См.также: msql_connect() и msql_pconnect() .

msql_connect

msql_connect -- открывает соединение с mSQL
Описание

int msql_connect (string hostname);

 

В случае успеха возвращает положительный идентификатор связи или false в случае ошибки.

msql_connect() устанавливает соединение с mSQL сервером. Аргумент hostname - необязателен, и если он пропущен, подразумевается localhost.

В случае второго вызова функции msql_connect() с одинаковыми аргументами, новой связи не образуется, а вместо нее возвращается идентификатор уже открытого соединения.

Связь серверои будет закрыта сразу же, как только прекратится выполнение скрипта или ранее она не будет закрыта вызовом функции msql_close() .

См.также msql_pconnect() , msql_close() .

msql_create_db

msql_create_db -- создает базу данных в mSQL
Описание

int msql_create_db (string database name, int [ link_identifier ] );

 

msql_create_db() пытается создать новую базу данных на сервере, ассоциированном с указанным идентификатором связи.

См.также: msql_drop_db() .

msql_createdb

msql_createdb -- создает базу данных в mSQL
Описание

int msql_createdb (string database name, int [ link_identifier ] );

 

Идентична msql_create_db() .

msql_data_seek

msql_data_seek -- перемещает внутренний указатель строки
Описание

int msql_data_seek (int query_identifier, int row_number);

 

Возвращает true в случае успеха и false в случае ошибки.

msql_data_seek() передвигает внутренний указатель строки результата msql_data_seek() ассоциированного с указанным идентификатором запроса для того, чтобы указать на строку с конкретным номером. Вызов msql_fetch_row() возвратит эту строку.

См.также: msql_fetch_row() .

msql_dbname

msql_dbname -- возвращает название текущей базы данных mSQL
Описание

string msql_dbname (int query_identifier, int i);

 

msql_dbname() возвращает название базы данных записанной в положении i указателя, возвращаемого функцией msql_listdbs() . Для определения количества доступных баз данных может быть использована функция msql_numrows() .

msql_drop_db

msql_drop_db -- удаляет базу данных mSQL
Описание

int msql_drop_db (string database_name, int link_identifier);

 

Возвращает true в случае успеха и false в случае ошибки.

msql_drop_db() пытается полностью удалить с сервера базу данных, ассоциированную с указанным идентификатором связи.

См.также: msql_create_db() .

msql_dropdb

msql_dropdb -- удаляет базу данных mSQL
Описание

См. msql_drop_db() .

msql_error

msql_error -- возвращает ссобщение об ошибке последнего обращения функций к msql
Описание

string msql_error ( );

 

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

msql_fetch_array

msql_fetch_array -- извлекает строку как массив
Описание

int msql_fetch_array (int query_identifier);

 

Возвращает массив, который соответствует извлеченной строке. Если больше строк нет, возвращается false.

msql_fetch_array() это расширенная версия функции msql_fetch_row() . В дополнение к записи данных в массив с цифровыми индексами, данные также записываются в ассоциативный массив, использующий названия полей в качестве ключей.

Будьте осторожны при извлечении данных из запроса, который может возвратить запись, содержащую одно поле со значением 0 (или пустую строку, или NULL).

Важно заметить, что использование msql_fetch_array() работает совсем НЕ медленнее, чем msql_fetch_row() , причем обеспечивает при этом важные дополнения.

За дополнительной информацией обратитесь к msql_fetch_row()

msql_fetch_field

msql_fetch_field -- извлекает информацию о поле
Описание

object msql_fetch_field (int query_identifier, int field_offset);

 

Возвращает объект, содержащий информацию о поле

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

Свойствами объекта являются:

 

См.также msql_field_seek() .

msql_fetch_object

msql_fetch_object -- fetch row as object
Описание

int msql_fetch_object (int query_identifier);

 

Возвращает объект со свойствами, соответствующими извлеченной строке. Если больше нет строк, возвращается false.

msql_fetch_object() эквивалентно msql_fetch_array() , с одним исключением - вместо массива возвращается объект. Это значит, что доступ у данным может производиться только по названию поля, а не по их смещению (числа - неправильные названия полей).

По скорости работы функция иденитична msql_fetch_array() и msql_fetch_row() (разница очень маленькая).

См.также: msql_fetch_array() and msql_fetch_row() .

msql_fetch_row

msql_fetch_row -- возвращает строку как массив с числовыми индексами
Описание

array msql_fetch_row (int query_identifier);

 

Возвращает массив, соответствующий извлеченной строке. Если больше нет строк, то возвращается false.

msql_fetch_row() извлекает одну строку данных из результата, асслциированного с указанным идентификатором. Строка возвращается как массив. Каждая колонка результата записывается в массив со смещение, начиная со смещения 0.

Следующий вызов msql_fetch_row() возвратит следубщую строку из результата. Если строк больше нет, возвратится false.

См.также: msql_fetch_array() , msql_fetch_object() , msql_data_seek() , и msql_result() .

msql_fieldname

msql_fieldname -- получает название поля
Описание

string msql_fieldname (int query_identifier, int field);

 

msql_fieldname() возвращает название указанного поля. query_identifier - идентификатор запроса, и field - индекс поля. msql_fieldname($result, 2); возвратит название второго поля результата, ассоциированного с идентификатором результата.

msql_field_seek

msql_field_seek -- устанавливает смещение поля
Описание

int msql_field_seek (int query_identifier, int field_offset);

 

Перемещает указатель на указанное смещение поля. Если последующий вызов msql_fetch_field() не будет включать в себя смещение поля, будет возвращено текущее поле.

См.также: msql_fetch_field() .

msql_fieldtable

msql_fieldtable -- получает название таблицы для поля
Описание

int msql_fieldtable (int query_identifier, int field);

 

Возвращает название таблицы, откуда было извлечено поле field .

msql_fieldtype

msql_fieldtype -- получает тип поля
Описание

string msql_fieldtype (int query_identifier, int i);

 

msql_fieldtype() эквивалентно msql_fieldname() . Аргументы идентичны, но возвращается тип поля. Тип может быть следующим: "int", "string" или "real".

msql_fieldflags

msql_fieldflags -- получает флаги поля
Описание

string msql_fieldflags (int query_identifier, int i);

 

msql_fieldflags() возвращает флаги указанного поля. В текущий момент они могут быть следующими: "not null", "primary key", их комбинацией или "" (пустая строка).

msql_fieldlen

msql_fieldlen -- получает длину поля
Описание

int msql_fieldlen (int query_identifier, int i);

 

msql_fieldlen() возвращает длину указанного поля.

msql_free_result

msql_free_result -- высвобождает рузультат из памяти
Описание

int msql_free_result (int query_identifier);

 

msql_free_result() освобождает память, ассоциированную с query_identifier . Когда PHP завершает запрос, эта память осовобождается автоматически, таким образом Вам нужно вызывать эту функцию только тогда, когда Вы хотите быть уверены, что не используете слишком много памяти во время исполнения скрипта.

msql_freeresult

msql_freeresult -- освобождает результат из памяти
Описание

См. msql_free_result()

msql_list_fields

msql_list_fields -- перечисляет поля результата
Описание

int msql_list_fields (string database, string tablename);

 

msql_list_fields() извлекает информацию о данной таблице. Аргументами являются название базы данных и название таблицы. Возвращается указатель результата, который может быть использован функциями msql_fieldflags() , msql_fieldlen() , msql_fieldname() , и msql_fieldtype() . Идентификатор запроса - положительное целое число. Функция возвращает -1 если возникла ошибка. Строка, описывающая ошибку будет помещена в $phperrmsg , и до тех пор, пока функция не будет вызвана как @msql_list_fields() , строка ошибки будет выводится на печать.

См.также msql_error() .

msql_listfields

msql_listfields -- перечисляет поля результата
Описание

See msql_list_fields() .

msql_list_dbs

msql_list_dbs -- перечисляет базы данных mSQL на сервере
Описание

int msql_list_dbs (void);

 

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

msql_listdbs

msql_listdbs -- перечисляет базы данных mSQL на сервере
Описание

См. msql_list_dbs() .

msql_list_tables

msql_list_tables -- перечисляет таблицы в базе данных mSQL
Описание

int msql_list_tables (string database);

 

msql_list_tables() в качестве параметра использует название базы данных, и возвращает у казатель на результат, примерно, как и функция msql() . Для извлечения настоящих названий таблиц должна быть использована функция msql_tablename() , параметром в которую передается указатель на результат.

msql_listtables

msql_listtables -- перечисляет таблицы в базе данных mSQL
Описание

См. msql_list_tables() .

msql_num_fields

msql_num_fields -- получает количество полей в результате
Описание

int msql_num_fields (int query_identifier);

 

msql_num_fields() возвращает количество полей в данных резултата.

См.также: msql() , msql_query() , msql_fetch_field() , и msql_num_rows() .

msql_num_rows

msql_num_rows -- получает количество строк результата
Описание

int msql_num_rows (int query_identifier);

 

msql_num_rows() возвращает количество строк данных результата.

См.также: msql() , msql_query() , и msql_fetch_row() .

msql_numfields

msql_numfields -- получает количество полей результата
Описание

int msql_numfields (int query_identifier);

 

Идентична msql_num_fields() .

msql_numrows

msql_numrows -- получает количество строк результата
Описание

int msql_numrows (void);

 

Идентична msql_num_rows() .

msql_pconnect

msql_pconnect -- открывает постоянное соединение с mSQL
Описание

int msql_pconnect (string hostname);

 

Возвращает положительный идентификатор соединения в случае успеха или false в случае ошибки.

msql_pconnect() ведет себя во многом также как msql_connect() с двумя главными отличиями:

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

Во-вторых, соединение с SQl-сервером не закроется, когда завершится исполнение скрипты. Вместо этого, соединение останется открытым для будущего использования ( msql_close() не закроет соединение, установленно с помощью msql_pconnect()).

Такой тип связи, поэтому, называется 'постоянным'.

msql_query

msql_query -- посылает mSQL-запрос
Описание

int msql_query (string query, int link_identifier);

 

msql_query() посылает запрос к текущей активной базе данных на сервере, которая задается идентификатором связи. Если идентификатор связи не указан, то будет использоваться последняя открытая связь. Если связи вообще не открыто, то функция пытается установить связь как если бы вызывалась функция msql_connect() .

Возвращает положительный идентификатор запроса в случае успеха или false в случае ошибки.

См.также: msql() , msql_select_db() , and msql_connect() .

msql_regcase

msql_regcase -- создает регулярное выражение для контекстно независимого поиска
Описание

См. sql_regcase() .

msql_result

msql_result -- получает данные результата
Описание

int msql_result (int query_identifier, int i, mixed field);

 

Возвращает содержимое ячейки с указанной строки и смещения в указанном рузльтате.

msql_result() возвращает содержимое одной ячейки из результата. Аргумент field может быть смещением поля или его названием или же названием таблицы, точка, названием поля (fieldname.tablename). Если название колонки является псевдонимом ('select foo as bar from...'), используйте псевдоним вместо названия колонки.

При работе с большими результатами запросов, Вы должны рассмотреть возможность использования одной из функций, которые извлекают колонку целиком. Т.к. эти функции извлекают содержимое нескольких ячеек за один вызов, то они работают НАМНОГО быстрее, чем msql_result(). Также заметьте, что при указании числового смещения поля функция работает гораздо быстрее, чем при указании названия поля или аргумента название_таблицы.название_поля.

В качестве высокоскоростной альтернативы рекомендуем: msql_fetch_row() , msql_fetch_array() , и msql_fetch_object() .

msql_select_db

msql_select_db -- выбирает базу данных mSQL
Описание

int msql_select_db (string database_name, int link_identifier);

 

Возвращает true в случае успеха и false в случае ошибки.

msql_select_db() устанавливает текущую активную базу данных на сервере, которая ассоциируется с указанным идентификатором связи. Если не указан идентификатор связи, используется последняя открытая связь. Если не открыто ни одного соединения, функция попытается установить связь, как если бы вызывалась функция msql_connect(), и в дальнейшем использует установленную связь.

Каждый последующий вызов msql_query() будет сделан на активную базу данных.

См.также: msql_connect() , msql_pconnect() , и msql_query() .

msql_selectdb

msql_selectdb -- выбирает базу данных mSQL
Описание

См. msql_select_db() .

msql_tablename

msql_tablename -- получает название таблицы п=конкретного поля
Описание

string msql_tablename (int query_identifier, int field);

 

msql_tablename() использует в качестве аргументов указатель на рузультат, возвращаемый функцией msql_list_tables() и целый индекс и возвращает название таблицы. Функция msql_numrows() может быть использована для определения количества таблиц в результате запроса.

Пример 1. Использование msql_tablename()

<?php 
msql_connect ("localhost");
$result = msql_list_tables("wisconsin");
$i = 0;
while ($i < msql_numrows($result)) {
    $tb_names[$i] = msql_tablename($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++; 
}
?>


Функции MySQL

Эти функции обеспечивают доступ к серверам баз данных MySQL.

Больше информации о MySQL можно найти на сайте http://www.mysql.com/.


mysql_affected_rows

mysql_affected_rows -- возвращает количество столбцов, использованных предыдущими MySQL операциями
Описание

int mysql_affected_rows(int [link_identifier] );

 

mysql_affected_rows() возвращает количество столбцов, использованных запросами INSERT, UPDATE или DELETE на сервере, связываемом с определенным идентификатором связи(link_identifier). Если идентификатор связи не определен, используется последняя открытая связь.

Если последний запрос был запрос DELETE без условия WHERE, ВСЕ записи будут удалены из таблицы, но эта функция возвратит нуль.

Эта команда не действует при запросе SELECT, она действует только при запросах, изменяющих записи. Чтобы получить количество колонок возвращенных на запрос SELECT, используйте mysql_num_rows().


mysql_close

mysql_close -- закрывает MySQL соединение
Описание

int mysql_close(int [link_identifier] );

 

Возвращает: true при успешном завершении, false при ошибке

mysql_close() закрывает связь с базой данных MySQL, ассоциированной с определенным идентификатором связи(link identifier. Если идентификатор связи не определен, используется последняя открытая связь.

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

mysql_close() не закроет устойчивые связи сгенерированные функцией mysql_pconnect().

См. также: mysql_connect(), и mysql_pconnect().


mysql_connect

mysql_connect -- открывает соединение с MySQL сервером
Описание

int mysql_connect(string [hostname] [:port] , string [username] , string [password] );

 

Возвращает: Правильный идентификатор связи MySQL при успешном выполнении, или false при ошибке.

mysql_connect() устанавливает соединение с MySQL сервером. Все аргументы дополнительны(опциональны), и если они пропущены, то устанавливаются по умолчанию -('localhost', имя пользователя, который владеет процессом, пустой пароль). Строка "имя сервера"("hostname") также может содержать номер порта( подобно "hostname:port").

В случае, если будет сделан второй вызов mysql_connect() с теми же аргументами, никакая новая связь не установится - вместо этого, будет возвращен идентификатор связи уже открытой связи.

Как только выполнение сценария закончится, связь с сервером закроется, если оно не было явно закрыто более ранний вызовом mysql_close().

См. также mysql_pconnect(), и mysql_close().


mysql_create_db

mysql_create_db -- Создает базу данных MySQL
Описание

int mysql_create_db(string database name, int [link_identifier] );

 

mysql_create_db() пытается создавать новую базу данных на сервере связанном с определенным идентификатором связи.

См. также: mysql_drop_db(). Для совместимости с более ранними версиями может также быть использована функция mysql_createdb() .


mysql_data_seek

mysql_data_seek -- Перемещает внутренний указатель результата
Описание

int mysql_data_seek(int result_identifier, int row_number);

 

Возвращает: true при успешном выполнении , false при ошибке.

mysql_data_seek() перемещает внутренний указатель столбца в MySQL запросе связанного с определенным идентификатором результата чтобы указать на определенный номер столбца. Последующий вызов mysql_fetch_row() должно возвратить этот столбец.


mysql_db_query

mysql_db_query -- Посылает MySQL запрос
Описание

int mysql_db_query(string database, string query, int [link_identifier] );

 

Возвращает: Правильный идентификатор результата MySQL в результате запроса, или false при ошибке .

mysql_db_query() выбирает базу данных и выполняет запрос на нее. Если дополнительный идентификатор связи не определен, функция попытается найти открытую связь с MySQL сервером и если такая связь не обнаружена, то она попытается создать ее, как если бы функция mysql_connect() была вызвана без аргументов.

См. также mysql_connect(). Для обратной совместимости может быть также использована функция mysql().


mysql_drop_db

mysql_drop_db -- удаляет базу данных MySQL
Описание

int mysql_drop_db(string database_name, int [link_identifier] );

 

Возвращает: true при успешном выполнении , false при неудачном завершении.

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

См. также: mysql_create_db(). Для обратной совместимости может быть также использована функция mysql_dropdb().


mysql_errno

mysql_errno -- Возвращает номер сообщения об ошибке предыдущей операции MySQL
Описание

int mysql_errno(int [link_identifier] );

 

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

 

<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>

 

См. также: mysql_error()


mysql_error

mysql_error -- Возвращает текст сообщения об ошибке предыдущей операции MySQL
Описание

string mysql_error(int [link_identifier] );

 

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

 

<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>

 

См. также: mysql_errno()


mysql_fetch_array

mysql_fetch_array -- Выбрать результат как ассоциативный массив
Описание

array mysql_fetch_array(int result);

 

Возвращает результат строки запроса как массив, или false при отсутствии результата.

mysql_fetch_array() является расширенной версией функции mysql_fetch_row(). Кроме того, что она сохраняет данные в пронумерованных элементах, результатного массива, она также сохраняет ассоциативную связь, используя имена полей как ключи.

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

 

select t1.f1 as foo t2.f1 as bar from t1, t2

 

Важно заметить, что использование mysql_fetch_array() НЕСУЩЕСТВЕННО медленнее, чем использование mysql_fetch_row(), пока это обеспечивает необходимую задачу.

Более подробно см. mysql_fetch_row()

Пример 1. mysql fetch array

<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
    echo $row["user_id"];
    echo $row["fullname"];
}
mysql_free_result($result);
?>


mysql_fetch_field

mysql_fetch_field -- Получает информацию о столбце из результата и возвращает ее как объект.
Описание

object mysql_fetch_field(int result, int [field_offset] );

 

Возвращает объект, содержащий информацию о поле.

mysql_fetch_field() Может быть использована для получения информации о поле в определенном результате запроса. Если параметры поля не указаны, то будет запрошено поле, которое еще не было запрошено функцией mysql_fetch_field().

Свойствами объекта являются:

 

См. также mysql_field_seek()


mysql_fetch_lengths

mysql_fetch_lengths -- Получает максимальный размер данных для каждого выходного значения
Описание

array mysql_fetch_lengths(int result);

 

Возвращает: Массив, который соответствует длинам каждого поля в последней строке, выбранной mysql_fetch_row(), или false при ошибке .

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

См. также: mysql_fetch_row().


mysql_fetch_object

mysql_fetch_object -- Получает строку результата как объект.
Описание

object mysql_fetch_object(int result);

 

Возвращает объект с свойствами, который соответствует полученной строке, или false если нет результата.

mysql_fetch_object() подобна mysql_fetch_array(), с одним различием - вместо массива возвращается объект. Это означает, что Вы можете иметь доступ к данным только по именам полей, а не по их параметрам (индексные числа в данном случае являются неверным обращением).

Вообще говоря, эта функция идентична mysql_fetch_array(), такая же быстрая как mysql_fetch_row() (различие незначительное).

Пример 1. mysql fetch object

<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}
mysql_free_result($result);
?>

См. также: mysql_fetch_array() и mysql_fetch_row().


mysql_fetch_row

mysql_fetch_row -- Получите строку результата как пронумерованный массив
Описание

array mysql_fetch_row(int result);

 

Возвращает: Массив, который соответствует выбранным колонкам, или false если нет результата.

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

Последующий вызов функции mysql_fetch_row() должен возвратить следующую строку, или false если нет больше колонок.

См. также: mysql_fetch_array(), mysql_fetch_object(), mysql_data_seek(), mysql_fetch_lengths(), и mysql_result().


mysql_field_name

mysql_field_name -- Получает имя определенного поля в результате
Описание

string mysql_field_name(int result, int field_index);

 

mysql_field_name() возвращает имя указанного поля. Аргументами функции являются идентификатор результата и индекс поля, т.е. mysql_field_name($result,2);

Возвратит имя второй области в результат, связанный с идентификатором результата($result).

Для обратной совместимости также может быть использована функция mysql_fieldname().


mysql_field_seek

mysql_field_seek -- Устанавливает указатель запроса в определенное поле.
Описание

int mysql_field_seek(int result, int field_offset);

 

Поиск в определенном поле. Если следующий вызов mysql_fetch_field() не содержит указания поля, то должно быть возвращено именно это поле.

См. также: mysql_fetch_field().


mysql_field_table

mysql_field_table -- Получает имя таблицы, в которой находится указанное поле.
Описание

string mysql_field_table(int result, int field_offset);

 

Получает имя таблицы поля. Для обратной совместимости также может быть использована mysql_fieldtable() .


mysql_field_type

mysql_field_type -- Получает тип указанного поля в результате
Описание

string mysql_field_type(int result, int field_offset);

 

mysql_field_type() подобна функции mysql_field_name() . Аргументы идентичны, но возвращается тип поля. Это будет что-то из "int", "real", "string", "blob", или другие типы, которые подробно описываются в документации MySQL.

Пример 1. mysql field types

<?php 
mysql_connect("localhost:3306");
mysql_select_db("wisconsin");
$result = mysql_query("SELECT * FROM onek");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$i = 0;
$table = mysql_field_table($result, $i);
echo "Your '".$table."' table has ".$fields." fields and ".$rows." records <BR>";
echo "The table has the following fields <BR>"; 
while ($i < $fields) {
    $type  = mysql_field_type  ($result, $i);
    $name  = mysql_field_name  ($result, $i);
    $len   = mysql_field_len   ($result, $i);
    $flags = mysql_field_flags ($result, $i);
    echo $type." ".$name." ".$len." ".$flags."<BR>";
    $i++;
}
mysql_close();
?>

Для обратной совместимости mysql_fieldtype() также может быть использована.


mysql_field_flags

mysql_field_flags -- Получает флаги, связанные с указанным полем в результате
Описание

string mysql_field_flags(int result, int field_offset);

 

mysql_field_flags() возвращает флаги указанного поля. Флаги передаются как одно слово на флаг, разделенные одним пробелом, так, что Вы можете разделить возвращенную величину используя explode().

Если ваша текущая версия MySQL их поддерживает, могут быть получены следующие флаги : : "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp".

Для обратной совместимости mysql_fieldflags() также может быть использована.


mysql_field_len

mysql_field_len -- Возвращает длину указанного поля
Описание

int mysql_field_len(int result, int field_offset);

 

mysql_field_len() возвращает длину указанного поля. Для обратной совместимости mysql_fieldlen() также может быть использована.


mysql_free_result

mysql_free_result -- Освобождает память результата
Описание

int mysql_free_result(int result);

 

mysql_free_result() должна быть использована только если Вы беспокоитесь об использовании слишком большого объема памяти, во время работы вашего скрипта. Вся используемая результатом память для определенного идентификатора результата автоматически будет освобождена.

Для обратной совместимости mysql_freeresult() также может быть использована.


mysql_insert_id

mysql_insert_id -- Получает id сгенерированный предыдущим выполнением SQL-запроса INSERT
Описание

int mysql_insert_id(int [link_identifier] );

 

mysql_insert_id() возвращает ID сгенерированнуые для поля с автоинкрементом(AUTO_INCREMENTED). Эта функция не использует аргументов. Она возвратит автоматически сгенерированный номер ID возвращенный последним запросом INSERT.


mysql_list_fields

mysql_list_fields -- Показывает список полей MySQL в результате запроса
Описание

int mysql_list_fields(string database_name, string table_name, int [link_identifier] );

 

mysql_list_fields() извлекает информацию о заданной tablename таблице. Аргументы - имя базы данных и имя таблицы. После выполнения возвращается указатель результата, который может использоваться функциями mysql_field_flags(), mysql_field_len(), mysql_field_name(), и mysql_field_type().

Идентификатор результата является положительным целым. Функция возвращает -1 если происходит ошибка. Строка описсания ошибки будет помещена в переменную $phperrmsg, и если функция не была вызвана как @mysql() то затем также будет выведено это описание ошибки.

Для обратной совместимости mysql_listfields() также может быть использована.


mysql_list_dbs

mysql_list_dbs -- Показывает список доступных Баз Данных на сервере
Описание

int mysql_list_dbs(int [link_identifier] );

 

mysql_list_dbs() возвратит указатель результата, содержащий базы данных доступные текущему процессу mysql. Используйте функцию mysql_tablename(), чтобы просмотреть этот указатель результата.

Для обратной совместимости mysql_listdbs() также может быть использована.


mysql_list_tables

mysql_list_tables -- Показывает список таблиц в базе данных MySQL
Описание

int mysql_list_tables(string database, int [link_identifier] );

 

mysql_list_tables() берет имя базы данных и указатель результата очень подобно функции mysql_db_query(). Функция mysql_tablename() должна использоваться, чтобы извлечь фактические имена таблиц с указателя результата.

Для обратной совместимости mysql_listtables() также может быть использована.


mysql_num_fields

mysql_num_fields -- Получает количество полей в результате.
Описание

int mysql_num_fields(int result);

 

mysql_num_fields() получает количество полей в установленном результате.

См. также: mysql_db_query(), mysql_query(), mysql_fetch_field(), mysql_num_rows().

Для обратной совместимости mysql_numfields() также может быть использована.


mysql_num_rows

mysql_num_rows -- Получает количество столбцов в результате
Описание:

int mysql_num_rows(int result);

 

mysql_num_rows() получает количество столбцов в установленном результате

См. также: mysql_db_query(), mysql_query() и, mysql_fetch_row().

Для обратной совместимости mysql_numrows() также может быть использована.


mysql_pconnect

mysql_pconnect -- Открывает устойчивое соединение с MySQL-сервером
Описание

int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] );

 

Возвращает: Правильный MySQL идентификатор устойчивой связи при успешном выполнении , или false при ошибке.

mysql_pconnect() действует очень похоже на mysql_connect() с двумя важными различиями.

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

Во-вторых, соединение с сервером SQL не закроется, когда закончится выполнение сценария. Вместо этого, связь останется открытой для последующего использования (mysql_close() не закроет связи установленные функцией mysql_pconnect()).

Потому этот тип связей назван 'устойчивый'.


mysql_query

mysql_query -- Отправляет SQL-запрос на MySQL
Описание

int mysql_query(string query, int [link_identifier] );

 

mysql_query() посылает запрос в базу данных, к настоящему времени активную на сервере, который связан с определенным идентификатором связи. Если link_identifier не указан, используется последняя открытая связь. Если связь не открыта, функция пытается установить связь, как если бы была вызвана функция mysql_connect() и использует ее.

Эта функция возвращает TRUE или FALSE чтобы показать успешность выполнения запросов UPDATE, INSERT, и DELETE. При запросе SELECT она возвращает новый идентификатор результата. Ресурсы, использованные запросом затем могут быть освобождены вызовом функции mysql_free_result().

См. также: mysql_db_query(), mysql_select_db(), и mysql_connect().


mysql_result

mysql_result -- Получает данные результата
Описание

int mysql_result(int result, int row, mixed field);

 

mysql_result() возвращает содержимое одной ячейки из установленного результата MySQL. Аргументом поля может быть номер или имя поля, или параметр типа имя_таблицы-точка-имя_поля(fieldname.tablename). Если имя столбца заменено псевдонимом('select foo as bar from...'), используйте псевдоним вместо имени столбца.

Работая с больших результатами, Вы должны предусматривать использование одной из функций, которые выбирают целую строку(указано ниже) За счет того, что эти функции возвращают содержимое большого числа ячеек за один вызов функции, они ЗНАЧИТЕЛЬНО более быстрые чем mysql_result(). Также, имейте в виду, что определение аргумента поля числовым параметром, значительно более быстрое чем определение имени поля(fieldname) или использование аргумента tablename.fieldname.

Вызов mysql_result() не должен смешиваться с вызовами других функций, которые имеют дело с установленным результатом.

Рекомендуемые быстродействующие альтернативы: mysql_fetch_row(), mysql_fetch_array(), и mysql_fetch_object().


mysql_select_db

mysql_select_db -- Выбирает Базу Данных MySQL
Описание

int mysql_select_db(string database_name, int [link_identifier] );

 

Возвращает: true при успешном выполнении , false при ошибке

mysql_select_db() устанавливает текущую активную базу данных в сервере, которая связывается с определенным идентификатором связи. Если не определен идентификатор связи, принимается последняя открытая связь. Если связь не открыта, функция попытается установить связь, как если бы была вызвана функция mysql_connect().

Каждый последующий вызов mysql_query() будет произведен в активной базе данных.

См. также: mysql_connect(), mysql_pconnect(), и mysql_query()

Для обратной совместимости mysql_selectdb() также может быть использована.


mysql_tablename

mysql_tablename -- Получает имя таблицы, содержащей указанное поле.
Описание

string mysql_tablename(int result, int i);

 

mysql_tablename() берет указатель результата возвращенный функцией mysql_list_tables() а также целочисленный индекс и возвращает имя таблицы. Функция mysql_num_rows() может использоваться для того, чтобы определить количество таблиц на данном указателе результата.

Пример 1. mysql_tablename() example

<?php 
mysql_connect ("localhost:3306");
$result = mysql_listtables ("wisconsin");
$i = 0;
while ($i < mysql_num_rows ($result)) {
    $tb_names[$i] = mysql_tablename ($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++;
}
?>


Функции для работы с Sybase

sybase_affected_rows

sybase_affected_rows -- возвращает число строк, измененных последним запросом

Описание

int sybase_affected_rows(int [link_identifier] );

Возвращает: Число строк,измененных последним запросом.

Функция sybase_affected_rows() возвращает число строк, участвовавших в запросе вида INSERT, UPDATE или DELETE к серверу, указанному с помощью идентификтора соединения (link_identifier). Если идентификатор не задан, используется соединение, открытое последним.

Эта команда работает только с операторами, изменяющими записи. Для получения числа записей, возвращаемых оператором SELECT следует использовать функцию sybase_num_rows().


sybase_close

sybase_close -- завершает соединение с Sybase

Описание

int sybase_close(int link_identifier);

возвращет: true - в случае успеха, false - в случае ошибки

Функция sybase_close() завершает соединение с базой данных Sybase, обозначенное с помощью идентификатора соединения. Если он не указан, используется соединение, открытое последним.

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

Функция sybase_close() не завершает постоянные соединения, открытые с помощью sybase_pconnect().

Смотри также: sybase_connect(), sybase_pconnect().


sybase_connect

sybase_connect -- устанавливает соединение с Sybase - сервером

Описание

int sybase_connect(string servername, string username, string password);

Возвращает: В случае успеха: идентификатор соединения (положительное число), в противном случае - false.

Функция sybase_connect() устанавливает соединение с Sybase-сервером. Параметр 'servername' должен содержать существующее имя сервера, определенное в файле 'interfaces'.

Если функция sybase_connect() будет вызвана повторно с теми же параметрами, то новое соединение не установится, а будет возвращен идентификатор уже открытого соединения.

Соединение с сервером будет закрыто после завершения скрипта или раньше, посредством явного вызова функции sybase_close().

Смотри также: sybase_pconnect(), sybase_close().


sybase_data_seek

sybase_data_seek -- перемещает внутренний указатель записей

Описание

int sybase_data_seek(int result_identifier, int row_number);

Возвращает: true -в случае успеха, иначе - false

Функция sybase_data_seek() перемещает внутренний указатель в результирующем наборе записей, заданном с помощью идентификатора result_identifier, на строку с номером row_number. При последующем вызове функции sybase_fetch_row() будет извлечена эта строка.

Смотри также: sybase_data_seek().


sybase_fetch_array

sybase_fetch_array -- извлекает строку в виде массива

Описание

int sybase_fetch_array(int result);

Возвращает: Массив, содержащий извлеченную из набора данных строку или false - если строк больше нет.

Функция sybase_fetch_array() является расширенной версией функции sybase_fetch_row(). Доступ к элементам массива возможен не только по номерам , но и по именам столбцов таблицы.

Необходимо отметить, что функция sybase_fetch_array() работат НЕ намного МЕДЛЕННЕЕ, чем sybase_fetch_row(), и предоставляет дополнительные возможности по сравнению с последней.

Подробнее смотри также sybase_fetch_row()


sybase_fetch_field

sybase_fetch_field --получает информацию о столбце из набора данных

Description

object sybase_fetch_field(int result, int field_offset);

Возвращает объект, содержащий информацию о столбце

Функцию sybase_fetch_field() можно использовать для получения данных о столбцах результирующего набора result. Если смещение (номер) столбца в таблице (field_offset) не указано, то при каждом вызове sybase_fetch_field() будет извлекаться информация о следующем по порядку столбце.

Свойства объекта:

Смотри также sybase_field_seek()


sybase_fetch_object

sybase_fetch_object --извлекает строку в виде объекта

Описание

int sybase_fetch_object(int result);

Возвращает: Объект, свойства которого соответствуют извлеченной из набора данных строке, или false - если сторк больше нет.

Функция sybase_fetch_object() аналогична sybase_fetch_array() за одним исключением - она возвращает объект, а не массив. Фактически это означает, что доступ к данным осществляется по именам столбцов, а не по их смещению в строке (числовые значения не могут быть именами свойств).

С точки зрения скорости выполнения эта функция идентична sybase_fetch_array(), и работает практически также быстро, как и sybase_fetch_row() (разница в скорости незначительна).

Смотри также: sybase_fetch-array() и sybase_fetch-row().


sybase_fetch_row

sybase_fetch_row -- получает строку в виде пронумерованного массива

Описание

array sybase_fetch_row(int result);

Возвращает: Массив, соответствующий извлеченной строку, или false - если строк больше нет.

Функция sybase_fetch_row() извлекает строку данных из результирующего набора, заданного идентификатором result .Строка возвращается в виде массива. Каждый столбец хранится в виде элемента массива. Нумерация элементов начинается с 0.

Последующий вызов функции sybase_fetch_rows() вернет следующую строку запроса, или false, если строк больше нет.

Смотри также: sybase_fetch_array(), sybase_fetch_object(), sybase_data_seek(), sybase_fetch_lengths() и sybase_result().


sybase_field_seek

sybase_field_seek -- указывает смещение (номер) столбца в строке

Описание

int sybase_field_seek(int result, int field_offset);

Переходит к указанному столбцу. Если при следующем вызове sybase_fetch_field() не будет указан конкретный номер столбца, то будет возвращен этот столбец.

Смотри также: sybase_fetch_field().


sybase_free_result

sybase_free_result --освобождает память, занятую результирующим набором данных

Описание

int sybase_free_result(int result);

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


sybase_num_fields

sybase_num_fields -- получает число столбцов в результирующем наборе данных

Описание

int sybase_num_fields(int result);

sybase_num_fields() возвращает число столбцов в результирующем наборе

Смотри также: sybase_db_query(), sybase_query(), sybase_fetch_field(), sybase_num_rows().


sybase_num_rows

sybase_num_rows -- получает число столбцов в результирующем наборе данных

Описание

int sybase_num_rows(string result);

sybase_num_rows() rвозвращает число строк в результирующем наборе

Смотри также: sybase_db_query(), sybase_query() и sybase_fetch_row().


sybase_pconnect

sybase_pconnect -- открывает постоянное соединение с Sybase-сервером

Описание

int sybase_pconnect(string servername, string username, string password);

Возвращает: Идентификатор соединения с Sybase-сервером (положительное число) или false в случае ошибки

Функция sybase_pconnect() выполняется практически аналогично sybase_connect() с двумя главными отличиями:

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

Во-вторых, соединение с SQL-сервером не завершается после выполнения скрипта. Вместо этого, оно остается открытым для последующего использования. (Функция sybase_close() не закрывает соединения, установленные с помощью sybase_pconnect()).

Поэтому этот тип соединений называется 'постоянным'.


sybase_query

sybase_query -- посылает запрос на Sybase-сервер

Описание

int sybase_query(string query, int link_identifier);

Возвращает: в случае успеха- идентификатор результирующего набора данных (положительное число), или false- в случае ошибки.

Функция sybase_query() посылает запрос к текущей открытой базе данных на сервере, заданном иденитификатором link_identifier. Если этот идентификатор не указан, то используется соединение, открытое последним. Если нет ни одного соединения, то функция пытается установить новое ( как если бы была вызвана sybase_connect()), и затем его использовать.

Смотри также: sybase_db_query(), sybase_select_db() и sybase_connect().


sybase_result

sybase_result --получает результирующие данные

Описание

int sybase_result(int result, int i, mixed field);

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

Функция sybase_result() возвращает содержимое одной ячейки данных из результирующего набора Sybase. В качестве параметра field может быть указано смещение (номер) столбца, его имя или имя столбца и имя таблицы, указанные через точку. (имя_столбца.имя_таблицы). Если для столбца был указан псевдоним ('select foo as bar from...'), то вместо имени столбца следует использовать этот псевдоним.

При работе с большими наборами данных следует использовать функции (перечисленные ниже), которые извлекают из таблицы всю строку целиком. Поскольку эти функции за один вызов возвращают несколько ячеек данных, они работают ГОРАЗДО быстрее, чем sybase_result(). Кроме того, надо отметить, что скорость выполнения будет гораздо выше, если указывать числовое смещение столбца, а не параметр вида имя_столбца.имя_таблицы.

Рекомендуемые высокопроизводительные альтернативные функции: sybase_fetch_row(), sybase_fetch_array() и sybase_fetch_object().


sybase_select_db

sybase_select_db -- выбирает базу данных Sybase

Описание

int sybase_select_db(string database_name, int link_identifier);

Возвращает: true - в случае успеха, false - в случае ошибки

Функция sybase_select_db() устаналивает активную базу данных на сервере, заданном идентификатором link_identifier. Если это идентификатор не указан, то используется соединение, открытое последним. Если нет открытых соединений, то функция попытается установить новое (как если бы была вызвана sybase_connect()) и затем его использовать.

Все последующие вызовы sybase_query() будут работать с данной активной базой данных.

Смотри также: sybase_connect(), sybase_pconnect() и sybase_query()


Сетевые функции

fsockopen

fsockopen -- Открывает соединение с узлом в Интернете или Unix-системой через socket .
Описание

int fsockopen(string hostname, int port, int [errno], string [errstr]);

 

Открывает сокетное соединение с доменом Internet по адресу hostname на порт port и возвращает файловый указатель, который может использоваться функциями fgets(), fgetss() , fputs() , и fclose() . Если вызов завершается неудачей, он возвращает FALSE и если указаны дополнительные аргументы errno и errstr , то они будут использованы, чтобы указать фактическую системную ошибку, которая случилась на системном уровне при вызове connect(). Если возвращенное errno - 0, но функция вернула FALSE, это - признак того, что ошибка произошла перед вызовом connect(). Это наиболее вероятно, из-за проблемы инициализации сокета. Имейте в виду, что аргументы errno и errstr необязательно должны упоминаться.

Если port - 0 и ОС поддерживает доменные сокеты Unix (domain sockets), hostname будет использован для подключения в качестве filename доменного сокета Unix.

По умолчанию сокет откроется в режиме blocking mode. Вы можете переключить его в non-blocking mode используя set_socket_blocking().

Пример 1. fsockopen example

$fp = fsockopen("www.php.net", 80, &$errno, &$errstr);
if(!$fp) {
	echo "$errstr ($errno)<br>\n";
} else {
	fputs($fp,"GET / HTTP/1.0\n\n");
	while(!feof($fp)) {
		echo fgets($fp,128);
	}
	fclose($fp);
}
	  


set_socket_blocking

set_socket_blocking -- Устанавливает blocking/non-blocking режимы работы сокета
Описание

int set_socket_blocking(int socket descriptor, int mode);

 

Если mode отсутствует, данный дескриптор сокета переключится на non-blocking режим, а если присутствует, то переключится на blocking режим. Это влияет на вызовы типа fgets(), который читает из сокета. В non-blocking режиме fgets() вызов всегда будет возвращаться немедленно, в то время как в blocking режиме он ждет данные, чтобы стать доступным на сокете.


gethostbyaddr

gethostbyaddr -- Получает имя хоста Internet, соответствующее данному IP-адресу.
Описание

string gethostbyaddr(string ip_address);

 

Возвращает имя хоста Internet определенного аргументом ip_address . Если происходит ошибка, возвращается ip_address .

См. также gethostbyname() .


gethostbyname

gethostbyname -- Получает IP-адрес, соответствующий заданному имени хоста Интернет
Описание

string gethostbyname(string hostname);

 

Возвращает IP-адрес хоста, указанного аргументом hostname .

См. также gethostbyaddr() .


gethostbynamel

gethostbynamel -- Получает список IP-адресов, соответствующих заданному имени хоста Интернет.
Описание

array gethostbynamel(string hostname);

 

Возвращает список IP-адресов на которых разрешен хост Internet, указанный аргументом hostname.

См. также gethostbyname() , gethostbyaddr() , checkdnsrr() , getmxrr()


checkdnsrr

checkdnsrr -- Проверяет записи DNS, соответствующие заданному хосту или IP-адресу
Описание

int checkdnsrr(string host, string [type]);

 

Ищет в DNS записи типа type, соответствующие аргументу host. Возвращает true, если обнаруживаются какие-либо записи ; Возвращает false, если не обнаружены никакие записи или если произошла ошибка.

type может быть любым из значений: A, MX, NS, SOA, PTR, CNAME, или ANY. По умолчанию - MX.

host может или быть адресом IP или именем хоста.

См. также getmxrr() , gethostbyaddr() , gethostbyname() , gethostbynamel()


getmxrr

getmxrr -- Получает MX записи, соответствующие заданному имени хоста.
Описание

int getmxrr(string hostname, array mxhosts, array [weight]);

 

Ищет в DNS MX-записи, соответствующие hostname. Возвращает true если записи найдены; возвращает false если записей не найдено или произошла ошибка.

Список MX-записей может размещаться в массиве mxhosts. Если задано weight массива, то он может быть заполнен собранной информацией.

См. также checkdnsrr() , gethostbyname() , gethostbynamel() , gethostbyaddr()


openlog

openlog -- открывает соединение к системным логам (system logger)
Описание

int openlog(string ident, int option, int facility);

 

openlog() открывает для программы соединение c system logger . Строка ident добавляется к каждому сообщению. Значение для option и facility даются в следующем разделе. Использование openlog() не обязательно; Это может быть автоматически вызвано вызовом syslog() если необходимо, в этом случае ident по умолчанию будет false. См. также syslog() и closelog() .


syslog

syslog -- генерирует системное регистрационное сообщение
Описание

int syslog(int priority, string message);

 

syslog() генерирует регистрационное сообщение, для system logger. priority - комбинация легкости и уровня, значения для которых даются в следующем разделе. А другой аргумент является отсылаемым сообщением, кроме того, два символа %m заменятся строкой сообщения ошибки (strerror) соответствующей значению errno.

Больше информации о средствах syslog можно обнаружить на man-страницах для syslog в Unix-системах.

В WindowsNT, сервис syslog эмулируется использованием Event Log.


closelog

closelog -- закрывает соединение с system logger
Описание

int closelog(void);

 

closelog() закрывает дескриптор, используемый для записи в system logger. Использование closelog() необязательно.


debugger_on

debugger_on -- Разрешает внутренний PHP отладчик
Описание

int debugger_on(string address);

 

Разрешает внутренний PHP отладчик, соединяя его на address . Отладчик находится в стадии разработки.


debugger_off

debugger_off -- запрещает внутренний PHP отладчик
Описание

int debugger_off(void);

 

Запрещает внутренний PHP отладчик. Отладчик находится в стадии разработки.

Откатавает все незаконченные запросы на connection_id . Возвращает true при успехе, false при ошибке.


Функции ODBC

odbc_autocommit

odbc_autocommit -- Переключает режим автофиксирования (auto-commit)
Описание

int odbc_autocommit (int connection_id, int [ OnOff ]);

 

Без параметра OnOff эта функция возвращает статус автофиксирования для connection_id . True возвращается, если автофиксирование включено, false если оно выключено или если произошли ошибки.

Если параметр OnOff установлен в true, то автофиксирование включено, если параметр установлен в ложь, то автофиксирование отключено. True возвращается при успешном завершении, false - при ошибке.

По умолчанию автофиксирование включено для соединения. Отключение автофиксирования эквивалентно началу транзакции.

См. также odbc_commit() и odbc_rollback() .


odbc_binmode

odbc_binmode -- обработка двоичных данных
Описание

int odbc_binmode (int result_id, int mode);

 

(ODBC SQL types affected: BINARY, VARBINARY, LONGVARBINARY)

 

Когда двоичные данные SQL конвертируются в символьные данные C, каждый байт (8 битов) исходных данных представляется как два ASCII символа. Эти символы являются ASCII-представлением числа в шестнадцатиричной форме. Например, двоичное 00000001 конвертируется в "01" и двоичное 11111111 конвертируется в "FF" .

Таблица 1. Обработка данных типа LONGVARBINARY
binmode longreadlen результат
ODBC_BINMODE_PASSTHRU 0 передает
ODBC_BINMODE_RETURN 0 передает
ODBC_BINMODE_CONVERT 0 передает
ODBC_BINMODE_PASSTHRU 0 передает
ODBC_BINMODE_PASSTHRU >0 передает
ODBC_BINMODE_RETURN >0 возвращает как есть
ODBC_BINMODE_CONVERT >0 возвращает как символ

Если была использована функция odbc_fetch_into() , то передача означает, что для этих полей будет возвращена пустая строка.

Если result_id равен 0 , то установки принимаются по умолчанию для новых результатов.

Замечание: По умолчанию для longreadlen установлено 4096 и binmode по умолчанию - ODBC_BINMODE_RETURN . Обработка двоичных данных типа LONG также осуществляется odbc_longreadlen()


odbc_close

odbc_close -- Закрывает ODBC-соединение
Описание

void odbc_close (int connection_id);

 

odbc_close() закрывает соединение с сервером баз данных, связанное с указанным идентификатором соединения.

Замечание: Эта функция выдаст ошибку, если у этого соединения есть запущенные транзакции. Соединение останется открытым в этом случае.


odbc_close_all

odbc_close_all -- Закрывает все ODBC-соединения
Описание

void odbc_close_all (void);

 

odbc_close_all() закрывает все соединения с сервером(серверами) баз данных.

Замечание: Эта функция выдаст ошибку, если у этих соединений есть незавершенные транзакции. В этом случае соединения останутся открытыми.


odbc_commit

odbc_commit -- Фиксирует транзакцию ODBC
Описание

int odbc_commit (int connection_id);

 

Возвращает: true при успехе, false при ошибке. Все незаконченные транзакции на connection_id фиксируются.


odbc_connect

odbc_connect -- Соединяет с источником данных
Описание

int odbc_connect (string dsn, string user, string password);

 

возвращает идентификатор ODBC-соединения или 0 ( false ) при ошибке.

Идентификатор соединения, возвращаемый этой функцией, запрашивается другими ODBC функциями. Вы можете иметь несколько соединений открытых одновременно. Для постоянных соединений см. odbc_pconnect() .


odbc_cursor

odbc_cursor -- Получает имя курсора
Описание

string odbc_cursor (int result_id);

 

odbc_cursor возвращает имя курсора для указанного result_id.


odbc_do

odbc_do -- совпадает с odbc_exec()
Описание

string odbc_do (int conn_id, string query);

 

odbc_do запускает запрос на указанном соединении


odbc_exec

odbc_exec -- Подготовка и запуск SQL-запроса
Описание

int odbc_exec (int connection_id, string query_string);

 

Возвращает false при ошибке. Возвращает ODBC-идентификатор результата, если SQL команда была запущена успешно.

odbc_exec() посылает SQL-запрос серверу баз данных, определенному параметром connection_id . Этот параметр должен быть правильным идентификатором, возвращенным функцией odbc_connect() or odbc_pconnect() .

См. также: odbc_prepare() and odbc_execute() для многократных запусков SQL-запросов.


odbc_execute

odbc_execute -- запускает подготовленный SQL-запрос
Описание

int odbc_execute (int result_id, array [ parameters_array ]);

 

Запускает SQL-запрос, подготовленный функцией odbc_prepare() . Возвращает true при успешном запуске, false о обратном случае. Массив arameters_array необходим только если вы действительно имеете параметры в вашем SQL-запросе.


odbc_fetch_into

odbc_fetch_into -- Извлекает одну строку результата в массив
Описание

int odbc_fetch_into (int result_id, int [ rownumber ], array result_array);

 

Возвращает число столбцов в результате; false при ошибке. result_array может быть любого типа, так как он будет конвертирован в тип массив. Массив будет содержать значения полей начиная с индекса 0 массива.


odbc_fetch_row

odbc_fetch_row -- Извлекает строку
Описание

int odbc_fetch_row (int result_id, int [ row_number ]);

 

Если odbc_fetch_row() прошла успешно (строка существовала), то будет возвращено true . Если больше строк нет, то будет возвращеноfalse.

odbc_fetch_row() Извлекает строку из данных, возвращенных функцией odbc_do() / odbc_exec() . После вызова odbc_fetch_row() , доступ к полям той строки может быть осуществлен с помощью функции odbc_result() .

Если параметр row_number не указан, то odbc_fetch_row() бедет пытаться извлечь следующую строку в результирующем наборе. Вызов функции odbc_fetch_row() можно осуществлять как с, так и без параметра row_number .

Для использования результата более одного раза, вы можете вызвать odbc_fetch_row() с row_number 1, и затем продолжить выполнять odbc_fetch_row() без row_number для просмотра результата. Если драйвер не поддерживает извлечение строк по номеру, то параметр row_number игонорируется.


odbc_field_name

odbc_field_name -- Возвращает имя столбца
Описание

string odbc_fieldname (int result_id, int field_number);

 

odbc_field_name() возвращает имя поля в соответствии с указанным номером столбца в указанном ODBC-идентификаторе результата. Номера полей начинаются с 1. false возвращается при ошибке.


odbc_field_type

odbc_field_type -- тип данных поля
Описание

string odbc_field_type (int result_id, int field_number);

 

odbc_field_type() возвращает SQL тип поля в соответствии с номером в указанном ODBC-идентификаторе результата. Номера полей начинаются с 1.


odbc_field_len

odbc_field_len -- возвращает длину поля
Описание

string odbc_field_type (int result_id, int field_number);

 

odbc_field_type() возвращает длину поля в соответствии с номером в указанном ODBC-идентификаторе результата. Номера строк начинаются с 1.


odbc_free_result

odbc_free_result -- освобождает ресурсы, связанные с результатом
Описание

int odbc_free_result (int result_id);

 

Всегда возвращает true.

odbc_free_result() необходимо вызывать только если вы беспокоитесь об использовании большого количества памяти во время запуска вашего скрипта. Вся память результата будет автоматически освобождена при завершении скрипта. Но, если вы уверены, что больше нигде в скрипте не будете использовать данные результата, то вы можете вызвать odbc_free_result() , и память, связанная с параметром result_id будет освобождена.

 

Замечание: Если автофиксирование отключено (см. odbc_autocommit() ) вы можете вызвать odbc_free_result() и перед фиксированием все незавершенные транзакции будут откатаны назад.


odbc_longreadlen

odbc_longreadlen -- обработка полей типа LONG
Описание

int odbc_longreadlen (int result_id, int length);

 

(Обрабатываемые ODBC SQL типы : LONG, LONGVARBINARY) Число байтов, возвращенных PHP, контролируется длиной параметра. Если она установлена в 0, то данные типа Long передаются клиенту.

Замечание: Обработка полей типа LONGVARBINARY также осуществляется odbc_binmode()


odbc_num_fields

odbc_num_fields -- число столбцов в результате
Описание

int odbc_num_fields (int result_id);

 

odbc_num_fields() возвращает число полей (столбцов) в результате ODBC. Эта функция вернет -1 при ошибке. Аргумент является правильным результирующим идентификатором, возвращенным odbc_exec() .


odbc_pconnect

odbc_pconnect -- Открывает постоянное соединение с базой данных
Описание

int odbc_pconnect (string dsn, string user, string password);

 

Возвращает идентификатор ODBC соединения или 0 ( false ) при ошибке. Эта функция очень похожа на odbc_connect() , кроме того, что соединение в действительности не закрывается после завершения скрипта. Будующие запросы на соединение с той же комбинацией параметров dsn , user , password (через odbc_connect() и odbc_pconnect() ) могут повторно использовать постоянное соединение.

 

Замечание: Постоянные соединения не действуют, если PHP используется как CGI программа.

Для подробной информации о постоянных соединениях см. PHP3 FAQ.

odbc_prepare
odbc_prepare -- Подготавливает запрос для запуска
Описание

int odbc_prepare (int connection_id, string query_string);

 

Возвращает false при ошибке.

Возвращает ODBC-идентификатор результата, если SQL команда была подготовлена успешно. Идентификатор результата может быть использован для последеющего запуска запроса с помощью odbc_execute() .


odbc_num_rows

odbc_num_rows -- Число строк в результате
Описание

int odbc_num_rows (int result_id);

 

odbc_num_rows() возвращает число строк в ODBC результате. Эта функция вернет -1 при ошибке. Для команд INSERT, UPDATE и DELETE odbc_num_rows() вернет число обработанных строк. Для случая SELECT это может быть число доступных строк.

Замечание: Использование odbc_num_rows() для определения числа строк, доступных после SELECT вернет -1 у многих драйверов.


odbc_result

odbc_result -- получает результирующие данные
Описание

string odbc_result (int result_id, mixed field);

 

Возвращает содержимое поля.

поле может быть целым числом, содержащим номер столбца необходимого вам поля, или оно может быть строкой, содержащей имя поля. Например:

 

     $item_3 = odbc_result($Query_ID, 3 );
     $item_val = odbc_result($Query_ID, "val");

 

Первый вызов odbc_result() вернет значение третьего поля в текущей записи результата запроса. Второй вызов функции odbc_result() возвратит значение поля, имя которого "val" в текущей записи результата запроса. Ошибка возникнет, если параметр номера столбца для поля меньше, чем один или более номеров столбцов (или полей) в текущей записи. Так же ошибка возникнет, если запрашивается поле с именем, не совпадающем с именами полей в запрашиваемой таблице (таблицах).

Номера полей начинаются с 1. Field indices start from 1. Относительно способа возврата двоичных данных и данных типа LONG см. функции odbc_binmode () and odbc_longreadlen() .


odbc_result_all

odbc_result_all -- Выдача результата в виде HTML таблицы
Описание

int odbc_result_all (int result_id, string [ format ]);

 

Возвращает число строк в результате или false при ошибке.

odbc_result_all() выдает все строки из идентификатора результата, полученного от odbc_exec() . Результат выдается в формате HTML таблицы. С дополнительным строковым аргументом format , может быть осуществлено дополнительное форматирование таблицы.


odbc_rollback

odbc_rollback -- Откат транзакции
Описание

int odbc_rollback (int connection_id);

 

Откатавает все незаконченные запросы на connection_id . Возвращает true при успехе, false при ошибке.

 

Функции Oracle

Ora_Bind

Ora_Bind -- связывает переменной PHP с параметром Oracle
Описание

int ora_bind (int cursor, string PHP variable name, string SQL parameter name, int length, int [ type ]);

 

Возвращает true если связывание прошло успешно, в обратном случае - false. Делали об ошибке могут быть получены использую функции ora_error() и ora_errorcode() .

Эта функция связывает именованную переменную PHP с параметром SQL. Параметр SQL должен быть в виде ":имя". С дополнительным параметром типа вы можете определить SQL параметр как входной/выходной (0, по умолчанию), как входной (1) или как выходной (2). В PHP версии 3.0.1 вы можете использовать константы ORA_BIND_INOUT, ORA_BIND_IN and ORA_BIND_OUT вместо чисел.

Функция ora_bind должна вызывать после ora_parse() и до ora_exec() . Входные значения могут быть заданы присваиванием связанным переменным PHP, после вызова ora_exec() связанные переменные PHP содержат выходные значения, если они доступны.

 

<?php
ora_parse($curs, "declare tmp INTEGER; begin tmp := :in; :out := tmp; :x := 7.77; end;");
ora_bind($curs, "result", ":x", $len, 2);
ora_bind($curs, "input", ":in", 5, 1);
ora_bind($curs, "output", ":out", 5, 2);
$input = 765;
ora_exec($curs);
echo "Result: $result<BR>Out: $output<BR>In: $input";
?>

 


Ora_Close

Ora_Close -- закрывает курсор Oracle
Описание

int ora_close (int cursor);

 

Взвращает true, если закрытие завершилось успешно, иначе false. Детали об ошибке могут быть получены используя функции ora_error() и ora_errorcode() .

Эти функции закрывают курсор данных, открытый функцией ora_open() .


Ora_ColumnName

Ora_ColumnName -- возвращает имя результирующего столбца Oracle
Описание

string Ora_ColumnName (int cursor, int column);

 

Возвращает имя поля/столбца column под курсором cursor . Все буквы возвращенного имени возвращаются в верхнем регистре.


Ora_ColumnType

Ora_ColumnType -- возвращает тип результирующего столбца Oracle
Описание

string Ora_ColumnType (int cursor, int column);

 

Возвращает имя типа данных Oracle для поля/столбца column под курсором cursor . Возвращаемый тип будет один из следующих:


"VARCHAR2"
"VARCHAR"
"CHAR"
"NUMBER"
"LONG"
"LONG RAW"
"ROWID"
"DATE"
"CURSOR"

 


Ora_Commit

Ora_Commit -- фиксирует транзакцию Oracle
Описание

int ora_commit (int conn);

 

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() Эти функция фиксирует транзакцию Oracle. Транзакция определяется как все изменения на данном содинении с момента последней фиксации/отката, автофиксирование отключается при установке соединения.


Ora_CommitOff

Ora_CommitOff -- отключает атоматическое фиксирование
Описание

int ora_commitoff (int conn);

 

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .

Эти функция отключает автоматичиское фиксирование после каждого вызова ora_exec() .


Ora_CommitOn

Ora_CommitOn -- включает автоматическое фиксирование
Описание

int ora_commiton (int conn);

 

Эта функция включает автоматическое фиксирование после каждого вызова ora_exec() на данном соединении.

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .


Ora_Error

Ora_Error -- возвращает сообщение об ошибке Oracle
Описание

string Ora_Error (int cursor);

 

Возвращает сообщение об ошибке в виде XXX - NNNNN где XXX - место, где произошла ошибка, и NNNNN определяет сообщение об ошибке.

Параметр cursor может в версии PHP 3.0.6 быть идентификатором соединения.

В UNIX версии Oracle вы можете получить детали об ошибке, например, как эти: $ oerr ora 00001 00001, 00000, "unique constraint (%s.%s) violated" // *Причина: Попытка обновления или вставки уже существующего ключа. // Для trusted-конфигурации ORACLE в режиме DBMS MAC вы можете увидеть это // сообщение, если дубликат ключа есть на другом уровне // *Действие: Или удалите уникальное обновление или не вставляйте ключ


Ora_ErrorCode

Ora_ErrorCode -- возвращает код ошибки Oracle
Описание

int Ora_ErrorCode (int cursor);

 

Возвращает числовой код последней запущенной команды на указанном курсоре.

Параметр cursor может в версии PHP 3.0.6 быть идентификатором соединения.


Ora_Exec

Ora_Exec -- запускает синтаксически разобранную команду на курсоре Oracle
Описание

int ora_exec (int cursor);

 

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .


Ora_Fetch

Ora_Fetch -- возвращает строку данных из курсора
Описание

int ora_fetch (int cursor);

 

Возвращает true (строка была получена) или false (нет больше строк или произошла ошибка). Если ошибка произошла, то детали могут быть получены с помошью функций ora_error() и ora_errorcode() . Если ошибок не было, то ora_errorcode() вернет 0. Функция возвращает строку данных из указанного курсора.


Ora_GetColumn

Ora_GetColumn -- возвращает даные из полученной строки
Описание

mixed ora_getcolumn (int cursor, mixed column);

 

Возвращает поле данных. Если произошла ошибка, то будет возвращено False и ora_errorcode() вернет ненулевое значение. Отметим, однако, что при проверке на ошибку на результатах из этой функции можно получить true в случае, если там ошибки не было (результат NULL, пустая строка, число 0, строка "0").


Ora_Logoff

Ora_Logoff -- закрывает соединение Oracle
Описание

int ora_logoff (int connection);

 

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() . Отключает пользователей и осоединяется от сервера.


Ora_Logon

Ora_Logon -- открывает соединение Oracle
Описание

int ora_logon (string user, string password);

 

Устанавливает соединение между PHP и базай данных Oracle с указанными именем пользователя и паролем.

Соединение могут быть установлены с помощью SQL*Net заменяя имя TNS на пользователя как здесь:

 

$conn = Ora_Logon("user
@TNSNAME
", "pass");

 

Если у вас символьные данные вместе с не ASCII символами, вам следует убедится, что NLS_LANG установлена в вашем окружении. Для серверных модулей вам следует установить его в серверном окружении до запуска сервера.

Возвращает идентификатор соединение при успехе, или false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .


Ora_Open

Ora_Open -- открывает курсор Oracle
Описание

int ora_open (int connection);

 

Открывает курсор Oracle, связанный с соединением.

Возвращает идентификатор курсора или False при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .


Ora_Parse

Ora_Parse -- делает синтаксический разбор запроса SQL
Описание

int ora_parse (int cursor_ind, string sql_statement, int defer);

 

Эта функция разбирает запрос SQL или блок PL/SQL и связывает его с указанным курсором. Возвращает 0 при успехе или -1 при ошибке.


Ora_Rollback

Ora_Rollback -- откатывает транзакцию
Описание

int ora_rollback (int connection);

 

Эта функция отменяет транзакцию Oracle. (См. ora_commit() для определения транзакции).

Возвращает true при успехе, false при ошибке. Детали об ошибке могут быть получены с помощью функций ora_error() и ora_errorcode() .


Функции PDF

Вы можете использовать функции PDF для создания pdf файлов, если вы имеете библиотеку PDF (доступную на http://www.ifconnection.de/~tm/ ) Томаса Мерза. Пожалуйста, используйте документацию для библиотеки pdflib, поставляемой с исходным кодом или доступной на http://www.ifconnection.de/~tm/software/pdflib/PDFlib-0.6.pdf . Так как эта документация является не полной, документация библиотека pdflib должна быть просмотрена в первую очередь. Функции в бибилотеке pdflib и в php3 имеют одинаковые имена. Параметры также идентичны. Вам следует также понимать некоторые концепции pdf для еффективного применения этого модуля. Модуль pdf использует два новых типа переменных. Они называются pdfdoc и pdfinfo .


PDF_get_info

PDF_get_info -- Возвращает обычную информационную структуру для pdf документа
Описание

info pdf_get_info (string filename);

 

Функция PDF_get_info() возвращает обычную (принимаемую по умолчанию) информационную структуру для pdf документа. Эта структура может быть заполнена различной информацией, такой как автор, название и т.д.

Пример 1. PDF_get_info

<?php $info = PDF_get_info();
PDF_set_info_creator($info, "Name of Author") ?>

См. также PDF_set_info_creator() , PDF_set_info_subject() .


PDF_set_info_creator

PDF_set_info_creator -- Заполняет поле создателя информационной структуры
Описание

void pdf_set_info_creator (info info, string creator);

 

Функция PDF_set_info_creator() устанавливает создателя pdf документа. Она должна вызываться после PDF_get_info() и перед PDF_open() . Вызов функции после PDF_open() на даст никакого эффекта в документе.

Замечание: Эта функция не является частью библиотеки pdf.

См. также PDF_get_info() , PDF_set_info_subject() .


PDF_set_info_title

PDF_set_info_title -- Заполняет поле заголовка информационной структуры
Описание

void pdf_set_info_title (info info, string title);

 

Функция PDF_set_info_title() устанавливает заголовок pdf документа. Она должна вызываться после PDF_get_info() и перед PDF_open() . Вызов функции после PDF_open() не даст никакого эффекта в документе.

Примечание: Эта функция не является частью библиотеки pdf.

См. также PDF_get_info() , PDF_set_info_xxxxx() .


PDF_set_info_subject

PDF_set_info_subject -- заполняет поле темы информационной структуры
Описание

void pdf_set_info_subject (info info, string subject);

 

Функция PDF_set_info_subject() устанавливает тему pdf документа. Она должна вызываться после PDF_get_info() и перед PDF_open() . Вызов функции после PDF_open() не даст никакого эффекта в документе.

Замечание: Эта функция не является частью библиотеки pdf.

См. также PDF_get_info() , PDF_set_info_xxxxx() .


PDF_set_info_keywords

PDF_set_info_keywords -- Заполняет поле ключевых слов информационной структуры
Описание

void pdf_set_info_keywords (info info, string keywords);

 

Функция PDF_set_info_keywords() устанавливает ключевые слова pdf документа. Она должна вызываться после PDF_get_info() и перед PDF_open() . Вызов функции после PDF_open() не даст никакого эффекта в документе.

Замечание: Эта функция не является частью библиотеки pdf.

См. также PDF_get_info() , PDF_set_info_xxxxx() .


PDF_set_info_author

PDF_set_info_author -- Заполняет поле автора информационной структуры
Описание

void pdf_set_info_author (info info, string author);

 

Функция PDF_set_info_author() устанавливает автора pdf документа. Она должна вызываться после PDF_get_info() и перед PDF_open() . Вызов функции после PDF_open() не даст никакого эффекта в документе.

Замечание: Эта функция не является частью библиотеки pdf.

См. также PDF_get_info() , PDF_set_info_xxxxx() .


PDF_open

PDF_open -- Открывает новый pdf документ
Описание

int pdf_open (int descripterfile, int info);

 

Функция PDF_set_info_author() открывает новый pdf документ. Соответствующий файл должен быть открыт функцией fopen() и дескриптор файла использоваться как аргумент file . info является информационной структурой, которая должна быть создана функцией pdf_get_info() .

Замечание: Возвращаемое значение необходимо как первый параметр у всех функций записи в pdf документ.

См. также fopen() , PDF_get_info() .


PDF_close

PDF_close -- Закрывает pdf документ
Описание

void pdf_close (int pdf document);

 

Функция PDF_close() закрывает pdf документ int .

Замечание: Функция не закроет файл. Вам неоходимо вызвать отдельно функцию fclose() после pdf_close() .

См. также PDF_open() , fclose().



PDF_begin_page

PDF_begin_page -- начинает страницу
Описание

void pdf_begin_page (int pdf document, double height, double width);

 

Функция PDF_begin_page() начинает новую страницу высотой height и шириной width .

См. также PDF_end_page().



PDF_end_page

PDF_end_page -- завершает страницу
Описание

void pdf_end_page (int pdf document);

 

Функция PDF_end_page() завершает страницу.

См. также PDF_end_page() .


PDF_show

PDF_show -- выводит текст в текущей позиции
Описание

void pdf_show (int pdf document, string text);

 

Функция PDF_show() выводит строку text в текущей позиции.

См. также PDF_show_xy() , PDF_set_text_pos() .


PDF_show

PDF_show -- Выводит текст с определнной позиции
Описание

void pdf_show_xy (int pdf document, string text, double x-koor, double y-koor);

 

Функция PDF_show_xy() выводит строку text в позиции с координатами ( x-koor , y-koor ).

См. также PDF_show() .


PDF_set_font

PDF_set_font -- Выбирает текущий шрифт и его размер
Описание

void pdf_set_font (int pdf document, string font name, double size, string encoding);

 

Функция PDF_set_font() устанавливает текущий шрифт, его размер и кодировку. Вам потребуется указать Adobe Font Metrics (afm-файлы) для шрифта в пути шрифта (по умолчанию ./fonts).

См. также PDF_info() .


PDF_set_leading

PDF_set_leading -- Устанавливает промежуток между строками текста
Описание

void pdf_set leading (int pdf document, double distance);

 

Функция PDF_set_leading() устанавливает промежуток между строками текста. Он будет использоваться при выводе текста функцией PDF_continue_text() .

См. также PDF_continue_text() .


PDF_set_text_rendering

PDF_set_text_rendering -- Определяет, как текст отрисовывается (рендеринг)
Описание

void pdf_set_text_rendering (int pdf document, int mode);

 

Функция PDF_set_text_rendering() определяет, как текст отрисовывается. Возможные значения для параметра mode это 0=заливка текста, 1=контурный текст, 2=контурный текст с заливкой, 3=невидимый текст, 4=заливка текста и добавление его в контур обреза, 5=контурный текст с добалением в контур обреза, 6=контурный текст с заливкой и с добавлением к контур обреза, 7=добавление текста в контур обреза.


PDF_set_horiz_scaling

PDF_set_horiz_scaling -- Устанавливает горизонтальное масштабирование текста
Описание

void pdf_set_horiz_scaling (int pdf document, double scale);

 

Функция PDF_set_horiz_scaling() устанавливает горизонтальное масштабирование в scale процентов.


PDF_set_text_rise

PDF_set_text_rise -- Устанавливает увеличение текста
Описание

void pdf_set_text_rise (int pdf document, double value);

 

Функция PDF_set_text_rise() устанавливает увеличение текста на value едениц.


PDF_set_text_matrix

PDF_set_text_matrix -- Устанавливает тестовую матрицу
Описание

void pdf_set_text_matrix (int pdf document, array matrix);

 

Функция PDF_set_text_matrix() уставливает матрицу, которая описывает изменения, применяемые к текущему шрифту текста.


PDF_set_text_pos

PDF_set_text_pos -- Устанавливает позицию текста
Описание

void pdf_set_text_pos (int pdf document, double x-koor, double y-koor);

 

Функция PDF_set_text_pos() устанавливает позицию текста для следующего вызова функции pdf_show() .

См. также PDF_show() , PDF_show_xy() .


PDF_set_char_spacing

PDF_set_char_spacing -- Устанавливает межсимвольные промежутки
Описание

void pdf_set_char_spacing (int pdf document, double space);

 

Функция PDF_set_char_spacing() устанавливает промежутки между символами.

См. также PDF_set_word_spacing() , PDF_set_text_leading() .


PDF_set_word_spacing

PDF_set_word_spacing -- Устанавливает промежутки между словами
Описание

void pdf_set_word_spacing (int pdf document, double space);

 

Функция PDF_set_word_spacing() устанавливает промежутки между словами.

См. также PDF_set_char_spacing() , PDF_set_text_leading() .


PDF_continue_text

PDF_continue_text -- Выводит текст на следующей строке
Описание

void pdf_continue_text (int pdf document, string text);

 

Функция PDF_continue_text() выводит строку из text на следующей строке.

См. также PDF_show_xy() , PDF_set_text_leading() , PDF_set_text_pos() .


PDF_stringwidth

PDF_stringwidth -- Возвращает ширину текста при текущем шрифте
Описание

double pdf_stringwidth (int pdf document, string text);

 

Функция PDF_stringwidth() возвращает ширину строки в text . Этой функции необходим заранее установленный шрифт.

См. также PDF_set_font() .


PDF_save

PDF_save -- Сохраняет текущее окружение
Описание

void pdf_save (int pdf document);

 

Функция PDF_save() сохраняет текущее окружение. Она работает как postscript-команда gsave. Функция очень полезна при переводе или вращении объекта без затрагивания других объектов.

См. также PDF_restore() .


PDF_restore

PDF_restore -- Восстанавливает сохраненное ранее окружение
Описание

void pdf_restore (int pdf document);

 

Функция PDF_restore() восстанавливает окружение сохраненное функцией PDF_save() . Она работает postscript-команда grestore. Функция очень полезна при переводе или вращении объекта без затрагивания других объектов.

Example 1. PDF_get_info

<?php PDF_save($pdf);
// делает все виды вращений, трансформаций...
PDF_restore($pdf) ?>

См. также PDF_save() .


PDF_translate

PDF_translate -- Устанавливает начало системы координат
Описание

void pdf_translate (int pdf document, double x-koor, double y-koor);

 

Функция PDF_translate() устанавливает начало системы координат в точке ( x-koor , y-koor ).


PDF_scale

PDF_scale -- Устанавливает масштабирование
Описание

void pdf_scale (int pdf document, double x-scale, double y-scale);

 

Функция PDF_scale() устанавливает масштабный коэффициент для обоих осей.


PDF_rotate

PDF_rotate -- Устанавливает вращение
Описание

void pdf_rotate (int pdf document, double angle);

 

Функция PDF_rotate() Устанавливает вращение в процентах на угол angle .


PDF_setflat

PDF_setflat -- Устанавливает плоскость
Описание

void pdf_setflat (int pdf document, double value);

 

Функция PDF_setflat() устанавливает плоскость на величину от 0 до 100.


PDF_setlinejoin

PDF_setlinejoin -- Устанавливает параметр слияния линий
Описание

void pdf_setlinejoin (int pdf document, long value);

 

Функция PDF_setlinejoin() устанавливает параметр слияния линий между от 0 до 2.


PDF_setlinecap

PDF_setlinecap -- Устанавливает параметр формата строки
Описание

void pdf_setlinecap (int pdf document, int value);

 

Функция PDF_setlinecap() устанавливает параметр формата строки от 0 до 2.


PDF_setmiterlimit

PDF_setmiterlimit -- Устанавливает минимальную границу
Описание

void pdf_setmiterlimit (int pdf document, double value);

 

Функция PDF_setmiterlimit() устанавливает минимальную границу больше или равную 1.


PDF_setlinewidth

PDF_setlinewidth -- Устанавливает ширину линии
Описание

void pdf_setlinewidth (int pdf document, double width);

 

Функция PDF_setlinewidth() устанавливает ширину width линии.


PDF_setdash

PDF_setdash -- Устанавливает шаблон тире
Описание

void pdf_setdash (int pdf document, double white, double black);

 

Функция PDF_setdash() устанавливает шаблон тире, где white - еденицы белого и black - еденицы черного. Если они оба равны 0, то устанавливается сплошная линия.


PDF_moveto

PDF_moveto -- Устанавливает текущую точку
Описание

void pdf_moveto (int pdf document, double x-koor, double y-koor);

 

Функция PDF_moveto() устаналивает текущую точку в координатах x-koor и y-koor .


PDF_curveto

PDF_curveto -- Рисует кривую
Описание

void pdf_curveto (int pdf document, double x1, double y1, double x2, double y2, double x3, double y3);

 

Функция PDF_curveto() рисует кривую Безье с текущей тоски до точки с координатами ( x3 , y3 ) используя ( x1 , y1 ) и ( x2 , y2 ) как управляющие точки.

См. также PDF_moveto() , PDF_lineto() .


PDF_lineto

PDF_lineto -- Рисует линию
Описание

void pdf_lineto (int pdf document, double x-koor, double y-koor);

 

Функция PDF_lineto() рисует линию с текущей точки до точки с координатами ( x-koor , y-koor ).

См. также PDF_moveto() , PDF_curveto() .


PDF_circle

PDF_circle -- Рисует круг
Описание

void pdf_circle (int pdf document, double x-koor, double y-koor, double radius);

 

Функция PDF_circle() рисует круг с центром в точке ( x-koor , y-koor ) и радиусом radius .

См. также PDF_arc() .


PDF_arc

PDF_arc -- Рисует дугу
Описание

void pdf_arc (int pdf document, double x-koor, double y-koor, double radius, double start, double end);

 

Функция PDF_arc() рисует дугу с центром в точке с координатами ( x-koor , y-koor ) и радиусом radius , начинает с угла start и заканчивает углом end .

См. также PDF_circle() .


PDF_rect

PDF_rect -- Рисует прямоугольник
Описание

void pdf_rect (int pdf document, double x-koor, double y-koor, double width, double height);

 

Функция PDF_rect() Рисует прямоугольник с нижним левым углом в точке ( x-koor , y-koor ). Ширина определяется параметром widgth . Высота определяется параметром height .


PDF_closepath

PDF_closepath -- Закрывает контур
Описание

void pdf_closepath (int pdf document);

 

Функция PDF_closepath() закрывает текущий контур.


PDF_stroke

PDF_stroke -- Рисует линию вдоль контура
Описание

void pdf_stroke (int pdf document);

 

Функция PDF_stroke() рисует линию вдоль текущего контура.

См. также PDF_closepath() , PDF_closepath_stroke() .


PDF_closepath_stroke

PDF_closepath_stroke -- Закрывает контур и рисует вдоль него линию
Описание

void pdf_closepath_stroke (int pdf document);

 

Функция PDF_closepath_stroke() является сочетанием функций PDF_closepath() и PDF_stroke() . Затем контур сбрасывается.

См. также PDF_closepath() , PDF_stroke() .


PDF_fill

PDF_fill -- Заполняет текущий контур
Описание

void pdf_fill (int pdf document);

 

Функция PDF_fill() заполняет область текущего контура текущим цветом заполнения.

См. также PDF_closepath() , PDF_stroke() , PDF_setgray_fill() , PDF_setgray() , PDF_setrgbcolor_fill() , PDF_setrgbcolor() .


PDF_fill_stroke

PDF_fill_stroke -- Заполняет о обрезает текущий контур
Описание

void pdf_fill_stroke (int pdf document);

 

Функция PDF_fill_stroke() заполняет область текущего контура текущим цветом заполнения и рисует текущий контур.

См. также PDF_closepath() , PDF_stroke() , PDF_fill() , PDF_setgray_fill() , PDF_setgray() , PDF_setrgbcolor_fill() , PDF_setrgbcolor() .


PDF_closepath_fill_stroke

PDF_closepath_fill_stroke -- Закрывает, заполняет и обрезает текущий контур
Описание

void pdf_closepath_fill_stroke (int pdf document);

 

Функция PDF_closepath_fill_stroke() закрывает, заполняет область текущего контура текущим цветом заполнения и рисует текущий контур.

См. также PDF_closepath() , PDF_stroke() , PDF_fill() , PDF_setgray_fill() , PDF_setgray() , PDF_setrgbcolor_fill() , PDF_setrgbcolor() .


PDF_endpath

PDF_endpath -- Заканчивает текущий контур
Описание

void pdf_endpath (int pdf document);

 

Функция PDF_endpath() заканчивает текущий контур, но не закрывает его.

См. также PDF_closepath() .


PDF_clip

PDF_clip -- Заканчивает текущий контур
Описание

void pdf_clip (int pdf document);

 

Функция PDF_clip() прекращает рисование в текущем контуре.


PDF_setgray_fill

PDF_setgray_fill -- Устанавливает серый цвет заполнения
Описание

void pdf_setgray_fill (int pdf document, double value);

 

Функция PDF_setgray_fill() делает текущим серый цвет для заполнения контура.

См. также PDF_setrgbcolor_fill() .


PDF_setgray_stroke

PDF_setgray_stroke -- Устанавливает серый цвет рисования
Описание

void pdf_setgray_stroke (int pdf document, double gray value);

 

Функция PDF_setgray_stroke() далает текущий цвет рисования серым.

См. также PDF_setrgbcolor_stroke() .


PDF_setgray

PDF_setgray -- Устанавливает серый цвет рисования и заполнения
Описание

void pdf_setgray (int pdf document, double gray value);

 

Функция PDF_setgray_stroke() делает текущие цвет рисования и заполнения серым.

См. также PDF_setrgbcolor_stroke() , PDF_setrgbcolor_fill() .


PDF_setrgbcolor_fill

PDF_setrgbcolor_fill -- Устанавливает RGB значение цвета заполнения
Описание

void pdf_setrgbcolor_fill (int pdf document, double red value, double green value, double blue value);

 

Функция PDF_setrgbcolor_fill() делает текущим RGB цвет для заполнения контура.

См. также PDF_setrgbcolor_fill() .


PDF_setrgbcolor_stroke

PDF_setrgbcolor_stroke -- Устанавливает RGB значение цвета рисования
Описание

void pdf_setrgbcolor_stroke (int pdf document, double red value, double green value, double blue value);

 

Функция PDF_setrgbcolor_stroke() делает текущим RGB цвет рисования.

См. также PDF_setrgbcolor_stroke() .


PDF_setrgbcolor

PDF_setrgbcolor -- Устанавливает RGB цвет рисования и заполнения
Описание

void pdf_setrgbcolor (int pdf document, double red value, double green value, double blue value);

 

Функция PDF_setrgbcolor_stroke() делает текущим RGB цвет рисования и заполнения.

См. также PDF_setrgbcolor_stroke() , PDF_setrgbcolor_fill() .


PDF_add_outline

PDF_add_outline -- Добавляет закладку для текущей страницы
Описание

void pdf_add_outline (int pdf document, string text);

 

Функция PDF_add_outline() добавляет закладку с текстом text , которая указывает на текущую страницу.


PDF_set_transition

PDF_set_transition -- Устанавливает переход между страницами
Описание

void pdf_set_transition (int pdf document, int transition);

 

Функция PDF_set_transition() устанавливает переход между указанными следующими страницами. Значения параметра transition могут быть 0 для никакого перехода, 1 для двух линий, проходящих через экран, открывая страницу, 2 для нескольких линий, проходящих через экран, открывая страницу, 3 для прямоугльника, открывающего страницу, 4 для одной линии, проходящей через экран, открывая страницу, 5 для растворения старой страницы, открывая новую, 6 для эффекта растворения, перемещяющегося от одного края экрана, к другому, 7 для простой смены старой страницы новой (по умолчанию).


PDF_set_duration

PDF_set_duration -- Устанавливает паузу между страницами
Описание

void pdf_set_duration (int pdf document, double duration);

 

Функция PDF_set_duration() устанавливает паузу между следующими страницами в секундах.


Функции PostgreSQL

Postgres, изначально разработанный в компьютерном научном отделе университета Беркли, открыл многие объектно-ориентированные концепции, ставшие теперь доступными коммерческих базах данных. Pestgres обеспечивает поддержку языка SQL92/SQL3, целостность транзакций, и расширение типов. PostgreSQL является общедоступной СУБД с открытым кодом.

PostgreSQL доступен бесплатно. Посленяя версия доступна на www.postgreSQL.org.

С версии 6.3 (от 2 марта 1998 года) PostgreSQL использует сокеты домена UNIX. Этот сокет может быть найден в каталоге /tmp/.s.PGSQL.5432. Это свойство может быть включено с помощью флага '-i' в postmaster и это означает "прослушивание сокетов TCP/IP", аналогично сокетам домена UNIX.

Таблица 1. Postmaster and PHP
Postmaster PHP Статус
postmaster & pg_connect("", "", "", "", "dbname"); OK
postmaster -i & pg_connect("", "", "", "", "dbname"); OK
postmaster & pg_connect("localhost", "", "", "", "dbname"); Невозможно соедениться с сервером PostgreSQL: сбой connectDB(): Запущен ли postmaster и разрешено ли соединение TCP/IP (с флагом -i) на 'localhost' порт '5432'? в /path/to/file.php3 с строке 20.
postmaster -i & pg_connect("localhost", "", "", "", "dbname"); OK

Можно также установить соединение с помощью команды: $conn = pg_Connect("host=localhost port=5432 dbname=chris");

Для использования интерфейса больших объектов (large objects) необходимо заключить их в блок транзакции. Блок транзакции начинается begin и, если транзакция прошла успешно, завершается commit и end. Если транзакция дала сбой, то транзакция должна быть закрыта с помощью abort и rollback.

Пример 1. Использование больших объектов

<?php
$database = pg_Connect ("", "", "", "", "jacarta");
pg_exec ($database, "begin");
    $oid = pg_locreate ($database);
    echo ("$oid\n");
    $handle = pg_loopen ($database, $oid, "w");
    echo ("$handle\n");
    pg_lowrite ($handle, "gaga");
    pg_loclose ($handle);
pg_exec ($database, "commit")
pg_exec ($database, "end")
?>


pg_Close

pg_Close -- закрывает соединение PostgreSQL
Описание
bool pg_close(int connection);

Возвращает false, если connection - не правильный номер соединения. Закрывает соединение с базой PostgreSQL, связанное с указанным номером соединения.


pg_cmdTuples

pg_cmdTuples -- возвращает число вызванных tuples
Описание
int pg_cmdtuples(int result_id);

pg_cmdTuples() возвращает число tuples (требований), вызванных запросами INSERT, UPDATE, и DELETE. Если нет вызванных tuple, то функция вернет 0.

Пример 1. pg_cmdtuples

<?php
$result = pg_exec($conn, "INSERT INTO verlag VALUES ('Autor')");
$cmdtuples = pg_cmdtuples($result);
echo $cmdtuples . " <- cmdtuples affected.";
?>


pg_Connect

pg_Connect -- открывает соединение
Описание
int pg_connect(string host, string port, string options, string tty, string dbname);

Возвращает номер соединения при успехе или false, если соединение не может быть установлено. Открывает соединение с базой PostgreSQL. Каждый из аргументов должен быть в кавычках, включая номер порта. Аргементы options и tty являются дополнительными и могут быть опущены. Эта функция возвращает номер соединения, который необходим другим функциям PostgreSQL. Вы можете иметь одновременно несколько открытых соединений.

Соединение может быть также установлено следующей командой: $conn = pg_connect("dbname=marliese port=5432"); Дополнительные параметры (кроме dbname и port) - это host, tty и options.

См. также pg_pConnect().


pg_DBname

pg_DBname -- имя базы данных
Описание
string pg_dbname(int connection);

Возвращает имя базы данных, с которой соединен указанный номер соединения PostgreSQL, или возвращает false, если указан не правильный номер соединения.


pg_ErrorMessage

pg_ErrorMessage -- сообщение об ошибке
Описание
string pg_errormessage(int connection);

Возвращает строку, содержащую сообщение об ошибке, или false при сбое. Детали об ошибке, вероятно, не могут быть получены с помощью pg_errormessage(), если ошибка произошла при последнем обращении к базе данных, для которой существует верный номер соединения, то функция вернет строку, содержащую сообщение об ошибке, выданное сервером.


pg_Exec

pg_Exec -- запускает запрос
Описание
int pg_exec(int connection, string query);

Возвращает признак результата, если запрос может быть запущен, false при ошибке или при неверном номере соединения. Детали об ошибке могут получены с помощью функции pg_ErrorMessage() , если номер соединения верный. Функция посылает SQL запрос базе данных PostgreSQL, определяемой номером соединения. Connection должен быть верным номером соединения, который возвращается функцией pg_Connect(). Возвращаемое этой функцией значение является необходимым для доступа к результатам других функций PostgreSQL.

Замечание: PHP2 возвращает 1, если запрос не должен возвращать данных (например, при вставке или обновлении) и больше 1, даже при выборках, которые ничего не возвращают. Таких допущений нет в PHP3.


pg_Fetch_Array

pg_Fetch_Array -- возвращает запись как массив
Описание
array pg_fetch_array(int result, int row);

Возвращает массив, который ссылается на полученную запись, или false если больше нет записей.

pg_fetch_array() является расширенной версией pg_fetch_row(). В дополнение к хранению данных под числовыми индексами в результирующем массиве, функция также хранит данные под ассоциативными индексами, используя номера полей в качестве ключей.

Необходимо отметить, что функция pg_fetch_array() практически одинакова по скорости с pg_fetch_row(), хотя и предоставляет дополнительные возможности.

Для дополнительной информации см. pg_fetch_row()

Пример 1. Массив записи PostgreSQL

<?php 
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "An error occured.\n";
    exit;
}

$arr = pg_fetch_array ($result, 0);
echo $arr[0] . " <- array\n";

$arr = pg_fetch_array ($result, 1);
echo $arr["author"] . " <- array\n";
?>


pg_Fetch_Object

pg_Fetch_Object -- возвращает запись как объект
Описание
object pg_fetch_object(int result, int row);

Возвращает объект со свойствами, которые ссылаются на полученную запись, или false если нет больше записей.

pg_fetch_object() совпадает с pg_fetch_array(), кроме того, что возвращается объект вместо массива. Это означает, что вы можете обратиться к данным только по имени поля, и а не по номеру или неправильному имени свойства.

По скорости функция идентична функции pg_fetch_array(), и почти такая же быстрая как pg_fetch_row() (разница незначительная).

См. также: pg_fetch_array() and pg_fetch_row().

Пример 1. Полученние объекта Postgres

<?php 
$database = "verlag";
$db_conn = pg_connect ("localhost", "5432", "", "", $database);
if (!$db_conn): ?>
    <H1>Ошибка соединения с базой <? echo $database ?></H1> <?
    exit;
endif;

$qu = pg_exec ($db_conn, "SELECT * FROM verlag ORDER BY autor");
$row = 0; // postgres необходим счетчик записей, в отличие от других СУБД

while ($data = pg_fetch_object ($qu, $row)):
    echo $data->autor." (";
    echo $data->jahr ."): ";
    echo $data->titel."<BR>";
    $row++;
endwhile; ?>

<PRE><?
$fields[] = Array ("autor", "Author");
$fields[] = Array ("jahr",  "  Year");
$fields[] = Array ("titel", " Title");

$row= 0; // postgres необходим счетчик записей, в отличие от других 
while ($data = pg_fetch_object ($qu, $row)):
    echo "----------\n";
    reset ($fields);
    while (list (,$item) = each ($fields)):
        echo $item[1].": ".$data->$item[0]."\n";
    endwhile;
    $row++;
endwhile;
echo "----------\n"; ?>
</PRE> 


pg_Fetch_Row

pg_Fetch_Row -- получает запись как нумерованный массив
Описание
array pg_fetch_row(int result, int row);

Возвращает массив, который ссылается на полученную запись, или false, если больше нет записей.

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

Последующий вызов функции pg_fetch_row() возвратит следующую запись в результирующем наборе, или false, если записей больше нет.

См. также: pg_fetch_array(), pg_fetch_object(), pg_result().

Пример 1. Полученние записи Postgres

<?php 
$conn = pg_pconnect("","","","","publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "Произошла ошибка.\n";
    exit;
}

$row = pg_fetch_row ($result, 0);
echo $row[0] . " <- row\n";

$row = pg_fetch_row ($result, 1);
echo $row[0] . " <- row\n";

$row = pg_fetch_row ($result, 2);
echo $row[1] . " <- row\n";
?>


pg_FieldIsNull

pg_FieldIsNull -- Проверяет поле на нулевое значение
Описание
int pg_fieldisnull(int result_id, int row, mixed field);

Проверяет нулевое (NULL) значение у поля или нет. Возвращает 0, если поле в указанной записи не нулевое. Возвращает 1, если поле ы указанное записи нулевое. Поле может определяться номером или именем. Нумерация записей начинается с 0.


pg_FieldName

pg_FieldName -- возвращает имя поля
Описание
string pg_fieldname(int result_id, int field_number);

pg_FieldName() возвращет имя поля, соответствующее указанному номеру столбца в указанном идентификаторе результата PostgreSQL. Нумерация полей начинается с 0.


pg_FieldNum

pg_FieldNum -- возвращает номер столбца
Описание
int pg_fieldnum(int result_id, string field_name);

pg_FieldNum() возвращает номер столбца, соответствующий указанному имени поля в указанном идентификаторе результата PosgreSQL. Нумерация полей начинается с 0. Функция вернет -1 при ошибке.


pg_FieldPrtLen

pg_FieldPrtLen -- Возвращает печатную длину
Описание
int pg_fieldprtlen(int result_id, int row_number, string field_name);

pg_FieldPrtLen() возвращает действительную печатную длину (число символов) указанных данных в результате PosgreSQL. Нумерация записей начинается с 0. При ошибке функция вернет -1.


pg_FieldSize

pg_FieldSize -- возвращает внутренний размер хранения именованного поля
Описание
int pg_fieldsize(int result_id, string field_name);

pg_FieldSize() возвращает внутренний размер хранения указанного именованного поля в указанном результате PosgreSQL. Размер поля -1 говорит о переменной длине поля. Эта функция вернет false при ошибке.


pg_FieldType

pg_FieldType -- возвращает тип соответствующего именованного поля
Описание
int pg_fieldtype(int result_id, int field_number);

pg_FieldType() возвращает строку, содержащую имя типа указанного поля в указанном идентификаторе результата PosgreSQL. Нумерация полей начинается с 0.


pg_FreeResult

pg_FreeResult -- освобождает память
Описание
int pg_freeresult(int result_id);

pg_FreeResult() необходимо использовать только если вы беспокоитесь об использовании слишком большего объема памяти при работе вашего скрипта. Вся память резульата будет автоматически освобождена при завершении работы скрипта. Но, если вы уверены, что вам больше не потребуется память результата в скрипте, то вы можете вызвать pg_FreeResult(), с идентификатором результата в качестве параметра, и соответствующая память результата будет освобождена.


pg_GetLastOid

pg_GetLastOid -- возвращает идентификатор последнего объекта
Описание
int pg_getlastoid(int result_id);

pg_GetLastOid() может быть использована для получения идентификатора, присвоенного запросу на вставку, если идентификатор результата использовался последней командой pg_Exec() и это была команда SQL INSERT. Эта функция вернет положительное целое число, если это был верный идентификатор. Функция вернет -1, если произошла ошибка или последня команда pg_Exec() не была INSERT.


pg_Host

pg_Host -- возвращает имя узла
Описание
string pg_host(int connection_id);

pg_Host() возвращает имя узла, с которым соединен указанный идентификатор соединения PostgreSQL.


pg_loclose

pg_loclose -- закрывает большой объект
Описание
void pg_loclose(int fd);

pg_loclose() закрывает отображение большого объекта (ILO). fd является дескриптором файла для большого объекта из pg_loopen().


pg_locreate

pg_locreate -- создает большой объект
Описание
int pg_locreate(int conn);

pg_locreate() создает отображение большого объекта (ILO) и возвращает идентификатор большого объекта. conn определяет верное соединение с базой данных. Режимы доступа PostgreSQL INV_READ, INV_WRITE, и INV_ARCHIVE не поддерживаются, объект создается всегда и для чтения и для записи. INV_ARCHIVE был удален из самой PostgreSQL (версии 6.3 и выше).


pg_loopen

pg_loopen -- открывает большой объект
Описание
int pg_loopen(int conn, int objoid, string mode);

pg_loopen() открывает отображение большого объекта (ILO) и возвращает дескриптор файла большого объекта. Дескриптор файла содержит информацию о соединении. Не закрывайте соединение до закрытия дескриптора файла большого объекта. objoid определяет верный идентификатор большого объекта и mode может быть одним из "r", "w", or "rw".


pg_loread

pg_loread -- считывает большой объект
Описание
string pg_loread(int fd, int len);

pg_loread() считывает len байтов из большого объекта и возвращает их в виде строки. fd определяет верный декскриптор файла большого объекта len определяет максимально возможный размер сегмента большого объекта.


pg_loreadall

pg_loreadall -- считывает весь большой объект
Описание
void pg_loreadall(int fd);

pg_loreadall() считывает большой объект и отправляет его прямо в броузер, после всех необходимых заголовков. В основном применяется для отправки двоичных данных, таких как изображения и звуковые файлы.


pg_lounlink

pg_lounlink -- удаляет большой объект
Описание
void pg_lounlink(int conn, int lobjid);

pg_lounlink() удаляет большой объект с идентификатором большого объекта lobjid.


pg_lowrite

pg_lowrite -- записывает в большой объект
Описание
int pg_lowrite(int fd, string buf);

pg_lowrite() записывает данные в большой объект из переменной buf и возвращает число записанных данных или false при ошибке. fd является дескриптором файла большого объекта из функции pg_loopen().


pg_NumFields

pg_NumFields -- возвращает количество полей
Описание
int pg_numfields(int result_id);

pg_NumFields() возвращает количестов полей (столбцов) в результате PostgreSQL. Параметр является верным идентификатором результата, полученным функцией pg_Exec(). Эта функция вернет -1 при ошибке.


pg_NumRows

pg_NumRows -- возвращает число записей
Описание
int pg_numrows(int result_id);

pg_NumRows() возвращает число записей в результате PostgreSQL. Параметр является верным идентификатором результата, полученным функцией pg_Exec(). Эта функция вернет -1 при ошибке.


pg_Options

pg_Options -- возвращает настройки
Описание
string pg_options(int connection_id);

pg_Options() возвращает строку, содержащую настройки, соответствующие указанному идентификатору соединения PostgreSQL.


pg_pConnect

pg_pConnect -- устанавливает устойчивое соединение с базой данных
Описание
int pg_pconnect(string host, string port, string options, string tty, string dbname);

Возвращает номер соединения при успехе или false, если соединение не может быть установлено. Открывает устойчивое соединение с базой данных PostgreSQL. Каждый параметр должен быть строкой в кавычках, включая номер порта. Параметры options и tty являются дополнительными и могут быть опущены. Эта функция возвращает номер соединения, который необходим другим функциям PostgreSQL. Вы можете одновременно открыть несколько устойчивых соединений. См. также pg_Connect().

Соединение может также быть установлено следующей командой: $conn = pg_pconnect("dbname=marliese port=5432"); Остальные параметры, кроме dbname и port, - это host, tty и options.


pg_Port

pg_Port -- возвращает номер порта
Описание
int pg_port(int connection_id);

pg_Port() возвращает номер порта, с которым соединен указанный идентификатор соединения PostgreSQL.


pg_Result

pg_Result -- возвращает данные из идентификатора результата
Описание
mixed pg_result(int result_id, int row_number, mixed fieldname);

pg_Result() возвращает данные из идентификатора результата, полученного pg_Exec(). Параметры row_number и fieldname определяют, из какой ячейки таблицы будут взяты данные. Нумерация записей и полей начинается с 0. Вместо имени поля вы можете использовать номер поля (без кавычек).

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


pg_tty

pg_tty -- возвращает имя tty
Описание
string pg_tty(int connection_id);

pg_tty() возвращает имя tty, которое сервер дает указанному идентификатору соединения PostgreSQL.


Функции регулярных выражений

ereg

ereg -- парное значение регулярного выражения
Описание
int ereg(string pattern, string string, array [regs]);

Ищет парные значения string в регулярном выражении, указанном в pattern.

Если парные значения найдены для подстрок в круглых скобках pattern и функция вызывалась с третьим аргументом regs, то парные значения будут сохранены в элементах regs. $regs[1] будет содержать подстроку, которая начинается с первой левой круглой скобки; $regs[2] будет содержать подстроку, начинающуюся со второй скобки и т.д. $regs[0] будет содержать копию string.

Поиск чуствителен к регистру.

Функция возвращает true, если парное значение для pattern было найдено в string, или false, если не было найдено парных значений или произошла ошибка.

Следующий код извлекает дату в ISO формате и выводит в формате DD.MM.YYYY:

Example 1. ereg() example

if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) {
    echo "$regs[3].$regs[2].$regs[1]";
} else {
    echo "Invalid date format: $date";
}

См. также eregi(), ereg_replace(), и eregi_replace().


ereg_replace

ereg_replace -- заменяет регулярное выражение
Описание
string ereg_replace(string pattern, string replacement, string string);

Эта функция сканирует string на парные значения к pattern, затем заменяет найденный текст на replacement.

Если pattern содержит подстроки в круглых скобках, тоreplacement может содержать подстроки вида \\цифра, которые будут заменены текстом, совпадающим с цифровой подстрокой в скобках; \\0 обработает все содержимое строки. Может быть использовано до 9 подстрок. Скобки могут быть сгруппированы, в этом случае они считаются по открывающим скобкам. Например, следующий код напечатет "This was a test" три раза:

Пример 1. ereg_replace()

$string = "This is a test";
echo ereg_replace( " is", " was", $string );
echo ereg_replace( "( )is", "\\1was", $string );
echo ereg_replace( "(( )is)", "\\2was", $string );
См. также ereg(), eregi(), и eregi_replace().


eregi

eregi -- нечувствительный к регистру поиск парных значений в регулярных выражениях
Описание
int eregi(string pattern, string string, array [regs]);

Эта функция идентична ereg() , за исключением того, что она игнорирует различие в регистре у буквенных символов.

См. также ereg(), ereg_replace(), и eregi_replace().


eregi_replace

eregi_replace -- замена регулярного выражения без учета регистра
Описание
string eregi_replace(string pattern, string replacement, string string);

Эта функция идентична ereg_replace() за исключением того, что она игнорирует различие в регистре у буквенных символов.

См. также ereg(), eregi(), и ereg_replace().


split

split -- разбивает строку на массив по регулярному выражению
Описание
array split(string pattern, string string, int [limit]);

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

Для получения первых 5 полей из строки в /etc/passwd:

Пример 1. split()

$passwd_list = split( ":", $passwd_line, 5 );

Следует отметить, что pattern чувствительна к регистру.

См. также: explode() и implode().


sql_regcase

sql_regcase -- подготавливает регулярное выражение к поиску без учета регистра
Описание
string sql_regcase(string string);

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

Пример 1. sql_regcase()

echo sql_regcase( "Foo bar" );
Будет выдано

[Ff][Oo][Oo][  ][Bb][Aa][Rr]
.

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


Функции семафоров и разделяемой памяти

Этот модуль предоставляет функции семафоров, используя семафоры System V. Семафоры могут использоваться для обеспечения эксклюзивного доступа к русурсам используемой машины или для ограничения числа процессов, которые могут одновременно использовать ресурс.

Поддержка разделяемой памяти также включена. Она совместима с System V - совместимыми системами.

sem_get

sem_get -- получение идентификатора семафора
Описание

int sem_get (int key, int [ max_acquire ] , int [ perm ] );

 

Возвращает положительный индентификатор семафора при успехе или false при ошибке.

sem_get() возвращает идентификатор, который может быть использован для доступа к семафору System V с указанным ключом. Семафор создается, если необходимо, используя биты доступа, указанные в perm (по умолчанию 0666). Число процессов, которое может быть зафиксировано семафором одновременно устанавливается в max_acquire (по-умолчанию 1). В действительности это значение устанавливается только если процесс обнаруживает, что он является единственным, присоединенным к семафору.

Повторный вызов функции sem_get() с тем же ключем вернет другой идентификатор семафора, но оба идентификатора указывают на один и тот же семафор.

См. также: sem_acquire() and sem_release() .

sem_acquire

sem_acquire -- фиксирует семафор
Описание

int sem_acquire (int sem_identifier);

 

Возвращает true при успехе, false при ошибке.

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

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

См. также: sem_get() and sem_release() .

sem_release

sem_release -- освобождает семафор
Описание

int sem_release (int sem_identifier);

 

Возвращает true при успехе и false при ошибке.

sem_release() освобождает семафор если он зафиксирован в данное время вызывающим процессом, иначе выдается предупреждение.

После освобождения семафора функция sem_acquire() может быть вызвана для ре-фиксации его.

См. также: sem_get() and sem_acquire() .

shm_attach

shm_attach -- Создает или открывает разделяемую память
Описание

int shm_attach (long key, long memsize, long perm);

 

Создает или открывает разделяемую память с указанным ключем и размером памяти.

shm_detach

shm_detach -- Отсоединяет от разделяемой памяти
Описание

int shm_detach (long id);

 

Отсоединяет от разделяемой памяти с указанным id , созданным с помощью функции shm_attach() . Помните, что разделяемая память все еще существует в Unix-системе и данные все еще присутствуют.

shm_put_var

shm_put_var -- Вставляет или обновляет переменную в разделяемой памяти
Описание

int shm_put_var (int id, long variable_key, mixed variable);

 

Вставляет или обновляет переменную с указанным variable_key. Все типы переменных (double, long, string, array) поддерживаются. Функция serialize() может быть использована для хранения данных.

shm_put_var

shm_put_var -- Считывает переменную с указанным variable_key
Описание

mixed shm_get_var (int id, long variable_key);

 

Считывает переменную с указанным variable_key . Переменная все еще присутствует в разделяемой памяти. Функция unserialize() может быть использована для декодирования данных.

shm_remove_var

shm_remove_var -- Удаляет переменную из разделяемой памяти
Описание

int shm_remove_var (int id, long variable_key);

 

Удаляет переменную с указанным variable_key из разделяемой памяти.

shm_remove

shm_remove -- Удаляет разделяемую память
Описание

int shm_remove (long key);

 

Удаляет разделяемую память из Unix-системы. Все данные будут уничтожены.


Solid (надёжные) функции

Solid (надежные) функции являются предопределенными, поэтому вместо них вы вероятно захотите использовать Универсальные ODBC функции.


solid_close

solid_close -- закрывает Solid-соединение
Описание

См. odbc_close().


solid_connect

solid_connect -- соединяет с Solid-источником данных
Описание

См. odbc_connect().


solid_exec

solid_exec -- запускает Solid-запрос
Описание

См. odbc_exec().


solid_fetchrow

solid_fetchrow -- выдяляет строку данных из Solid-запроса
Descriptio

См. odbc_fetch_row()


solid_fieldname

solid_fieldname -- возвращает имя столбца из Solid-запроса
Описание

См. odbc_field_name().


solid_fieldnum

solid_fieldnum -- возвращает номер столбца из Solid-запроса
Описание

См. odbc_field_num().


solid_freeresult

solid_freeresult -- освобождает память результата Solid-запроса
Описание

См. odbc_free_result().


solid_numfields

solid_numfields -- возвращат число полей в Solid-результате
Описание

См. odbc_num_fields().


solid_numrows

solid_numrows -- возвращает число записей в Solid-результате
Описание

См. odbc_num_rows().


solid_result

solid_result -- возвращает данные из Solid-результата
Описание

См. odbc_result().


Функции SNMP

Для использование функций SNMP в системе UNIX вам необходимо установить набор ucd-snmp. Ссылка на последнюю версию есть в PHP FAQ. В системе Windows эти функции доступны только в NT и не доступны в Win95/98.


snmpget

snmpget -- получает объект SNMP
Описание

int snmpget (string hostname, string community, string object_id);

 

Возвращает значание SNMP объекта при успехе и false при ошибке.

Функция snmpget() используется для чтения значения SNMP объекта, указанного в object_id. SNMP агент определяется именем хоста hostname и группа чтения определяется параметром community.

 

 

snmpget("127.0.0.1", "public", "system.SysContact.0")

 


snmpwalk

snmpwalk -- Получает все SNMP объекты у агента
Описание

array snmpwalk (string hostname, string community, string object_id);

 

Возвращает массив значений SNMP объектов начиная с object_id и false при ошибке.

Функция snmpwalk() используется для чтения всех значений у SNMP агента, определяемого параметром hostname. Community определяет группу чтения для агента. Нулевой object_id берется как корень дерева SNMP объектов и все объекты под этим деревом возвращаются как массив. Если object_id указан, то возвращаются все SNMP объекты ниже этого объекта.

 

 
$a = snmpwalk("127.0.0.1", "public", ""); 
        

 

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

 

for($i=0; $i<count($a); $i++) {
	echo $a[$i];
}

Строковые функции

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


AddSlashes

AddSlashes -- выделяет строку обратной чертой
Описание
string addslashes(string str);

Возвращает строку с обратной чертой (/) перед символами, которые должны быть выделены в запросах к базам данных и т.п. Эти символы: ('), двойные кавычки ("), (\) и NUL (нулевой байт).

См. также stripslashes(), htmlspecialchars() и quotemeta().


Chop

Chop -- удаляет повторяющиеся пробелы
Описание
string chop(string str);

Возвращает строку без повторяющихся пробелов.

Example 1. chop()

$trimmed = Chop($line);

См. также trim().


Chr

Chr -- возвращает специалный символ
Описание
string chr(int ascii);

возвращает односимвольную строку, содержащую символ, определенный кодом ascii.

Example 1. chr()

$str .= chr(27); /* добавляет символ ESC в конец $str */

/* Часто это более полезно */
$str = sprintf("The string ends in escape: %c", 27);
Эта функция дополняет функцию ord(). См. также sprintf() с форматирующей строкой %c.


chunk_split

chunk_split -- разбивает строку на мелкие части
Описание
string chunk_split(string string, int [chunklen] , string [end] );

Может быть использована для разбития строки на более меньшие части, например, при конвертировании результата функции base64_encode в формат RFC 2045. Функция вставляет каждый chunklen-ый (по умолчанию до 76) символ строку end (по умолчанию "\r\n"). Функция возвращает новую строку, оставляя исходную не тронутой.

Example 1. chr_replace()

# format $data using RFC 2045 semantics

$new_string = chunk_split(base64_encode($data));
Эта функция значительно быстрее, чем ereg_replace().


convert_cyr_string

convert_cyr_string -- переводит из одной русской кодовой таблицы в другую
Описание
string convert_cyr_string(string str, string from, string to);

Эта функция переводит указанную строку из одной русской кодовой таблицы в другую. Аргументы from и to являются одним символом, который определяет исходную и целевую кодовую таблицу. Поддерживаемые типы:


crypt

crypt -- шифрует строку методом DES
Описание
string crypt(string str, string [salt]);

crypt() Зашифрует строку, используя стандартный метод шифрации UNIX DES. Аргументы являются строкой, которую нужно зашифровать, и дополнительная 2-символная строка salt, на которой будет основываться шифрование. См. документацию UNIX для дополнительной информации.

Если аргумент salt отсутствует, то он буде генерирован случайным образом.

Некоторые операционные системы поддерживают больше одного типа шифрования. В действительности, иногда метод шифрования DES заменятеся основанными на MD5 алгоритмами. Тип шифрования устанавливается аргументом salt. Во время установки PHP определяет возможности функций шифрации и будет поддерживать аргумент salt для других методов шифрации. Если параметр salt не установлен, то PHP автоматически сгенерирует стандартный 2-х символный ключ DES, если же в системе по умолчанию установлен тип шифрации MD5, то будет сгенерирован MD5-совместимый ключ.

Стандартная шифрация DES crypt() содержит ключ в двух первых символах потока вывода.

Нет других функций дешифрации, кроме crypt() использующей однопроходный алгоритм.


echo

echo -- выводит одно или более строк
Описание
echo(string arg1, string [argn]...);

Выводит все параметры.

echo() в действительности не является функцией (это языковая конструкция), поэтому вам не обязательно использовать круглые скобки.

Пример 1. echo

echo "Hello World";

См. также: print() printf() flush()


explode

explode -- разбивает строку на строки
Описание
array explode(string separator, string string);

Возвращает массив строк, содержащий в элементы, разделенные срокой separator.

Пример 1. explode()

$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);

См. также split() и implode().


flush

flush -- освобождает буферы вывода
Описание
void flush(void);

Освобождает буферы вывода PHP и все остальные, использумые PHP (CGI, web-сарвер и т.д.). Это эффективная возможность выдать все накопленное в буферах в броузер пользователя.


get_meta_tags

get_meta_tags -- Извлекает все содержимое атрибутов тег meta из файла и возвращает в массиве
Описание
array get_meta_tags(string filename, int [use_include_path]);

Открывает файл filename и обрабатывает его строка за строкой и извлекает теги <meta>.

Пример 1. Теги Meta

<meta name="author" content="name">
<meta name="tags" content="php3 documentation">
</head> <!-- parsing stops here -->
(обратите внимание на окончание строк - PHP3 использует интеллектуальную функцию для обработки входного потока, поэтому файлы MAC не будут работать на Unox).

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

Установка параметра use_include_path в 1 приведет к тому, что PHP3 будет пытаться открыть файл по стандартному include пути.


htmlspecialchars

htmlspecialchars -- Переводит специальные символы в коды HTML
Описание
string htmlspecialchars(string string);

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

Эта функция полезна для отчистки полученного от пользователя текста от разметки HTML (доски сообщений, гостевые книги).

В настоящее время осуществляются следующие замены:

Следует отметить, что эта функция не заменяет ничего, кроме указанного выше. Для полной обработки см. функцию htmlentities().

См. также htmlentities() и nl2br().


htmlentities

htmlentities -- Переводит все возможные символы в коды HTML.
Описание
string htmlentities(string string);

Эта функция идентична htmlspecialchars() , кроме того, что все символы, которые имеют соответсвующий код HTML заменяются на этот HTML код.

В настоящее время применятеся кодовая таблица ISO-8859-1.

См. также htmlspecialchars() и nl2br().


implode

implode -- Объединяет массив элементов в строку
Описание
string implode(array pieces, string glue);

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

Пример 1. implode()

$colon_separated = implode($array, ":");

См. также explode(), join(), и split().


join

join -- Присоединяет элементы массива к строке
Описание
string join(array pieces, string glue);

join() является псевдонимом функции implode(), и полностью ей идентична.


ltrim

ltrim -- Удаляет пробелы из начала строки.
Описание
string ltrim(string str);

Эта функция удаляет пробелы из начала строки и возвращает обрезаную строку.

См. также chop() и trim().


md5

md5 -- Вычисляет значение md5 для строки
Описание
string md5(string str);

Вычисляет значение MD5 для строки str используя алгоритм RSA Data Security, Inc. MD5 Message-Digest.


nl2br

nl2br -- Переводит символы новой строки в HTML-тег разрыва строки
Описание
string nl2br(string string);

Возвращает string с '<BR>' вставляемыми перед каждой новой строкой.

См. также htmlspecialchars() и htmlentities().


Ord

Ord -- Возвращает ASCII-значение символа
Описание
int ord(string string);

Возвращает ASCII-значение первого символа строки string. Эта функция дополняет функцию chr().

Пример 1. ord()

if (ord($str) == 10) {
    echo("The first character of \$str is a line feed.\n");
}

См. также chr().


parse_str

parse_str -- Разбирает строку на переменные
Описание
void parse_str(string str);

Разбирает строку str , как если бы она была URL-строкой запроса, и устанавливает переменные текущей среды.


Пример 1. Using parse_str()

$str = "first=value&second[]=this+works&second[]=another";
parse_str($str);
echo $first; /* prints "value" */
echo $second[0]; /* prints "this works" */
echo $second[1]; /* prints "another" */
      


print

print -- выводит строку
Описание
print(string arg);

Выводит строку arg.

См. также: echo() printf() flush()


printf

printf -- выводит форматированную строку
Описание
int printf(string format, mixed [args]...);

Осуществляет вывод в соответствии с параметром format, который расписан в описании функции sprintf().

См. также: print(), sprintf(), и flush().


quoted_printable_decode

quoted_printable_decode -- переводит строку в кавычках в 8-битную строку
Описание
string quoted_printable_decode(string str);

Эта функция возвращает 8-битную строку, соответствующую декодированной сроке в кавычках. Эта функция аналогична imap_qprint(), за исключением того, что она не требует IMAP модуль для работы.


QuoteMeta

QuoteMeta -- выделяет meta символы
Описание
int quotemeta(string str);

Возвращает обработанную str с символами (\) перед каждым из следующих символов:

. \\ + * ? [ ^ ] ( $ )

См. также addslashes(), htmlentities(), htmlspecialchars(), nl2br(), и stripslashes().


rawurldecode

rawurldecode -- декодирует URL-кодированную строку
Описание
string rawurldecode(string str);

Возвращает строку, в которой последовательность из символа процента (%) с последующих 2-х шестнадцатиричных цифр заменяется соответствующим буквенным символом. Например, строку

foo%20bar%40baz
будет заменена на
foo bar@baz

См. также rawurlencode().


rawurlencode

rawurlencode -- URL-кодирует строку в соответствии с RFC1738
Описание
string rawurlencode(string str);

Возвращает строку, в которой все не буквенно-цифровые символы, кроме

-_.
заменяются на знак (%) с последующими двумя шестнадцатиричными цифрами. Это кодирование, описанное в RFC1738, применяется для защиты символов от интерпритации их как особых разделителей URL, и для защиты URL от искажения системами передачи данных с переводом символов (как некоторые e-mail системы). Например, если вы хотите включить пароль в ftp URL:

Пример 1. rawurlencode()

echo '<A HREF="ftp://user:', rawurlencode ('foo @+%/'),
     '@ftp.my.com/x.txt">';
Или, если передаете информацию в качестве части URL:

Пример 2. rawurlencode()

echo '<A HREF="http://x.com/department_list_script/',
     rawurlencode ('sales и marketing/Miami'), '">';

См. также rawurldecode().


setlocale

setlocale -- Устанавливает локальную информацию
Описание
string setlocale(string category, string locale);

category является строкой, определяющей категорию функций, изменяемую строкой locale:

Если locale является пустой строкой "", то локальные имена будут установлены из значений переменных окружения с теми же именами, как у вышеописанных категорий, или из "LANG".

Если locale равна нулю или "0", то местные установки не изменяются, возвращаются текущие установки.

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


soundex

soundex -- вычисляет soundex ключ для строки
Описание
string soundex(string str);

Вычисляет soundex ключ для str.

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

Эта функция описана Дональдом Кнутом в книге "The Art Of Computer Programming, vol. 3: Sorting и Searching", Addison-Wesley (1973), pp. 391-392.


Пример 1. Soundex

soundex("Euler") == soundex("Ellery") == 'E460';
soundex("Gauss") == soundex("Ghosh") == 'G200';
soundex("Knuth") == soundex("Kant") == 'H416';
soundex("Lloyd") == soundex("Ladd") == 'L300';
soundex("Lukasiewicz") == soundex("Lissajous") == 'L222';
      


sprintf

sprintf -- возвращает форматированную строку
Описание
sprintf(string format, mixed [args]...);

Возвращает строку, обрабатываемую в соответствии с форматирующей строкой format.

Форматирующая строка, содержащая ноль или более директив: обычные символы (кроме %) которые копируются прямо в результат, и that are copied directly to the result, и описания изменений, каждое из которых выполняет определенные действия. Это применительно и к sprintf() и к printf()

Каждое описание изменений состоит из следующих элементов, в порядке:

  1. Дополнительный описатель заполнения, который говорит, какие символы будут использоваться для заполнения результата до правильног размера строки. Это могут быть пробелы или 0 (символ нуля). По умолчанию заполняется пробелами. Алтернативный символ заполнения может быть определен одинарной кавычкой ('). См. примеры ниже.

  2. Дополнительный описатель выравнивания , который говорит, что результат должен быть выравнен по левому или по правому краю. По умолчанию выравнивание происходит по правому краю; символ - приведет к вырвниванию по левому краю.

  3. Дополнительный описатель ширины, который говорит, с каким количеством символов (минимум) пожет производится данная замена.

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

  5. Описатель типа, который говорит о том, как тип данных аргумента должен трактоваться. Возможные типы:
    % - символ процента. Аргумент не требуется.
    b - аргумент трактуется как integer и представляется как двоичное число.
    c - аргумент трактуется как integer и представляется как символ с ASCII значением.
    d - аргумент трактуется как integer и представляется как десятичное число.
    f - аргумент трактуется как double и представляется как число с плавающей точкой.
    o - аргумент трактуется как integer и представляется как восьмиричное число.
    s - аргумент трактуется и представляется как строка.
    x - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в нижнем регистре).
    X - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в верхнем регистре).

См. также: printf(), number_format()

Примеры


Пример 1. sprintf: числа с нулями

$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);

Пример 2. sprintf: форматирование денежной еденицы

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf ("%01.2f", $money);
// echo $formatted will output "123.10"


strchr

strchr -- Находит первое появление символа.
Описание
string strchr(string haystack, string needle);

Эта функция является псевдонимом для функции strstr(), и полностью ей идентична.


strcmp

strcmp -- Двоичное сравнение строк (безопасное)
Описание
int strcmp(string str1, string str2);

Возвращает < 0 если str1 меньше чем str2; > 0 если str1 больше чем str2, и 0 если они равны.

Следует отметить, что это сравнение чуствительно к регистру.

См. также ereg(), substr(), и strstr().


strcspn

strcspn -- находит длину нечального сегмента, не совпадающего с маской
Описание
int strcspn(string str1, string str2);

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

См. также strspn().


StripSlashes

StripSlashes -- удаляет символы \ из строки
Описание
string stripslashes(string str);

Возвращает строку с вырезанными символами \. (\' заменяется на ' и так далее). Двойные \\ заменяются на \.

См. также addslashes().


strlen

strlen -- Возвращает длину строки
Описание
int strlen(string str);

Возвращает длину строки string.


strrpos

strrpos -- Находит позицию последего появления символа в строке
Описание
int strrpos(string haystack, char needle);

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

Если needle не найден, то возвращается false.

Если параметр needle не является строкой, то он переводится в десятичное число и рассматривается как числовое значение символа.

См. также strpos(), strrchr(), substr(), и strstr().


strpos

strpos -- Находит позицию первого появления строки.
Описание
int strpos(string haystack, string needle, int [offset]);

Возвращает номер позиции первого появления строки needle в строке haystack. В отличии от strrpos(), эта функция может рассматривать целую строку в качестве параметра needle и целая строка будет использоваться.

Если параметр needle не найден, то возвращается false.

Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа.

Дополнительный параметр offset позволяет вам пределять, с какого символа в строке haystack начинать поиск. Позиция возвращается все равно относительно начала строки haystack.

См. также strrpos(), strrchr(), substr(), и strstr().


strrchr

strrchr -- Находит последнее появление символа в строке
Описание
string strrchr(string haystack, string needle);

Эта функция возвращает позицию haystack, с которой начинается последнее появление needle и продолжается до конца haystack.

Возвращает false если needle не найдена.

Если параметрneedle содержит более чем один символ, то используется первый символ.

Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа.

Пример 1. strrchr()

// получение последней директории в $PATH
$dir = substr( strrchr( $PATH, ":" ), 1 );

// получение всего после последней новой строки
$text = "Line 1\nLine 2\nLine 3";
$last = substr( strrchr( $text, 10 ), 1 );
      

См. также substr() и strstr().


strrev

strrev -- Переворачивает строку
Описание
string strrev(string string);

Возвращает перевернутую строку string.


strspn

strspn -- Находит длину начального сегмента, отвечающего маске
Описание
int strspn(string str1, string str2);

Возвращает длину начального сегмента строки str1, который содержит все символы из str2.

См. также strcspn().


strstr

strstr -- Находит первое появление строки
Описание
string strstr(string haystack, string needle);

Возвращает все haystack с первого появления строкиneedle и до конца.

Если параметр needle не найден, то возвращается false.

Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа.

См. также strrchr(), substr(), и ereg().


strtok

strtok -- Разбивает строку
Описание
string strtok(string arg1, string arg2);

strtok() используется для разбития строки. Это значит, что если вы имеете строку типа "This is an example string", то вы можете разбить эту строку на отдельные слова используя пробел в качестве разделителя.

Пример 1. strtok()

    $string = "This is an example string";
    $tok = strtok($string," ");
    while($tok) {
        echo "Word=$tok<br>";
        $tok = strtok(" ");
    }

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

Также будьте внимательны к разделителям равным "0". Это может вызвать ошибку в определенных выражених.

См. также split() и explode().


strtolower

strtolower -- Переводит строку в нижний регистр
Описание
string strtolower(string str);

Возвращает сроку string со всеми буквенными символами, переведенными в нижний регистр.

Помните, что буквенные символы определяются текущими локальными установками.

См. также strtoupper() и ucfirst().


strtoupper

strtoupper -- Переводит строку в верхний регистр
Описание
string strtoupper(string string);

Возвращает строку string со всеми буквенными символами, переведенными в верхний регистр.

Следует отметить, что буквенные символы определяются текущими локальными установками.

См. также strtolower() и ucfirst().


str_replace

str_replace -- Заменяет все вхождения строки на указанную строку
Описание
string str_replace(string needle, string str, string haystack);

Эта функция заменяет все вхождения строки needle в строке haystack на указанную строку str. Если вам не требуются причудливые правила замены, то вам следует всегда использовать эту функцию вместо ereg_replace().


Пример 1. str_replace()

$bodytag = str_replace("%body%", "black", "<body text=%body%>");
      

Эта функция двоично-безопасная.

См. также ereg_replace().


strtr

strtr -- Переводит определенные символы
Описание
string strtr(string str, string from, string to);

Эта функция обрабатывает строку str, заменяя все появления каждого символа из строки from на соответствующие символы в строке to, и возвращает результат.

Если строки from и to имеют различную длину, то дополнительные символы более длинной из строк игнорируются.

Пример 1. strtr()

$addr = strtr($addr, "дец", "aao");
      

См. также ereg_replace().


substr

substr -- Возвращает часть строки
Описание
string substr(string string, int start, int [length]);

Эта функция возвращает часть строки string, определяемую параметрами start (начало) и length (длина).

Если параметр start положительный, то возвращаемая строка будет начинаться с start-ого символа строки string. Примеры:

$rest = substr("abcdef", 1); // вернет "bcdef"
$rest = substr("abcdef", 1, 3); // вернет "bcd"

Если параметр start отрицательный, то возвращаемая строка будет начинаться start-ого символа от конца строкиstring. Примеры:

$rest = substr("abcdef", -1); // вернет "f"
$rest = substr("abcdef", -2); // вернет "ef"
$rest = substr("abcdef", -3, 1); // вернет "d"

Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Это приведет к строке с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки start.

Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки string. Это приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start. Примеры:

$rest = substr("abcdef", -1, -1); // вернет "bcde"

См. также strrchr() и ereg().


trim

trim -- Обрезает пробелы с начала и с конца строки
Описание
string trim(string str);

Эта функция обрезает пробеды с начала и с конца строки и возвращает обрезанную строку.

См. также chop() и ltrim().


ucfirst

ucfirst -- Переводит первый символ строки в верхний регистр
Описание
string ucfirst(string str);

Делает заглавным первый символ строки str, если этот символ буквенный.

Следует напомнить, что 'буквенные' символы определяются текущими настройками.

См. также strtoupper() и strtolower().


ucwords

ucwords -- Переводит в верхний регистр первые символы каждого слова в строке
Описание
string ucwords(string str);

Делает заглавным первый символ каждого слова в строке str, если этот символ буквенный.

См. также strtoupper(), strtolower() и ucfirst().


Функции URL

parse_url

parse_url -- обрабатывает URL и возвращает его компоненты
Описание
array parse_url (string url);

Эта функция возвращает ассоциативный массив, включающий множество различных существующих компонентов URL. Они включают "scheme", "host", "port", "user", "pass", "path", "query" и "fragment".


urldecode

urldecode -- декодирует URL-закодированную строку
Описание
string urldecode (string str);

Декодирует любые % ## закодированные в указанной строке. Возвращается декодированная строка.

Пример 1. пример urldecode()

$a = split ('&', $querystring);
$i = 0;
while ($i < count ($a)) {
  $b = split ('=', $a [$i]);
  echo 'Value for parameter ', htmlspecialchars (urldecode ($b [0])),
       ' is ', htmlspecialchars (urldecode ($b [1])), "<BR>";
  $i++;
}

См. также urlencode()


urlencode

urlencode -- кодирует URL строку
Описание
string urlencode (string str);

возвращает строку, в которой все не не буквенноцифровые символы кроме -_. заменены на символ ( %) с следующими за ним двумя шестнадцатиричными цифрами и пробелами, закодированными как символ ( +) . Это кодирование то же самое, что и кодирование данных, полученных методом POST из WWW формы, это тот же тип, что и тип данных application/x-www-form-urlencoded . Это отличается от RFC1738 кодирование (см. rawurlencode() ) в котором исторически сложилось, что пробелы кодируются символами (+). Эта функция удобна, когда кодируемая строка должна быть использована в части запроса URL, как удобный путь передавать переменные на следующую страницу:

Пример 1. пример urlencode()

echo '<A HREF="mycgi?foo=', urlencode ($userinput), '">';

См. также urldecode()


base64_encode

base64_encode -- кодирует данные в кодировке MIME base64
Описание
string base64_encode (string data);

base64_encode() возвращает data закодированные в кодировке base64. Эта кодировка разработана для того, чтобы передовать двоичные данные через транспортные слои, которые не содержатвосьмой бит, такие как почтовые тела.

Данные в кодировке Base64 занимают примерно на 33% больше места, чем оригинал.

См. также: base64_decode(), RFC-2045 раздел 6.8.


base64_decode

base64_decode -- декодирует данные, закодированные в кодировке MIME base64
Описание
string base64_decode (string encoded_data);

base64_decode() декодирует encoded_data и возвращает оригинал данных. Возвращаемые данные могут быть двоичными.

См. также: base64_encode(), RFC-2045 раздел 6.8.


Функции переменных

gettype

gettype -- Получает тип переменной.
Описание
string gettype (mixed var);

Возвращает тип переменной PHP var.

Возможные значения для возвращаемой строки:

См. также: settype().

intval

intval -- Возвращает целочисленное значение переменной.
Описание
int intval (mixed var, int [base]);

Возвращает целочисленное значение переменной var, использую указанное основание для перевода (по умолчанию 10).

var Может быть скалярного типа. Вы не можете использовать функцию intval() для массивов или объектов.

См. также: doubleval(), strval(), settype() и Подмена типов.


doubleval

doubleval -- Получает значение переменной в формате double.
Описание
double doubleval (mixed var);

Возвращает double (с плавающей точкой) значение переменной var.

var может быть скалярного типа. Вы не можете использовать doubleval() на массивах и объектах.

См. также: intval(), strval(), settype() и Подмена типов.


empty

empty -- определяет, присвоено ли у переменной какое либо значение
Описание
int empty (mixed var);

Возвращает false, если var существует и имеет не пустое или не нулевое значение; true в обратном случае.

См. также: isset() и unset().


is_array

is_array -- Определяет, входит ли переменная в массив.
Описание
int is_array (mixed var);

Возвращает true, если var есть в массиве, false в обратном случае.

См. также: is_double(), is_float(), is_int(), is_integer(), is_real(), is_string(), is_long(), и is_object().


is_double

is_double -- Определяет, является ли переменная типа double.
Описание
int is_double (mixed var);

Возвращает true, если var является типа double, false в обратном случае.

См. также: is_array(), is_float(), is_int(), is_integer(), is_real(), is_string(), is_long(), и is_object().


is_float

is_float -- Определяет, является ли переменная типа float.
Описание
int is_float (mixed var);

Эта функция является псевдонимом для функции is_double().

См. также: is_double(), is_real(), is_int(), is_integer(), is_string(), is_object(), is_array(), и is_long().


is_int

is_int -- Определяет, является ли переменная типа integer.
Описание
int is_int (mixed var);

Эта функция является псевдонимом для функции is_long().

См. также: is_double(), is_float(), is_integer(), is_string(), is_real(), is_object(), is_array(), и is_long().


is_integer

is_integer -- Определяет, является ли переменная типа integer.
Описание
int is_integer (mixed var);

Эта функция является псевдонимом для функции is_long().

См. также: is_double(), is_float(), is_int(), is_string(), is_real(), is_object(), is_array(), и is_long().


is_long

is_long -- Определяет, является ли переменная типа integer.
Описание
int is_long (mixed var);

Возвращает true, если var является типа integer (long), false в обратном случае.

См. также: is_double(), is_float(), is_int(), is_real(), is_string(), is_object(), is_array(), и is_integer().


is_object

is_object -- Определяет, является ли переменная типа object.
Описание
int is_object (mixed var);

Возвращает true, если var типа object, false в обратном случае.

См. также: is_long(), is_int(), is_integer(), is_float(), is_double(), is_real(), is_string(), и is_array().


is_real

is_real -- Определяет, является ли переменная типа real.
Описание
int is_real (mixed var);

Эта функция является псевдонимом для функции is_double().

См. также: is_long(), is_int(), is_integer(), is_float(), is_double(), is_object(), is_string(), и is_array().


is_string

is_string -- Определяет, является ли переменная типа string.
Описание
int is_string (mixed var);

Возвращает true, если var is a string, false в обратном случае.

См. также: is_long(), is_int(), is_integer(), is_float(), is_double(), is_real(), is_object(), и is_array().


isset

isset -- Определяет, существует ли переменная
Описание
int isset (mixed var);

Возвращает true, если var существует; false в обратном случае.

Если переменная была удалена функцией unset(), она больше не будет определяться функцией isset().

$a = "test";
echo isset($a); // true
unset($a);
echo isset($a); // false

См. также: empty() и unset().


settype

settype -- Устанавливает тип переменной.
Описание
int settype (string var, string type);

Устанавливает тип переменнойvar на type.

Возможные значения type :

Возвращает true, при успехе; false в обратном случае.

См. также: gettype().


strval

strval -- Получает строковое значение переменной.
Описание
string strval (mixed var);

Получает строковое значение var.

var может быть любого скалярного типа. Вы не можете использовать strval() на массивах или объектах.

См. также: doubleval(), intval(), settype() и Подмена типов.


unset

unset -- Удаляет указанную переменную
Описание
int unset (mixed var);

unset() уничтожает указанную переменную и возвращает true.

Пример 1. unset() пример

unset( $foo );
unset( $bar['quux'] );

См. также: isset() и empty().


Функции Vmailmgr

Эти функции требуют пакетов QMAIL (www.qmail.org) и vmailmgr Bruce Guenter http://www.qcc.sk.ca/~bguenter/distrib/vmailmgr/

Для всех функций следующие две переменные определяются как: строка vdomain - имя домена вашего виртуального домена (vdomain.com) , строка basepwd - пароль для 'real' пользователя, который поддерживает виртуальных пользователей.

Только до 8 символов распознаются в пароле для виртуальных пользователей

Возвращается статус для всех функциональных значений ответа в response.h

 


O ok
1 плохой
2 ошибка
3 ошибка соединения

 

Известные проблемы: vm_deluser() не удаляет директорию пользователя, хотя должена это делать. vm_addalias() в настоящее время не работает правильно.

 

 

<?php
dl("php3_vmailmgr.so"); //load the shared library
$vdomain="vdomain.com";
$basepwd="password";
?>
      

 


vm_adduser

vm_adduser -- Добавляет нового виртуального пользователя с паролем
Описание

int vm_adduser (string vdomain, string basepwd, string newusername, string newuserpassword);

 

Добавляет нового виртуального пользователя с паролем. newusername - это имя почтового login-а и newuserpassword - это пароль для это пользователя.


vm_addalias

vm_addalias -- Добавляет новый псевдоним для виртуального пользователя
Описание

int vm_addalias (string vdomain, string basepwd, string username, string alias);

 

Добавляет псевдоним виртуальному пользователю. username - это имя почтового login-а и alias - это псевдоним для этого пользователя.


vm_passwd

vm_passwd -- Изменяет пароль виртуальных пользователей
Описание

int vm_passwd (string vdomain, string username, string password, string newpassword);

 

Изменяет пароль виртуальных пользователей. username - это имя почтового login-а, password - старый пароль пользователя, и newpassword - новый пароль.


vm_delalias

vm_delalias -- Удаляет всевдоним
Описание

int vm_delalias (string vdomain, string basepwd, string alias);

 

Удаляет псевдоним.


vm_deluser

vm_deluser -- Удаляет псевдоним виртуального пользователя
Описание

int vm_deluser (string vdomain, string username);

 

Удаляет виртуального пользователя.


Функции Gz-файлов

Этот модуль использует функции библиотеки zlib >= 1.0.9 (http://www.cdrom.com/pub/infozip/zlib/) авторов Jean-loup Gailly и Mark Adler для прозрачного чтения и записи в gzip (.gz) сжатые файлы.


gzclose

gzclose -- закрывает открытый указатель gz-файла
Описание
int gzclose(int zp);

Закрывает gz-файл, указанный в переменной gz.

Возвращает true при успехе и false при ошибке.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().


gzeof

gzeof -- проверяет достигнут ли конец файла указателя gz-файла
Описание
int gzeof(int zp);

Возвращает true, если указатель gz-файла на метке EOF или произошла ошибка, в обратном случае возвращает false.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().


gzfile

gzfile -- читает весь gz-файл в массив
Описание
array gzfile(string filename);

Функция идентична readgzfile(), кроме того, что gzfile() возвращает файл в массив.

См. также readgzfile(), и gzopen().


gzgetc

gzgetc -- возвращает символ из указателя gz-файла
Описание
string gzgetc(int zp);

Возвращает строку, содержащую один (несжатый) символ, читаемый из файла, определяемого переменной zp. Возвращает FALSE при достижении EOF (как это делает gzeof()).

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().

См. также gzopen(), и gzgets().


gzgets

gzgets -- Считывает строку из указателя файла
Описание
string gzgets(int zp, int length);

Возвращает строку (не сжатую) длиной от начала файла до length-1 из файла , определяемого zp. Чтение заканчивается при достижении длины length-1, при начале новой строки или при EOF (что произойдет раньше).

При ошибке возвращает false.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().

См. также gzopen(), и gzgetc().


gzgetss

gzgetss -- Считывает строку из указателя файла и обрезает HTML-теги
Описание
string gzgetss(int zp, int length);

Идентична gzgets(), кроме того, что gzgetss пытается обрезать любые HTML и PHP теги из считываемого текста.

См. также gzgets(), и gzopen().


gzopen

gzopen -- открывает gz-файл
Описание
int gzopen(string filename, string mode);

Открывает gzip (.gz) файл для чтения или записи. Параметр режима такой же как и у fopen() ("rb" или "wb"), но также может включать степень сжатия ("wb9"), или стратегию: 'f' для фильтрованных данных как в "wb6f", 'h' для компрессии только по Хаффману как в "wb1h" (См. описание deflateInit2 в zlib.h для более подробной информации и параметрах стратегии).

Gzopen может использоваться для чтения файла, который не в gzip формате. В этом случае gzread() будет напрямую читать из файла без декомпрессии.

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

При ошибке в открытии файла функция вернет false.


Пример 1. gzopen()

$fp = gzopen("/tmp/file.gz", "r");

См. также gzclose().


gzpassthru

gzpassthru -- Выводит все оставшиеся данные в указателе gz-файла
Описание
int gzpassthru(int zp);

Считывает все до EOF указателя gz-файла и выводит прочитанные данные (несжатые) в стандартный вывод.

Если произойдет ошибка, то функция вернет false.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().

gz-файл будет закрыт, когда gzpassthru() закончит его считывать (оставляя zp возможным для использования).


gzputs

gzputs -- записывает в указатель gz-файла
Описание
int gzputs(int zp, string str, int [length]);

gzputs() является псевдонимом для функции gzwrite(), и полностью ей идентична.


gzread

gzread -- Двоично-безопасное чтение из gz-файла
Описание
string gzread(int zp, int length);

gzread() читает length байтов из указателя gz-файла, определяемого zp. Чтение прекращается когда length байтов (несжатых) считываются или достигается EOF (что произойдет раньше).

 

// считывание содержимого gz-файла в строку
$filename = "/usr/local/something.txt.gz";
$zd = gzopen( $filename, "r" );
$contents = gzread( $zd, 10000 );
gzclose( $zd );
      

См. также gzwrite(), gzopen(), gzgets(), gzgetss(), gzfile(), и gzpassthru().


gzrewind

gzrewind -- перемешает позицию указателя gz-файла
Описание
int gzrewind(int zp);

Устанавливает индикатор позиции файла для zp на начало файлового потока.

При ошибке функция вернет 0.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().

См. также gzseek() and gztell().


gzseek

gzseek -- Сдвигает указатель gz-файла
Описание
int gzseek(int zp, int offset);

Сдвигает индикатор позиции файла, определяемого параметром zp, на offset в файловом потоке. Еквивалентна вызову (в С) функции gzseek( zp, offset, SEEK_SET ).

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

В случае успеха функция возвращает 0, в обратном случае - 1. Следует отметить, что достижение EOF не рассматривается как ошибка.

См. также gztell() and gzrewind().


gztell

gztell -- Возвращает позицию чтения/записи указателя gz-файла
Описание
int gztell(int zp);

Возвращает позицию указателя файла, определяемого параметром zp, т.е. его положение в файловом потоке.

При ошибке возвращается false.

Указатель gz-файла должен быть правильным, и должен указывать на файл, успешно открытый функцией gzopen().

См. также gzopen(), gzseek() and gzrewind().


readgzfile

readgzfile -- выводит gz-файл
Описание
int readgzfile(string filename);

Считывает файл, распаковывает его и выводит в стандартный поток вывода.

Readgzfile() может использоваться для чтения файла, который не в формате gzip. В этом случае readgzfile() будет сразу считывать файл, без докомпрессии.

Функция возвращает число байтов (несжатых), считанных из файла. При ошибке возвращается false и, если функция не вызывалась как @readgzfile, будет выведено сообщение об ошибке.

Файл с именем filename будет открыт в файловой системе и его содержимое будет выведено в стандартный поток вывода.

См. также gzpassthru(), gzfile(), и gzopen().


gzwrite

gzwrite -- Двоично-безопасная запись gz-файла
Описание
int gzwrite(int zp, string string, int [length]);

gzwrite() записывает содержимое строки string в поток gz-файла, определяемый параметром zp. Если параметр length указан, то запись будет прекращена после того, как length байтов (несжатых) будет записано или будет достигнут конец строки string, что раньше произойдет.

Следует отметить, что если параметр length указан, то параметр настройки magic_quotes_runtime будет игнорирован и пробелы не будут урезаны в строке string.

См. также gzread(), gzopen(), and gzputs().

Приложение 0. Переход от PHP/FI 2.0 к PHP 3.0

Несовместимость в 3.0

 

PHP 3.0 полностью изменен. Его лексический анализатор стал намного более логичным и последовательным чем 2.0; версия 3.0 быстрее, и использует меньше ресурсов. Однако, некоторые усовершенствования повлекли частичную несовместимость в синтаксисе и функциональных возможностях.

Кроме того, в PHP 3.0 улучшен синтаксис и семантика, что также повлекло некоторую несовместимость. Однако, мы надеемся, что все эти усовершенствования к лучшему.

Эта глава поможет вам решить проблемы связанные с несовместимостью при переходе от PHP/FI 2.0 к PHP 3.0. Новые возможности здесь не рассматриваются.

Существует программа, которая может автоматически конвертировать старый PHP/FI 2.0 скрипт; вы можете найти ее в подкаталоге convertor дистрибутива PHP 3.0. Эта программа только отслеживает изменения синтаксиса, поэтому, в любом случае, вам придется прочитать эту главу внимательно.

Открывающий и закрывающий тэги

Первое, что вы вероятно заметите - это то что открывающий и закрывающий тэги PHP изменены. Старая <?> форма была заменена тремя новыми возможными формами:
Пример 0-1. Изменение: старые открывающий и закрывающий тэги:
<? echo "This is PHP/FI 2.0 code.\n"; >

Начиная с версии 2.0, PHP/FI поддерживает также следующий формат:
Пример 0-2. Изменение: новые открывающий и закрывающий тэги, первый вариант:
<? echo "This is PHP 3.0 code!\n"; ?>

Заметьте, что закрывающий тэг теперь состоит из знака вопроса и знака "больше" вместо только "больше". Однако, если Вы планируете использовать XML на вашем сервере, у вас будут проблемы с этим вариантом, так как PHP может попробовать исполнить разметку XML в документах XML как код PHP. Из-за этого, было внесено следующее изменение:
Пример 0-3. Изменение: новые тэги начала и конца, второй вариант:
<?php echo "This is PHP 3.0 code!\n"; ?>

Из-за проблем с редакторами, не поддерживающими инструкции обработки (например Microsoft FrontPage), были введены следующие изменения:
Пример 0-4. Изменение: новые тэги начала и конца, третий вариант:
<script language="php">

  echo "This is PHP 3.0 code!\n"; 

</script>

Синтаксис операторов if..endif

"Альтернативный" способ описания блока if/elseif/else, с использованием, if(); elseif (); else; endif; не мог быть эффективно осуществлен без серьезного усложнения компиллятора/интерпретатора, из-за этого его синтаксис был изменен:
Пример 0-5. Изменение: старый синтаксис if..endif:
if ($foo);
    echo "yep\n";
elseif ($bar);
    echo "almost\n";
else;
    echo "nope\n";
endif;

Пример 0-6. Изменение: новый синтаксис if..endif:
if ($foo):
    echo "yep\n";
elseif ($bar):
    echo "almost\n";
else:
    echo "nope\n";
endif;

Точки с запятой были заменены двоеточиями во всех операторах, за исключением завершающего блок (endif).

Синтаксис while

Точно так же как, с if..endif, был изменен синтаксис while..endwhile:
Пример 0-7. Изменения: старый, while..endwhile синтаксис:
while ($more_to_come);
    ...
endwhile;

Пример 0-8. Изменения: новый синтаксис while..endwhile:
while ($more_to_come):
    ...
endwhile;

Внимание!
Используя устаревший синтаксис в PHP 3.0 вы получите бесконечный цикл.

Типы выражений

В PHP/FI 2.0 использовалась левая часть выражения для определения типа результата. PHP 3.0 учитывает обе части выражения для определения типа результата; это может привести к неожиданным результатам работы скриптов 2.0.

Рассмотрите этот пример:

$a[0]=5;
$a[1]=7;

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}

В PHP/FI 2.0 мы получили бы индексы $a. В PHP 3.0 мы не увидим ничего. Причина в том что в PHP 2.0, переменная в левой части выражения - строка; было выполнено сравнение, действительно "" не равно "0", и цикл был пройден. В PHP 3.0, при выполнении операции сравнения строковой и целочисленных переменных, строка будет преобразована в целое число и далее аргументы сравниваются как целые. Это означает в данном случае, что сравненивается значение функции atoi("") которое равно 0, и variablelist которое также равно 0; цикл не выполняется ни разу.

Исправить это достаточно просто. Замените начало на:

while ((string)$key != "") {
Изменены сообщения об ошибках

Сообщения об ошибках PHP 3.0, как правило, точнее чем в 2.0. Вместо указания фрагмента кода, вызвавший ошибку, вы получаете имя файла и номер строки.

Сокращенная операция вычисления логических выражений

В PHP 3.0 используется метод сокращенного вычисления логических выражений. Это означает что в выражении (1 || test_me()), функция test_me() не вызывается, так как результат функции уже не сможет изменить результат этого логического выражения.

Эта незначительная, на первый взгляд, проблема совместимости может приести к неожиданным последствиям. Значения true/false, возвращаемые функциями

 

Большинство внутренних функции были переписаны; теперь они возвращают TRUE, в случае удачи и FALSE в противном случае, тогда как в PHP/FI 2.0 возвращаются 0 и -1 соответственно. Эти новые возможности позволяют создавать более логичный код, такой так $fp = fopen("/your/file") or fail("darn!");. Так как PHP/FI 2.0 не имел четких правил, относительно того, что должна вернуть функция в случае неудачи, в большинстве случаев скрипты использующие подобные функции должны быть проверены вручную после проверки конвертером.
Пример 0-9. Изменения 2.0: возвращаемые значения, старый код:
$fp = fopen($file, "r");
if ($fp == -1);
    echo("Could not open $file for reading<br>\n");
endif;

Пример 0-10. Изменения 2.0: возвращаемые значения, новый код:
$fp = @fopen($file, "r") or print("Could not open $file for reading<br>\n");

Прочие изменения

Пример 0-11. Изменения 2.0: сложение для строковых переменных
echo "1" + "1";

В PHP 2.0 значение этого выражения - 11, а в PHP 3.0 - 2. Используйте вместо него:

echo "1"."1";
$a = 1;
$b = 1;
echo $a + $b;

Значение этого выражения = 2 для PHP 2.0 и 3.0.

$a = 1;
$b = 1;
echo $a.$b;

Это выражение вернет 11 в PHP 3.0.


Приложение 0. Программирование на PHP

Добавление функций в PHP3

 

Прототип функции

Все функции выглядят следующим образом:

void php3_foo(INTERNAL_FUNCTION_PARAMETERS) {
     
}

Это общий вид функции, даже если она не имеет аргументов.

Аргументы

Аргументы всегда имеют тип pval. Этот тип представляет собой объединение (union), в котором содержится фактический тип аргумента. В том случае, если ваша функция принимает несколько аргументов, вы можете сделать что-нибудь вроде этого в начале вашей функции:
Пример 0-1. Объявление переменных:
pval *arg1, *arg2;
if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&arg1,&arg2)==FAILURE) {
   WRONG_PARAM_COUNT;
}

Обратите внимание: аргументы могут быть по значению или по ссылке. В любом случае вы должны передать &(pval *) в getParameters. Если вы хотите проверить, был ли параметр передан ссылкой или нет, вы можете использовать функцию ParameterPassedByReference(ht,n), она вернет 1 или 0.

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

Если вы собираетесь преобразовывать параметр к IS_STRING - сначала создайте новую строку с помощью estrdup() и укажите ее длину, только после этого преобразуйте к IS_STRING. Если вы изменяете строку параметра уже являющегося IS_STRING или IS_ARRAY, сначала придется использовать pval_destructor.

Функции с переменным числом аргументов

Функция может принимать неопределенное количество аргументов. Например, в случае, если ваша функция принимает два или три аргумента, можно использовать следующий код:
Пример 0-2. Функции, принимающие несколько аргументов
pval *arg1, *arg2, *arg3;
int arg_count = ARG_COUNT(ht);

if (arg_count < 2 || arg_count > 3 ||
    getParameters(ht,arg_count,&arg1,&arg2,&arg3)==FAILURE) {
    WRONG_PARAM_COUNT;
}

Использование аргументов функции

Тип каждого аргумента означен в поле type структуры pval. Этот тип может быть любым из приведенных ниже:

Таблица 0-1. Типы переменных PHP
IS_STRING String
IS_DOUBLE Double-precision floating point
IS_LONG Long integer
IS_ARRAY Array
IS_EMPTY None
IS_USER_FUNCTION ??
IS_INTERNAL_FUNCTION ?? (если не может быть передана в функцию - удаляется)
IS_CLASS ??
IS_OBJECT ??

Если вы получаете аргумент одного типа и хотели бы использовать его как аргумент другого типа, или если вы хотите жестко определить тип аргумента - используйте одну из преобразующих функций: convert_to_long(arg1);
convert_to_double(arg1);
convert_to_string(arg1);
convert_to_boolean_long(arg1); /* Если строка равна "" или "0" возвращает 0, во всех иных случаях 1 */
convert_string_to_number(arg1); /* Преобразует строку к LONG или DOUBLE в зависимости от содержания */

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

Тип переменной обозначается в объединении:

Управление памятью в функциях

Память, необходимая внутри функции, должна быть зарезервирована функциями emalloc() или estrdup(). Это функции управления памятью, которые выглядят и работают как обычные malloc() и strdup(). Память освобождается с помощью efree().

В программе могут быть использованы два вида памяти: область памяти, которая будет использована переменными, и временная память для функций. Когда вы присваиваете строковое значение переменной первого типа, вы должны предварительно выделить область памяти при помощи emalloc() or estrdup(). Вы НЕ должны освобождать эту память, если только вы не переписываете знаение переменной в той же функции (это считается не очень хорошим стилем программирования).

Для работы с временной/постоянной памятью необходимо использовать три функции: emalloc(), estrdup(), и efree(). Они работают ТАКЖЕ как их "двойники". Память, выделенную с помощью emalloc() или estrdup() вы должны освободить с помощью efree(), иначе область памяти будет утеряна. Под словами "также, как двойники" мы имеем в виду следующее: если вы пытаетесь освободить память, которая не была выделена с помощью emalloc() или estrdup() вы скорее всего получите ошибку сегментации (segmentation fault). Поэтому будьте внимательны и не забывайте освобождать память после использования.

Если вы выполняете компиляцию с опцией "-DDEBUG", PHP3 выдаст список всех блоков памяти, которые были выделены м помощью emalloc() или estrdup(), но не будут освобождены после завершения скрипта.

Установка переменных в таблице символов

Для упрощения доступа к переменным в таблице символов определены следующие макросы:

[1]

Таблицы символов в PHP 3.0 реализованы в виде хэш-таблиц (hash table). В любой момент времени, &symbol_table указывает на 'главную' таблицу символов, а active_symbol_table указывает на активную в данный момент (они идентичны при запуске, или различны - внутри функции).

Следующие примеры используют 'active_symbol_table'. Вам придется заменить это на &symbol_table ели вы хотите работать с 'главной' таблицей символов. Те же самые функции можно применять и к массивам,как показано ниже.
Пример 0-3. Проверка наличия $foo в таблице символов
if (hash_exists(active_symbol_table,"foo",sizeof("foo"))) { существует... }
else { не существует }

Пример 0-4. Вычисление размера переменной в таблице символов
hash_find(active_symbol_table,"foo",sizeof("foo"),&pvalue);
check(pvalue.type);

В PHP 3.0 маcсивы реализованы с использованием тех же хэш-таблиц, что и в таблицах символов. Это означает что приведенные функции можно использовать и для проверки переменных внутри массивов.

В том случае, если вы хотите определить новое множество в таблице символов:

Сначала, вы можете проверить наличие, используя hash_exists() или hash_find().

Потом инициализируйте множество:
Пример 0-5. инициализация нового множества
pval arr;  
  
if (array_init(&arr) == FAILURE) { failed... };
hash_update(active_symbol_table,"foo",sizeof("foo"),&arr,sizeof(pval),NULL);

Объявление нового (пустого) массива $foo в активной таблице символов.

Вот так вы можете добавить новые элементы:
Пример 0-6. Добавление элементов к массиву
pval entry;
entry.type = IS_LONG;
entry.value.lval = 5;

/* определяет $foo["bar"] = 5 */
hash_update(arr.value.ht,"bar",sizeof("bar"),&entry,sizeof(pval),NULL); 

/* определяет $foo[7] = 5 */ 
hash_index_update(arr.value.ht,7,&entry,sizeof(pval),NULL); 

/* определяет следующее свободное место в $foo[], 
 * $foo[8], to be 5 (работает как и в php2) 
 */
hash_next_index_insert(arr.value.ht,&entry,sizeof(pval),NULL); 

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

hash_next_index_insert() использует примерно такую же логику как и "$foo[] = bar;" в PHP 2.0.

Если вы создаете новый массив с целью возврата его из функции, можно инициализировать его так же как в примере выше:

if (array_init(return_value) == FAILURE) { failed...; }

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

add_next_index_long(return_value,long_value);
add_next_index_double(return_value,double_value);
add_next_index_string(return_value,estrdup(string_value));

Конечно, если добавление не было выполнено правильно после инициализации множества, вероятно вам понадобится проверить множество сначала: pval *arr;

if (hash_find(active_symbol_table,"foo",sizeof("foo"),(void **)&arr)==FAILURE) { can't find... }
else { use arr->value.ht... }

Обратите внимание: hash_find получает лишь ссылку на указатель на pval, а не сам указатель на pval.

Практически любая hash-функция возвращает SUCCESS или FAILURE (hash_exists() возвращает булево значение).

Возврат значений простых типов

Для упрощения возврата значений из функций определены следующие макросы:

Макросы RETURN_* устанавливают значение возвращаемое значение функции и возвращают управление:

Макросы RETVAL_* устанавливают возвращаемое значение, но не возвращает управление.

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

Если ваша функция возвращает логическое значение, используйте RETURN_TRUE и RETURN_FALSE.

Возврат значений сложных типов

Ваша функция может также возвращать и сложные значения; такие как объект или массив.

Возвращение объекта:

  1. Вызвать object_init(return_value).
  2. Присвоить полям значения. Функции, доступные для этого, перечислены ниже.
  3. Возможно, зарегистрировать функции для данного объекта. Для того, чтобы иметь доступ к данным объекта, функция должна получить значение "this" из active_symbol_table. Его типом является IS_OBJECT. По сути, это обычная хэш-таблица, т.е. вы можете использовать хэш-функции с полем .value.ht.

Регистрация метода выполняется следующим образом:

add_method( return_value, function_name, function_ptr );

Функции для добавления полей(свойств):

  1. add_property_long( return_value, property_name, l ) - Добавляет поле 'property_name', типа long
  2. add_property_double( return_value, property_name, d ) - То же, тип double
  3. add_property_string( return_value, property_name, str ) - То же, тип string
  4. add_property_stringl( return_value, property_name, str, l) - То же, тип string длиной 'l'

Возвращение массива:

  1. Вызвать array_init(return_value).
  2. Присвоить значения. Функции доступные для этой цели перечислены ниже.

Функции для добавления элементов:

  1. add_assoc_long(return_value,key,l) - добавить значение, ассоциированое с ключом 'key' типа long
  2. add_assoc_double(return_value,key,d)
  3. add_assoc_string(return_value,key,str)
  4. add_assoc_stringl(return_value,key,str,length) - указывается длина строки
  5. add_index_long(return_value,index,l) - добавить значение элемента 'index' типа long
  6. add_index_double(return_value,index,d)
  7. add_index_string(return_value,index,str)
  8. add_index_stringl(return_value,index,str,length) - указывается длина строки
  9. add_next_index_long(return_value,l) - добавляется элемент массива в свободное место, тип long
  10. add_next_index_double(return_value,d)
  11. add_next_index_string(return_value,str)
  12. add_next_index_stringl(return_value,str,length) - указывается длина строки
Использование списка ресурсов

В PHP 3.0 имеется стандартные методы для работы с разными типами ресурсов. Это сделано для замены локально связанных списков в PHP 2.0.

Доступные функции:

  1. php3_list_insert(ptr, type) - возвращает идентификатор 'id' только что добавленного ресурса
  2. php3_list_delete(id) - удаляет ресурс с идентификатором id
  3. php3_list_find(id,*type) - возвращает указатель на ресурс, заданный идентификатором id, обновляет тип

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

Пример работы с этими функциями показан ниже.
Пример 0-7. Добавление нового ресурса
RESOURCE *resource;

/* ...выделение памяти под ресурс и создание его... */
/* добавление ресурса в список */
return_value->value.lval = php3_list_insert((void *) resource, LE_RESOURCE_TYPE);
return_value->type = IS_LONG;

Пример 0-8. Использование существующего ресурса pval *resource_id;
RESOURCE *resource;
int type;

convert_to_long(resource_id);
resource = php3_list_find(resource_id->value.lval, &type);
if (type != LE_RESOURCE_TYPE) {
php3_error(E_WARNING,"ресурс с номером %d: неправильный тип",resource_id->value.lval);
RETURN_FALSE;
}
/* ...использование ресурса... */

Пример 0-9. Удаление ресурса
pval *resource_id;
RESOURCE *resource;
int type;

convert_to_long(resource_id);
php3_list_delete(resource_id->value.lval);

Типы ресурсов должны быть зарегистрированы в php3_list.h в списке list_entry_type. Кроме того, вы должны написать деструктор для каждого типа ресурсов в list_entry_destructor() файла list.c. Если вы не предпринимаете никаких дополнительных действий в деструкторе, вы должны добавить пустой деструктор.

Использование таблиц постоянных ресурсов

В PHP 3.0 существует методы хранения постоянных ресурсов (ресурсов, которые сохраняются между вызовами). Один из модулей, который использует эту возможность - модуль MySQL, а также mSQL; вы можете изучить правила использования постоянных ресурсов читая код mysql.c. Следует обратить внимание на функции:
php3_mysql_do_connect
php3_mysql_connect()
php3_mysql_pconnect()

Основная идея таблиц постоянных ресурсов заключается в следующем:

  1. Программируется модуль для работы с обычными списками ресурсов (см. секцию 9)
  2. Программируется дополнительные функции связи, которые проверяют, существует ли ресурс в таблице постоянных ресурсов. Если да, он регистрируется как в обычном списке ресурсов указателем на таблицу постояннвых ресурсов. После этого все должно заработать (см. 1.). Если ресурса не существует, тогда необходимо создать его, добавить в таблицу постоянных ресурсов и добавить указатель на нее в таблицу обчных ресурсов.

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

Существует набор функций для работы с таблицами постоянных ресурсов, в котором функции для работы с таблицами постоянных ресурсов аналогичны функциям для работы с обычными списками ресурсов. В этом случае 'list' заменяется на 'plist':

  1. php3_plist_insert(ptr, type) - возвращает дескриптор созданного ресурса
  2. php3_plist_delete(id) - удаляет ресурс с дескриптором id
  3. php3_plist_find(id,*type) - возвращает указатель на ресурс с дескриптором id, устанавливает 'type'

Однако, эти функции могут оказаться бесполезными когда вы создаете постоянный модуль. Можно пользоваться тем, что постоянные таблицы ресурсов реализованы как хэш-таблицы. Например, в модулях MySQL/mSQL, когда вызывается pconnect(), создается строка на основе имени хоста, имени пользователя и его пароля и эта строка помещается в хэш-таблицу как ключ. В следующий раз когда будет вызвана pconnect() с теми же параметрами хоста, пользователя и пароля, будет сгенерирован тот же самый ключ и SQL-связь будет найдено в списке постоянных ресурсов.

Чтобы более полно понять работу функций plist* с хэш-таблицами ознакомтесь с файлами mysql.c или msql.c.

Внимание: ресурсы, предназначеные для таблицы постоянных ресурсов НЕ ДОЛЖНЫ создаваться с помощью менеджера памяти, т.е. они не должны быть созданы с использованием emalloc(), estrdup() и т.д. Вместо этого вы должные использовать обычные malloc(), strdup() и т.д. Причина этого проста: после исполнения запроса каждый участок памяти, выделенный меджером, удаляется. Следовательно не можете использовать менеджер памяти, так как список постоянных ресурсов не должен быть удален в конце сеанса.

Когда вы регистрите ресурс, который собираетесь добавить в таблицу постоянных, вы должны добавить деструкторы для них и в таблицу постоянных ресурсов, и обычных. Дескриптор в таблице обычных ресурсов должен быть пустым. Напротив, деструктор постоянного ресурса должен правильно освободить память, SQL-связи и т.д. Помните, что вы обязаны предусмотреть деструктор для любого типа ресурсов, даже если он будет пустым. Помните так же о том, что из-за того, что функции типа emalloc() не используются с постоянными ресурсами, вы не должны пользоваться в деструкторе функциями типа efree().

Директивы времени выполнения (runtime)

Многие возможности PHP3 могут быть сконфигурированы во время выполнения. Конфигурационные директивы могут быть либо в файле php3.ini, либо, в случае использования Apache, в файлах .conf модуля Apache. Преимущесво использования файлов .conf модуля Apache заключается в том, что в этом случае можно предусмотреть настройки для каждого каталога в отдельности. Эта возможность особенна полезна когда сервер поддерживает несколько виртуальных хостов.

Ниже описаны действия, которые необходимо предпринять для добавления директивы:

  1. Добавьте директиву в секцию php3_ini_structure в mod_php3.h.
  2. В файле main.c, отредактируйте функцию php3_module_startup и добавьте подходящие вызовы cfg_get_string() или cfg_get_long().
  3. Добавьте директиву, ограничения и комментарий в структуру php3_commands в mod_php3.c. Заметьте, что только RSRC_CONF-директивы могут присутствовать в .conf файлах Apache. Директивы OR_OPTIONS могут присутствовать где угодно, включая файлы .htaccess.
  4. В php3take1handler() или в php3flaghandler() добавьте подходящую вашей директиве запись.
  5. В разделе конфигурации функции _php3_info() в info.c необходимо добавить директиву.
  6. После этого, естественно, вы должны использовать вашу директиву где-либо. Вызвать ее можно с помощью php3_ini.directive.
Вызов пользовательских функций

Для вызова пользовательских функций из внутренней нужно использовать call_user_function().

Функция call_user_function() возвращает SUCCESS в случае успеха, и FAILURE в том случае если функция не найдена. Вы должны проверить возвращенное значение! Если возврашен SUCCESS, вы отвечаете за удаление retval и pval. В случае возврата FAILURE, значение retval не определено.

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

Функция call_user_function() принимает шесть аргументов:

HashTable *function_table

Хэш-таблица в которой производится поиск функции.

pval *object

Указатель на объект, с которым вызывается функция. NULL если вызывается глобальная функция. В первом случае аргумент function_table игнорируется и берется и определяется из объекта. Объект может быть изменен функцией (внутри функции он доступен через указатель $this). Если вы не хотите, чтобы это произошло, передайте копию объекта.

pval *function_name

Имя вызываемой функции. Должно быть pval IS_STRING со значениями function_name.str.val и function_name.str.len установленными соответственно. Значение function_name изменяется вызовом call_user_function() - конвертируется в нижний регистр (прописные буквы). Если вы этого не хотите, передайте копию имени функции.

pval *retval

Указатель на структуру pval, в которую записывается возвращаемое функцией значение. Структура должна быть создана заранее, call_user_function() сама по себе не создает ничего.

int param_count

Число параметров, передаваемое функции.

pval *params[]

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

Сообщения об ошибках

Чтобы выдать сообщение об ошибке внутри функций вы должны использовать функкцию php3_error(). Она принимает как минимум два параметра -- первый это категория ошибки, второй - форматирующая строка (как в стандартной функции printf()), за которым могут следовать аргументы форматирующей строки. Ниже представлены категории ошибок:

E_NOTICE

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

E_WARNING

Сообщения этого типа выводятся, но не прерывают выполнение скрипта. Они сообщают, что существует ошибка, которая должна быть отслежена скриптом до того, как будет сделан вызов. Примером служит вызов ereg() с неправильным регулярным выражением.

E_ERROR

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

E_PARSE

Ошибки данного класса генерируются исключительно синтаксическим анализатором. Этот класс ошибок приведен здесь исключительно для полноты изложения.

E_CORE_ERROR

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

E_CORE_WARNING

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

 


Приложение 0. Отладчик PHP

Использование отладчика

 

Отладчик PHP полезен при отслеживании неочевидных ошибок. Он работает через TCP порт каждый раз, когда стартует PHP. Все сообщения об ошибках из запроса будут посланы по этому TCP соединению. Информация этого раздела нужна при работе с такими редакторами как Emacs, или в интегрированной среде разработки (IDE).

Действия по установке отладчика:

  1. Задайте порт TCP, который будет использоваться отладчиком в php3.ini (debugger.port) и разрешите его использование ( debugger.enabled).
  2. Установите пассивный сокет на этот порт (например, командой socket -l -s 1400 в UNIX).
  3. Внутри вашего кода запустите debugger_on(host), где host - запустите IP-адрес хоста, на котором запущен пассивный сокет.

Теперь все предупреждения, замечания и т.д. будут показаны на этом сокете, даже если вы выключили error_reporting().

Протокол отладчика

Протокол отладчика основан на отдельных строках. Каждая строка имеет свой тип; несколько строк могут составлять сообщение. Каждое сообщение начинается со строки с типом start и заканчивается строкой с типом end. PHP может посылать строки с несколькими сообщениями одновременно.

Строка имеет следующий формат:

date  time  host(pidtypemessage-data

date
Дата в формате ISO 8601 (yyyy-mm-dd)
time
Время, включая микросекунды: hh:mm:uuuuuu
host
Имя DNS или IP-адрес хоста, где было сгенерировано сообщение об ошибке.
pid
PID (id процесса) на хосте host процесса исполнившего скрипт PHP в котором произошла ошибка.
type
Тип строки. Сообщает получающей программе как трактовать содержимое строки:

Таблица 0-1. Типы строк отладчика
Тип Значенне
start Сообщает получающей программе, что в этом месте начинается сообщение. Содержимое строки data содержит тип сообщения об ошибке (см. ниже).
message Сообщение об ошибке.
location Имя файла и номер строки, содержащей ошибку. Первая строка location содержит местоположение, data содержит информацию file:line. Строка location всегда следует после строки message и function.
frames Число кадров в дампе стека. Если их четыре, ожидается информация о четырех уровнях вызываемых функций. Если эта строка отсутствует, глубина предполагается нулевой (ошибка произошла на высшем уровне вложенности).
function Имя функции, содержащей ошибку. Повторяется один раз для каждого уровня в стеке вызовов функции.
end Сообщает получающей программе, что сообщение отладчика закончено.

data
Данные строки.

Таблица 0-2. Типы ошибок отладчика
Отладчик Внутренняя в PHP
warning E_WARNING
error E_ERROR
parse E_PARSE
notice E_NOTICE
core-error E_CORE_ERROR
core-warning E_CORE_WARNING
unknown (любая другая)

Пример 0-1. Пример сообщения об ошибке

1998-04-05 23:27:400966 lucifer.guardian.no(20481) start: notice
1998-04-05 23:27:400966 lucifer.guardian.no(20481) message: Uninitialized variable
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: (null):7
1998-04-05 23:27:400966 lucifer.guardian.no(20481) frames: 1
1998-04-05 23:27:400966 lucifer.guardian.no(20481) function: display
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: /home/ssb/public_html/test.php3:10
1998-04-05 23:27:400966 lucifer.guardian.no(20481) end: notice

 

В переводе принимали участие