Руководство по РНР 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() возвратит