PHP Версии 3.0 - язык написания
сценариев, внедренный в HTML. Многое из
синтаксиса заимствовано из C, Java и Perl, с
добавлением специфичных для PHP
возможностей. Задача языка состоит в том,
чтобы дать возможность Web-разработчикам
легко и быстро создавать динамично
изменяемые html-страницы.
Об этом руководстве
Это руководство написано в SGML при помощи DocBook DTD, с использованием DSSSL (Стиль Документа и Язык Спецификаций Семантики) при форматировании. Инструментальные средства, используемые для форматирования HTML, TeX и RTF версий - Jade, написанный Джеймсом Кларком и The Modular DocBook Stylesheets, созданные Норманом Валшом. Структура документации PHP3 была разработана Стигом СЈзером Баккеном.
PHP версии 3.0 - язык описания сценариев, выполняемых на сервере, встроенный в HTML.
Возможно самая сильная и значимая возможность в PHP3 - уровень интеграции с базами данных. Написание веб-страницы работающей с базой данных невероятно проста. В настоящее временя поддерживаются следующие базы данных:
Oracle
Adabas D
Sybase
FilePro
mSQL
Velocis
MySQL
Informix
Solid
dBase
ODBC
Unix dbm
PostgreSQL
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 в
Интернете.
Содержание:
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.
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 " и выводит возникающее в результате изображение. Это - очень удобный способ не рисовать новые изображения кнопки, каждый раз, когда вы хотите изменить текст кнопки. Этим методом они будут динамически сгенерированы.
Экран загрузки файла может быть организован созданием специальной формы, которая выглядит примерно так:
Пример 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 не будет поддерживать возможность загрузки файла.
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
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. */
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.
Эта глава является руководством по конфигурации и установке PHP3. Требуемые знания и программное обеспечение:
базовые навыки работы с UNIX (на уровне выполнения команды "make" и компилятора С);
компилятор ANSI C;
web server (очевидно);
Исходные коды последней версии можно найти по адресу: http://www.php.net.
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.
используйте скрипт "setup", который поставляется с PHP3. Этот скрипт задает Вам ряд вопросов (практически совпадающих со сценарием "install" PHP/FI 2.0) и в конце запускает "configure". Для запуска этого скрипта наберите ./setup.
Этот сценарий также создает файл, называемый "do-conf", который содержит опции, установленные при конфигурации. Вы можете редактировать этот файл для изменения некоторых опций без перезапуска "setup". Тогда выполните ./do-conf и конфигурация запустится с новыми параметрами.
выполните конфигурацию вручную. Для просмотра параметров Вы можете выполнить ./configure --help.
Детали различных параметров конфигурации рассмотрены ниже. Модуль 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):
--with-adabas =DIR
Компиляция с поддержкой Adabas D. Параметр - установочная директория Adabas D, по умолчанию /usr/local/adabasd.
--with-dbase
Включает условный атрибут поддержки Dbase. Не требует внешних библиотек.
--with-filepro
Включает условный атрибут поддержки filePro только для чтения. Не требует внешних библиотек.
--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.
--with-mysql=DIR
Включает поддержку MySQL. Параметр в этой опции - установочная директория MySQL, по умолчанию /usr/local. Она является директорией по умолчанию в дистрибутиве MySQL.
Посмотрите также директивы MySQL Configuration в configuration file.
--with-iodbc=DIR
Включает поддержку iODBC. Этот признак был разработан сначала для iODBC Driver Manager, перераспределяемого ODBC driver manager, который выполняется под множеством разновидностей UNIX. Параметром этой опции является установочная директория iODBC, по умолчанию /usr/local.
--with-openlink=DIR
Включает поддержку OpenLink ODBC. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/openlink.
--with-oracle=DIR
Включает поддержку Oracle. Протестирован и должен работать на версиях Oracle от 7.0 до 7.3. Параметром является директория ORACLE_HOME Вы не должны определять этот параметр, если была установлена среда окружения Oracle.
--with-pgsql=DIR
Включает поддержку PostgreSQL. Параметром является базовая установочная директория PostgreSQL, по умолчанию /usr/local/pgsql.
Посмотрите также директивы Postgres Configuration в configuration file.
--with-solid=DIR
Включает поддержку Solid. Параметром является установочная директория Solid, по умолчанию /usr/local/solid.
--with-sybase=DIR
Включает поддержку Sybase. Параметром является установочная директория Sybase, по умолчанию /home/sybase.
Посмотрите также директивы Sybase Configuration в configuration file.
--with-sybase-ct=DIR
Включает поддержку Sybase-CT. Параметром является установочная директория Sybase, по умолчанию /home/sybase.
Посмотрите также директивы Sybase-CT Configuration в configuration file.
--with-velocis=DIR
Включает поддержку Velocis. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/velocis.
--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
--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.
--with-ldap=DIR
Включает поддержку LDAP (Lightweight Directory Access Protocol). ). Параметром является базовая установочная директория LDAP, по умолчанию /usr/local/ldap.
Более подробную информацию по LDAP можно найти в RFC1777 и RFC1778. Другие параметры конфигурации:
--enable-sysvsem
Включает поддержку для семафоров Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.
--enable-sysvshm
Включает поддержку разделяемой памяти для Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.
--with-xml
Включает поддержку для непроверенных синтаксических анализаторов XML, используя библиотеку от James Clark's expat library. Для больших подробностей обратитесь к XML function reference .
--enable-maintainer-mode
Включает дополнительные зависимости и предупреждения компилятора, используемые некоторыми разработчиками PHP3.
--with-system-regex
Использует библиотеку регулярных выражений прежде, чем собственные условия. Если Вы построили PHP3 в качестве модуля сервера, Вы должны использовать одинаковую библиотеку - и когда собираете PHP3 и когда собираете сервер. Включите эту опцию, если системные библиотеки обеспечивают специальные свойства, которые Вам требуются. Рекомендуется при возможности использовать собственные библиотеки.
--with-config-file-path=DIR
Маршрут, используемый для просмотра the php3.ini file при старте PHP.
--with-exec-dir=DIR
Разрешить только запуск исполнимых файлов в DIR при нахождении в защищенном режиме. По умолчанию это /usr/local/bin. Эта опция только устанавливает значение по умолчанию, которое потом можно изменить при помощи директивы safe_mode_exec_dir в configuration file.
--disable-debug
Не включает информацию об отладке в библиотеке или исполнимой программе. Отладочная информация просто точно указывает на ошибки, поэтому можно выключить отладку, пока PHP3 находится в стадии бета или альфа версий.
--enable-safe-mode
Включает защищенный режим (safe mode) по умолчанию. Это накладывает некоторые ограничения на действия PHP, таких как открытие файлов только внутри корня документа. Для более подробной информации смотрите Security chapter Пользователи CGI всегда должны включать безопасный режим. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы safe_mode configuration file.
--enable-track-vars
Указывает PHP3 отслеживать пришедшие переменные GET/POST/cookie в массивах HTTP_GET_VARS, HTTP_POST_VARS и HTTP_COOKIE_VARS. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы track_vars в configuration file.
--enable-magic-quotes
Включает по умолчанию системные квоты. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы magic_quotes_runtime в configuration file. Смотрим также директивы magic_quotes_gpc и magic_quotes_sybase.
--enable-debugger
Включает внутреннюю поддержку PHP3 debugger. Это свойство находится в стадии испытания. Смотрим также директивы Debugger Configuration в configuration file.
--enable-discard-path
Если это включено, то бинарный PHP CGI может быть безопасно помещен вне дерева web и пользователи не смогут обойти защиту .htaccess. Читайте об этой опции section in the security chapter.
--enable-bcmath
Включает стиль bc произвольной точности математических функций. Смотрим также опцию bcmath.scale в configuration file.
--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
Отключает краткую форму <? ?>тегов PHP3. Вы должны отключить краткую форму, если хотите использовать PHP3 c XML. При отключенной краткой форме принимается только тег PHP3 <?php ?>. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы short_open_tag в configuration file.
--enable-url-includes
Дает возможность выполнять код на других HTTP и FTP серверах непосредственно из PHP3 с include(). Смотрим также опцию include_path в configuration file.
--disable-syntax-hl
Выключает синтаксическое выделение.
При сборке PHP3 установщик просматривает заголовочные и библиотечные файлы в различных директориях, измените соответственно переменные окружения CPPFLAGS и LDFLAGS. Если Вы используете нормальный shell, то вы должны написать LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure Построение:
Когда PHP3 сконфигурирован, Вы готовы к построению исполнимых CGI или библиотеку PHP3. Об этом заботится команда make. Если Вы потерпели неудачу и не можете понять почему, то смотрите раздел Problems section.
Если Вы собрали PHP3 в качестве программы CGI, Вы можете проверить результат, выполнив команду make test. Это хорошая идея - проверить результат сборки. Этим способом Вы можете обнаружить проблему с Вашим PHP3 на ранней стадии, вместо того, чтобы бороться с этим позже. Контрольное тестирование:
Если Вы собрали PHP3 в качестве программы CGI,
Вы можете протестировать свою версию при
помощи команды make bench. Обратите
внимание, что если используется защищенный
режим по умолчанию, то тест может не
завершиться, если он требует больше, чем 30
секунд. Это происходит потому, что set_time_limit()
() не может быть использована в защищенном
режиме. Используйте max_execution_time
для контроля этого времени в Ваших
собственных сценариях. make bench
игнорирует configuration
file.
Это руководство по установке поможет Вам установить и сконфигурировать 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.ini и/или все сценарии загрузки расширений с функцией dl() (либо везде удалите префикс 'php3_'). Это предотвратит путаницу между модулями PHP и их библиотеками обеспечения.
ChangeLog, FAQ и обновленную документацию всегда можно найти на официальном сайте PHP или любом из его зеркал.
Данные шаги должны быть выполнены при любой установке перед специфическими инструкциями сервера:
Распакуйте дистрибутивный файл в директорию по Вашему выбору. Неплохим вариантом будет "C:\PHP3\".
Скопируйте файл 'php3-dist.ini' в Вашу директорию '%WINDOWS%' и переименуйте его в 'php3.ini'. Ваша директория '%WINDOWS%' обычно:
| c:\windows for Windows 95/98 |
| c:\winnt or c:\winnt40 for NT servers |
Отредактируйте Ваш файл 'php3.ini':
вам потребуется изменить 'extension_dir' на путь к Вашей установочной директории PHP, либо куда Вы поместили файлы 'php3_*.dll' (например c:\php3);
установите 'doc_root' в путь, где располагается document_root web сервера (например c:\apache\htdocs или c:\webroot);
выберите, какие модули Вы желаете загружать при старте PHP. Вы можете раскомментировать линии 'extension=php3_*.dll' для загрузки соответствующих модулей. Некоторые модули требуют дополнительной установки некоторых библиотек в систему для корректной работы. В FAQ PHP можно получить больше информации о том, где получить библиотеки поддержки. Вы можете также загружать модули динамически, используя в сценарии dl("php_*.dll");
на PWS и IIS Вы можете установить browscap.ini в директории 'c:\windows\system\inetsrv\browscap.ini' для Windows 95/98 и 'c:\winnt\system32\inetsrv\browscap.ini' для Windows NT. Дополнительную информацию по использованию browscap в PHP можно на зеркале mirror, выберите кнопку "source", чтобы увидеть это в действии;
Рекомендуемый метод конфигурирования этих серверов состоит в использовании INF файлов, поставляемых с дистрибутивом (php_iis_reg.inf). Вы можете отредактировать этот файл и убедитесь, что расширения и установочная директория PHP соответствует Вашим параметрам. Или Вы можете следовать перечисленным ниже шагам, чтобы сделать это вручную.
ПРЕДУПРЕЖДЕНИЕ: Эти шаги включают в себя непосредственную работу с windows registry. Мы настоятельно рекомендуем вам сначала сделать резервную копию registry. Группа разработчиков PHP не несет ответственности, если Вы повредите Ваш registry.
Запустите Regedit;
Перейдите к: HKEY_LOCAL_MACHINE
/System/CurrentControlSet/Services
/W3Svc /Parameters/ScriptMap.
В меню редактирования выберите New->String Value.
Определите расширение, которое Вы хотите использовать для ваших сценариев PHP (например .php3).
Дважды щелкните на значении новой строки и введите путь к php.exe exe в поле данных (например c:\php3\php.exe %s %s). '%s %s' ОЧЕНЬ важны, PHP не будет работать без этого должным образом;
Повторите эти шаги для каждого расширения, которое Вы хотите ассоциировать со сценариями PHP;
Теперь перейдите к HKEY_CLASSES_ROOT;
В меню редактирования выберите New->Key;
Определите ключ к расширению, которое Вы установили в предыдущем разделе (например .php3
Выделите новый ключ, в правой части окна дважды щелкните "default value" и введите phpfile.
Повторите последний шаг для каждого расширения, которое Вы установили в предыдущей секции;
Теперь создайте другой New->Key под HKEY_CLASSES_ROOT и это имя phpfile.
Выделите новый ключ phpfile phpfile и в правой части окна, дважды щелкните "default value" и введите PHP Script.
Щелкните правой клавишей на phpfile и выберите New->Key, это имя Shell.
Щелкните правой клавишей на Shell и выберите New->Key, это имя open.
Щелкните правой клавишей на open и выберите New->Key, это имя command.
Выделите новый ключ command и в правой части окна дважды щелкните на "default value" и введите путь к php.exe. Например: c:\php3\php.exe -q %1. (не забудьте %1).
Выйдите из Regedit;
Пользователи PWS и IIS 3 теперь имеют полностью работающую систему. Пользователи IIS 3 могут использовать tool от Steven Genusa для конфигурирования своих карт сценариев.
Для установки PHP3 на NT Server с запущенным IIS4 следуйте следующим инструкциям:
В Internet Service Manager (MMC) выберите Web site или отправной каталог приложения;
Откройте меню свойства каталога (щелкните правой клавишей мыши и выберите свойства) и тогда щелкните Home Directory, Virtual Directory или Directory tab;
Щелкните кнопку Configuration и тогда выберите App Mappings tab;
Щелкните Add, в рамке Executable наберите c:\path-to-php-dir\php.exe %s %s. Вы ДОЛЖНЫ подставить в конце %s %s , PHP не будет функционировать правильно, если Вы этого не сделаете;
В рамке Extension определите расширение файла, которое Вы желаете ассоциировать со сценариями PHP (обычно (.php3 и .phtml);
Установите требуемую безопасность (это делается в Internet Service Manager) и, если Ваш NT Server использует файловую систему NTFS, добавьте права на исполнение для директории I_USR_, которая содержит php.exe.
Вы должны редактировать Ваш файл srm.conf или httpd.conf , чтобы сконфигурировать Apache для работы с исполняемыми PHP CGI.
Хотя может быть несколько вариантов конфигурирования PHP под Apache, это делается достаточно просто даже для новичка. Пожалуйста, обратитесь к документации по Apache для получения информации о директивах конфигурации.
ScriptAlias /php3/"c:/path-to-php-dir/php.exe"
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3 .phtml
Action application/x-httpd-php3 "php3/php.exe"
Для обеспечения возможности использования исходного текста, просто создайте файл сценария PHP и вставьте этот код в: . Substitute original_php_script.php3php3 с именем желательного файла источника (это только один из путей). Обратите внимание, что на Win-Apache все обратные слеши в пути предложения, такого как "c:\directory\file.ext" должны быть заменены на прямые.
Данная конфигурация должно быть самая простая:
| Шаг 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.
Таблица 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 |
Некоторые проблемы встречаются чаще других. Наиболее распространенные описаны в 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 функционирует таким образом, что если его небрежно использовать, то могут возникнуть проблемы с безопасностью на Вашей системе. Лучший путь для предотвращения такой ситуации - всегда знать, что Вы делаете.
Файл php3.ini читается при запуске синтаксического анализатора PHP. Для версий серверного модуля PHP, это случается только один раз, когда запускается веб-сервер. Для версии CGI это случается на каждом вызове.
Только для каждой директивы указанной
здесь, имеется соответствующая директива
Apache в httpd.conf. Просто добавьте Вы можете посмотреть установочные
параметры большинства значений
конфигурации вызвав функцию phpinfo().
Определяет имя файла, который
автоматически проверяется после
основного файла. Файл включается так же,
как если бы была вызвана функция include(),
с использованием include_path.
Специальное значение none
запрещает авто-добавление.
Примечание: Если сценарий
обрывается функцией exit(),
авто-добавление не
произойдет. Определяет имя файла, который
автоматически проверяется перед
основным файлом. Файл включается так же,
как если бы была вызвана функция include(),
с использованием include_path.
Специальное значение none
запрещает авто-добавление. Это определяет, должны ли ошибки
печататься на экране как часть HTML вывода
или нет. Главный каталог("root directory") PHP на
сервере. Используется только когда он не
пустой. Если PHP сконфигурирован при
помощи safe mode, то никакие
другие файлы за пределами этого каталога
не обслуживаются. Эта директива действительно полезна
только в модуле PHP под Apache. Это
используется на сайтах, где необходимо
включать и выключать синтаксический
анализ PHP на определенные каталоги и
виртуальные серверы. Установкой php3_engine
off в допустимом месте файла httpd.conf,
PHP можно запрещать и разрешать. Имя файла, куда сохраняется журнал
ошибок(log file) сценариев. Если используется
специальное значение syslog,
ошибки отправляются в системный журнал(system
logger). В UNIX'е это syslog(3), а в Windows NT это журнал
событий (event log). Системный журнал не
поддерживается в Windows 95. Устанавливает уровень сообщений об
ошибках. Параметр является целым,
представляющим битовую область. Добавьте
те значения уровней сообщений об ошибках,
которые Вы хотите.
Таблица 4-1. Уровни сообщений об
ошибках Ограничивает файлы, которые могут
открываться PHP в определенном директории-дереве.
Когда сценарий пытается открыть файл с
помощью, например, fopen или gzopen, наличие/расположение
файла проверяется. Когда файл находится
за пределами определенного директория-дерева,
PHP откажется открыть его. Все символьные
ссылки определены, так что нет
возможности избежать этого ограничения с
помощью symlink.
Специальное значение . показывает
что каталог, в котором находится сценарий,
используется как основной каталог.
По умолчанию допускается открытие всех
файлов. Устанавливает допустимость GET/POST/COOKIE в
анализе. Установка по умолчанию этой
директивы - "GPC". Установка ее в
"GP", например, вынудит PHP полностью
игнорировать cookies и перезапишет любые
переменные метода GET переменными метода
POST с одинаковыми именами. Определяет список каталогов где будут
располагаться файлы для функций require()
, include() и fopen_with_path()
. Формат подобен формату системной
переменной окружения PATH :
список каталогов разделяется двоеточием
в UNIX или точкой с запятой в Windows. Пример 4-1. UNIX include_path
Пример 4-2. Windows include_path
Сообщает, что независимые сообщения об
ошибке сценария должны регистрироваться
в журнале ошибок сервера. Этот выбор
таким образом является специфичным для
сервера. Устанавливает magic_quotes состояние для GPC
(Get/Post/Cookie) операций. Когда magic_quotes включено
(on), все ' (одиночные кавычки), " (двойные
кавычки), \ (обратные слэши) и нулевые
значения (NUL's) записываются с обратной
косой чертой автоматически. Если также
включено magic_quotes_sybase, одиночная кавычка
записывается с дополнительной одиночной
кавычкой вместо обратной косой черты. Если magic_quotes_runtime разрешено,
большинство функций, которые возвращают
данные из любого внешнего источника
разной природы, включая базы данных и
текстовые файлы, будут иметь кавычки,
записанные с обратной косой чертой. Если magic_quotes_sybase
также включены, одиночная кавычка
записывается с дополнительной одиночной
кавычкой вместо обратной косой черты. Если magic_quotes_sybase также
разрешено, одиночная кавычка
записывается с дополнительной одиночной
кавычкой вместо обратной косой черты,
если magic_quotes_gpc или magic_quotes_runtime
разрешены. Эта установка определяет максимальное
время в секундах допустимое для сценария,
прежде чем он будет прекращен
анализатором. Это помогает
предохраниться от плохо/некорректно
написанных сценариев. Эта установка определяет максимальный
размер памяти в байтах, допустимый для
этого сценария. Это помогает запретить
плохо/некорректно написанным сценариям
использовать всю доступную память на
сервере. Задает допустимость короткой формы (
<? ?> тегов PHP . Если вы хотите
использовать PHP совместно с XML, эту опцию
необходимо отключить. Если опция
отключена, вы должны использовать
длинную форму тегов ( <?php
?> ). Если опция разрешена, последнее
сообщение об ошибке всегда будет
представлена в глобальной переменной $php_errormsg. Если опция разрешена, входящая
информация GET, POST и cookie может быть найдена
в глобальных ассоциативных массивах $HTTP_GET_VARS
, $HTTP_POST_VARS и $HTTP_COOKIE_VARS
, соответственно. Временный каталог, используемый для
хранения файлов при их загрузке на сервер.
Должен допускать запись, независимо от
того, каким пользователем PHP используется. Основное имя каталога, используемого в
домашнем каталоге пользователей для
файлов PHP, например public_html . Если разрешено, эта опция выдает при
выводе PHP сообщение когда оператор плюс(
+ ) используется в строке. Это должно
облегчить поиск сценариев, которые
должны быть перезаписаны с заменой на (
. ) - string concatenator.
Имя DNS или IP адрес сервера SMTP, который
должен использоваться PHP под Windows для
отправки сообщения функцией mail()
. Определяет "From:" - почтовый адрес,
который используется в сообщении,
отправленном PHP под Windows. Указывает где может быть найдена
программа sendmail , обычно это /usr/sbin/sendmail
или /usr/lib/sendmail Системы не использующие sendmail должны
установить оболочку/замену sendmail их
предлагаемой системой почты, если
имеется. Например, Qmail
пользователи могут указать /var/qmail/bin/sendmail
.
Устанавливает допустимость PHP safe mode.
Читайте главу
Безопасность (Security) для большей
информации Если PHP используется в safe mode, system()
и другие функции, выполняющие
системные программы, отказываются
запускать программы, которые находятся
не в этом каталоге.
DNS-имя или IP-адрес хоста используемого
отладчиком. Номер порта используемого отладчиком. Задает допустимость использования
отладчика.
Эта директива действительно полезна
только в модуле PHP под Apache. Вы можете
разрешать/запрещать динамическую
загрузку расширений PHP функцией dl()
раздельно по каталогам и/или по
виртуальным серверам.
Основная причина для выключения
динамической загрузки - безопасность. С
динамической загрузкой, можно
игнорировать все ограничения safe_mode и
open_basedir.
По умолчанию динамическая загрузка
должна допускаться, за исключением
случаев, когда используется safe-mode. В safe-mode
всегда недопустимо использование dl()
. В каком каталоге PHP должен искать
динамически загружаемые расширения. Какие динамически загружаемые
расширения загрузить, при запуске PHP.
Допустить постоянные/устойчивые MySQL
соединения. Максимальное число постоянных MySQL
соединений за один процесс. Максимальное число MySQL соединений за
процесс, включая постоянные соединения.
Допустить постоянные mSQL соединения. The maximum number of persistent mSQL connections per process. Максимальное число постоянных mSQL
соединений за один процесс.
Допустить постоянные/устойчивые
соединения Postgres. Максимальное число постоянных
соединений Postgres за процесс. Максимальное число Postgres соединений за
процесс, включая постоянные соединения.
Допустить постоянные Sybase соединения. Максимальное число постоянных Sybase
соединений за процесс. Максимальное число Sybase соединений за
процесс, включая постоянные соединения.
Допустить постоянные Sybase-CT соединения.
По умолчанию включено. Максимальное число постоянных Sybase-CT
соединений за процесс. По умолчанию
значение -1 означающее неограниченное
количество. Максимальное число Sybase-CT соединений за
процесс, включая постоянные соединения.
По умолчанию значение -1 означающее
неограниченное количество. Сообщения Сервера со степенью более чем
или равной sybct.min_server_severity будут сообщены
как предупреждения. Эта величина может
также устанавливаться из сценария
вызовом sybase_min_server_severity() .
Значение по умолчанию - 10 , которое
сообщает ошибки строгости информации,
или выше. Сообщения библиотеки Клиента со
строгостью более чем или равной
sybct.min_client_severity будут сообщены как
предупреждениях. Эта величина может
также устанавливаться из сценария
вызовом sybase_min_client_severity() . По
умолчанию - 10, что эффективно запрещает
вывод. Максимальное время (в секундах)
ожидания повторной попытки соединения,
прежде чем будет отказ. Имейте в виду, что
если max_execution_time превышен когда время
попытки соединения закончится, ваш
сценарий будет расторгнут прежде, чем
будут предприняты какие-либо действия на
случай отказа. По умолчанию - одна минута. Максимальное время(в секундах)ожидания
окончания select_db или выполнения запроса.
Имейте в виду, что если max_execution_time
превышен, когда время функционирования
истекает, ваш сценарий будет расторгнут
прежде, чем будут предприняты какие-либо
действия на случай отказа. По умолчанию
не ограничено. Имя хоста, с которым вы хотите
соединиться, для показа sp_who. По умолчанию
- none.
Количество десятичных цифр для всех
функций bcmath.
имя файла возможностей браузера.
ИСТОЧНИК ДАННЫХ ODBC, для использования,
если ничего не определено в odbc_connect()
или odbc_pconnect()
. Имя пользователя, используемое если нет
определений в odbc_connect()
или odbc_pconnect()
. Пароль, используемый, если не
определено в odbc_connect()
или odbc_pconnect()
. Допустить постоянные/устойчивые ODBC
соединения. Максимальное число постоянных ODBC
соединений за процесс. Максимальное число ODBC соединений за
процесс, включая постоянные соединения.
PHP - мощный язык и интерпретатор,
независимо от того, включен ли он в веб-сервер
как модуль или выполняется как разделение
исполнимых файлов(binary) CGI, он
может иметь доступ к файлам, выполнять
команды и открывать сетевые соединения на
сервере. Эти свойства дают возможность
выполнять что-нибудь на веб-сервере
небезопасное по умолчанию. PHP разработан
специально для того чтобы быть более
безопасным языком для написания программ
CGI, чем Perl или C. Как есть много разных путей использования
PHP, есть и большой выбор конфигураций,
управляющих поведением PHP. Большой выбор
опций гарантирует, что вы можете
использовать PHP для многих целей, но это
также означает что есть комбинации этих
опций и, также, конфигураций сервера,
которые заканчиваются небезопасной
установкой. Эта глава объясняет различные
комбинации опций конфигурации и ситуации, в
которых они могут быть удачно использованы.
Использование PHP как исполнимых файлов CGI
- выбор для установок, которые по некоторой
причине не хотят внедрить PHP как модуль в
программное обеспечение сервера (подобно
Apache), или PHP будет использоваться с другими
типами оболочек CGI, чтобы создать надежное
окружение chroot и setuid для сценариев. Эта
установка обычно включает установку
выполняемого(binary) PHP в каталог cgi-bin на веб-сервере.
Бюллетень CERT CA-96.11
рекомендует кроме того, устанавливать
любые интерпретаторы в cgi-bin. Даже если
исполнимый PHP может быть использован в
качестве автономного интерпретатора, PHP
разработан для того чтобы предохранить от
атаки, которую эта установка делает
возможной:
Доступ к системным файлам: http://my.host/cgi-bin/php?/etc/passwd
Информация запроса в url после знака
вопроса (?) проходит как аргументы
командной строки интерпретатору через
интерфейс CGI. Обычно переводчики
открывают и выполняют файл указанный как
первый аргумент в командной строке.
Вызванный как исполняемый CGI-файл, PHP
отказывается интерпретировать командные
аргументы строки. Доступ к любым веб-документам на
сервере: http://my.host/cgi-bin/php/secret/doc.html
Часть URL с информацией о пути, стоящая
после имени PHP-файла, /secret/doc.html
обычно используется, чтобы определить
имя файла, который должен открываться и
интерпретироваться CGI
программой. Обычно некоторые директивы
конфигурации веб-сервера(Apache: Action)
используются, чтобы перенаправить
запросы к документам подобно http://my.host/secret/script.php3
на PHP интерпретатор. С такой установкой
веб-сервер сначала проверяет разрешения
доступа в каталоге /secret , и
потом создает запрос перенаправления http://my.host/cgi-bin/php/secret/script.php3
. К несчастью, если запрос не дается
изначально в этой форме, веб-сервер не
проверяет доступ к файлу /secret/script.php3
, но только для файла /cgi-bin/php
. Таким образом любой пользователь,
имеющий доступ к /cgi-bin/php ,
получает доступ к любым защищенным
документам на сервере.
В PHP, опция compile-time конфигурации --enable-force-cgi-redirect
и директивы runtime-конфигурации doc_root
и user_dir может
использоваться для того чтобы отразить
эту атаку, если дерево документов сервера
имеет любые директории с ограничениями
доступа. Смотрите ниже для полного
объяснения других комбинаций. Если ваш сервер не имеет какой-либо
информации, которая не ограничивается
паролем или управлением доступом на основе
ip, нет потребности в этих опциях
конфигурации. Если ваш веб-сервер не
позволяет вам производить перенаправление,
или сервер не имеет пути, чтобы связаться с
исполнимым PHP, который запрашивает
благополучно перенаправленный запрос, вы
можете указать опцию --disable-force-cgi-redirect
для конфигурирования сценария. Перенаправление может быть
сконфигурировано, например в Apache,
директивами AddHandler и Action (см. ниже).
Эта compile-time опция предохраняет от вызова PHP
напрямую с URL подобно http://my.host/cgi-bin/php/secretdir/script.php3.
Вместо того чтобы выполнить запрос, PHP
выполняет только грамматический разбор в
этом способе если он выполнил правила
перенаправления вебсервера.
Обычно переадресация в конфигурации Apache
сделана со следующими директивами:
Эта опция была протестирована только с
веб-сервером Apache, и полагается на Apache чтобы
установить не-стандартную внешнюю
переменную CGI REDIRECT_STATUS для
перенаправленных запросов. Если ваш сервер
паутины не поддерживает какого-либо
способа сообщать что запрос прямой или
перенаправленный, Вы не можете
использовать эту опцию и Вы должны
использовать один из других путей запуска
версии CGI, документированной здесь.
Размещение активного содержания, такого
как скрипты и модули, в каталогах
документов веб-сервера иногда является
небезопасной практикой. Если при некоторой
ошибке конфигурации сценарии не
выполняются, они отображаются как обычные
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 отдельно.
Очень безопасная опция должна установить
синтаксический анализатор PHP где-нибудь вне
дерева файлов web. В /usr/local/bin,
например. Обратная сторона этой опции
заключается в том что вы должны вставлять
строку подобно:
Чтобы PHP получил возможность корректно
оперировать с PATH_INFO и PATH_TRANSLATEDпри
такой установке, php анализатордолжен быть
скомпилирован с опцией конфигурации --enable-discard-path
Когда PHP используется как Apache модуль, не
наследуются права пользователя Apache (обычно
таковые - "nobody"). Синтаксис PHP заимствован непосредствено
из C. Java и Perl также повлияли на синтаксис
данного языка.
Есть три способа выхода из HTML и перехода в
"режим PHP кода": Пример 5-1. Способы перехода из HTML
Инструкции (утверждения) разделяются также как
в C или Perl - точкой с запятой.
Закрывающий тэг (?>) тоже подразумевает конец
утверждения, поэтому следующие записи
эквивалентны:
PHP поддерживает переменные следующих
типов:
Тип переменной обычно не устанавливается
программистом; вместо этого, он
определяется PHP во время выполнения
программы, в зависимости от контекста в
котором данная переменная используется.
Если вам нравится указывать тип
переменной непосредственно, вы можете
использовать для этого инструкцию cast
либо функцию settype().
Учтите, что переменная может вести себя по
разному в определенных ситуациях, в
зависимости от того, какой тип определен
для нее в данное время. Более подробно это
описано в разделе Изменение
типа.
Для инициализации переменной в PHP вы
просто присваиваите ей значение. Для
большинства переменных это именно так; для
массивов и объектных переменных, однако,
может использоваться несколько иной
механизм.
Массив может инициализироваться одним из
двух способов: последовательным
присвоением значений, или посредством
конструкции array()
(которая описана в разделе Функции
Массивов).
При последовательном добавлении значений
в массив вы просто записываете значения
элементов массива, используя пустой индекс.
Каждое последующее значение будет
добавляться в качестве последнего элемента
массива.
Как в C и Perl, элементы массива нумеруются
начиная с 0, а не с 1.
Для инициализации объектной переменной
используйте новое предписание для
сопоставления данного объекта объектной
переменной.
Областью переменной является контекст,
внутри которого она определена. Главным
образом, все переменные PHP имеют одну
область. Однако, внутри функций
определенных пользователем, представлена
локальная область функции. Любая
переменная, определенная внутри функции, по
умолчанию ограничена локальной областью
функции. Например:
Этот скрипт не выдаст что-либо на выходе,
поскольку инструкция echo относится к
локальной версии переменной $a, значение
которой присваивается не внутри этой
области. Вы можете заметить, что здесь
имеется некоторое отличие от языка C, в том
что глобальные переменные в C автоматически
действуют и внутри функций, если только
они не переписываются локальными
определениями. Это может вызвать некоторые
проблемы, т.к. по неосторожности можно
изменить глобальную переменную. В PHP
глобальные переменные должны быть
продекларированы глобально внутри функции,
если предполагается их использование в
данной функции. Например:
Вышеописанный скрипт выдаст значение
"3". Поскольку $a и $b декларируются
глобально внутри функции, ссылки на данные
переменные трактуются как ссылки на их
глобальные версии. Нет ограничений на
количество глобальных переменных, которыми
можно манипулировать внутри функции.
Вторым способом доступа к переменным из
глобальной области является использование
специального опеределяемого PHP массива
$GLOBALS. При этом предыдущий пример может быть
записан как:
Массив $GLOBALS является ассоциативным
массивом, в котором имя глобальной
переменной является ключом, а значение этой
переменной является значением элемента
массива.
Другой важной характеристикой от области
определения переменной является статическая
переменная. Статическая переменная
существует только в локальной области
функции, но она не теряет своего значения
когда программа, при исполнении, покидает
эту область. Рассмотрим следующий пример:
Эта функция совершенно бесполезна
практически, поскольку каждый раз при ее
вызове она устанавливает $a в 0 и выводит
"0". Выражение $a++ , которое
увеличивает значение переменной, так же
бесполезно, поскольку при выходе из функции
переменная $a исчезает. Для придания
дееспособности функции подсчета, которая
не теряла бы нить текущего счета,
переменная $a декларируется как статическая:
Теперь, каждый раз при вызове функции Test()
она будет выводить значение $a и увеличивать
его.
Статические переменные также весьма
существенны, когда функции вызываются
рекурсивно. Рекурсивные функции - это те,
которые вызывают сами себя. Составлять
рекурсивную функцию нужно внимательно, т.к.
при неправильном написании можно сделать
рекурсию неопределенной. Вы должны быть
уверены в адекватности способа прекращения
рекурсии. Следующая простая функция
рекурсивно считает до 10:
Иногда бывает удобно давать переменным
изменяемые имена. Такие имена могут
изменяться динамически. Обычная переменая
устанавливается так:
Изменяемая переменная берет некое
значение и обрабатывает его как имя
переменной. В приведенном выше примере
значение hello может быть
использовано как имя переменной,
посредством применения двух записанных
подряд знаков доллара, т.е.:
С этой точки зрения, две переменных
определены и сохранены в символьном дереве
PHP: $a с содержимым "hello" и $hello с
содержимым "world". Так, инструкция:
осуществляет то же самое, что и инструкция:
а именно, обе они выводят: hello
world.
Чтобы использовать изменяемые переменные
с массивами, необходимо решить проблему
неоднозначности. Это означает, что если вы
пишете $$a[1], то синтаксическому анализатору
необходимо знать, имеете ли вы в виду
использовать $a[1] как переменую, или вы
предполагаете $$a как переменную а [1] как
индекс этой переменной. Синтаксис для
разрешения подобной неоднозначности такой:
${$a[1]} для первого случая и ${$a}[1] для второго.
Когда программой-обработчиком формы
является PHP-скрипт, переменные этой формы
автоматически доступны для данного скрипта
PHP. Например, рассмотрим следующую форму: Пример 5-2. Простая переменная формы
При активизации формы PHP создаст
переменную $name, значением
которой будет то содержимое, которое было
введено в поле Name: данной формы.
PHP также воспринимает массивы в контексте
переменных формы, но только одномерные. Вы
можете, например, группировать
взаимосвязанные переменные вместе или
использовать это свойство для определения
значений переменных при множественном
выборе на входе: Пример 5-3. Более сложные переменные
формы
Если PHP-атрибут track_vars включен, через
установку конфигурации track_vars
или директивой <?php_track_vars?>,
тогда переменные, активизированные
посредством методов POST или GET, будут также
находиться в глобальных ассоциативных
массивах $HTTP_POST_VARS и $HTTP_GET_VARS соответственно.
При активизации (запуске) формы можно
использовать рисунок (изображение) вместо
стандартной кнопки запуска, в тэге подобном
этому:
Когда пользователь нажимает кнопку мыши
где-либо над таким рисунком, сопровождающая
форма передается на сервер с двумя
дополнительными переменными, sub_x и sub_y. Они
содержат координаты места нажатия кнопки
мыши пользователем внутри данного рисунка.
Можно отметить, что практически, реальные
имена переменных передаваемые браузером,
содержат точку вместо символа
подчеркивания, но PHP конвертирует точку в
элемент подчеркивания (underscore)
автоматически.
PHP очевидным образом поддерживает HTTP
кукисы, как это определено в Netscape's
Spec. Кукисы являются механизмом хранения
данных в удаленном браузере, используемым
для поддержки процедуры обмена или
идентификации ответа пользователя.
Кукисы можно устанавливать используя
функцию SetCookie().
Кукисы являются частью заголовка HTTP,
поэтому функция SetCookie()
должна вызываться прежде чем какие-либо
передаваемые данные посылаются браузеру.
Это такое же ограничение, как и для функции Header().
Любые кукисы, посылаемые вам клиентом,
автоматически преобразовываются в
переменные PHP, также как данные методов GET и
POST.
Если необходимо назначить множественные
значения одному кукису, просто добавьте
квадратные скобки [ ] к имени кукиса.
Например:
Учтите, что текущий кукис заменит
предыдущий с тем же именем в вашем браузере,
если только путь или домен не являются
различными. Поэтому, при работе с
программами обслуживания карт вы можете
использовать для сохранения данных счетчик
и посылать его значения дальше и т.п. Пример 5-4. Пример функции SetCookie
PHP автоматически создает переменные
окружения, как и обычные переменные.
Хотя при поступлении информации
механизмы GET, POST и Cookie также атоматически
создают переменные PHP, иногда лучше явным
образом прочитать переменную окружения,
для того чтобы быть уверенным в получении
ее правильной версии. Для этого может
использоваться функция getenv().
Для установки значения переменной
окружения пользуйтесь функцией putenv().
PHP не требует явного определения типа при
объявлении переменной, тип переменной
определяется по контексту в котором она
используется. То есть, если вы присваиваете
строковое значение переменной var,
var становится строкой.
Если затем присвоить переменной var
значение целого (числа), то она станет
целым.
Примером автоматического преобразования
типа в PHP может служить оператор сложения '+'.
Если какой-либо из оперендов является
числом с дробной частью (тип double), то затем
все операнды оцениваются как double и
результат будет иметь тип double. Иначе, эти
операнды будут интерпретированы как целые
(integers) и результат будет так же иметь тип
integer. Отметим, что при этом НЕ меняются типы
самих операндов, меняется только оценка
этих операндов.
Если последние два примера выше кажутся
неясными, смотрите Преобразование
строк.
Если вы хотите чтобы переменная
принудительно оценивалась как имеющая
определенный тип, смотрите раздел Приведение
типа. Если вы желаете изменить тип
переменной, смотрите settype().
Поскольку PHP определяет типы переменных и
преобразует их (в общем) по мере
необходимости, не всегда очевидно какой тип
данная переменная имеет в какой-то
отдельный момент. Поэтому PHP включает
несколько функций, которые позволяют
определить текущий тип переменной. Это
функции gettype(),
is_long(), is_double(),
is_string(), is_array(),
и is_object().
Приведение типа работает в PHP во многом
так же как в C: название требуемого типа
записывается в круглых скобках перед
переменной, которая должна быть приведена к
данному типу.
Допускается следующее приведение типов:
Заметим, что табуляция и пробелы
допускаются внутри круглых скобок, поэтому
следующее функционально эквивалентно:
Когда строковая переменная оценивается
как числовая, результирующее значение и тип
переменной определяются следующим образом.
Переменная string будет оценена как double, если
она содержит любой из символов '.', 'e', или 'E'.
Иначе она будет оценена как integer.
Данное значение задается начальной
частью строковой переменной. Если строка
начинается с допустимых цифровых данных, то
это значение и будет использоваться. Иначе,
будет значение 0 (ноль). Допустимые цифровые
данные - это конструкция из факультативного
символа, следующего за одной или
несколькими цифрами (содержащими
факультативно десятичную точку),
обозначающего экспоненту. Экспонента может
обозначаться символом 'e' или 'E', который
может следовать за одной или несколькими
цифрами.
Дополнительную информацию смотрите в
руководстве Unix страница для strtod(3).
PHP поддерживает как скалярные так и
ассоциативные массивы. Фактически, между
ними нет разницы. Вы можете создать массив
используя функции list()
или array(), или
можно явно задать значение каждого
элемента массива.
Можно также создать массив просто
добавляя в него значения.
Массив может сортироваться функциями asort(),
arsort(), ksort(),
rsort(), sort(),
uasort(), usort(),
и uksort() в
зависимости от типа желаемой сортировки.
Подсчет количества элементов массива
осуществляется функцией count().
Перемещаться по массиву позволяют
функции next() и prev().
Другим типовым способом перемещения по
массиву является использование функции each(). Любой скрипт PHP состоит из
последовательности операторов. Оператор
может быть присваиванием, вызовом функции,
циклом, условным выражением или пустым
выражением (ничего не делающим). Операторы
обычно заканчиваются точкой с запятой.
Также операторы могут быть объединены в
группу заключением группы операторов в
фигурные скобки. Группа операторов также
является оператором. В этой части описаны
различные типы операторов.
PHP определяет несколько констант и
предоставляет механизм для определения
Ваших констант. Константы похожи на
переменные, но они имеют слегка изменЈнный
синтаксис.
ПредопределЈнные константы - это __FILE__ and
__LINE__, которые соответствуют имени файла и
номеру строки, которая выполняется в
настоящий момент. Вы можете определить дополнительные
константы с помощью функций define() и undefine()
. Выражения - это краеугольный камень PHP. В PHP
почти всЈ является выражениями. Простейший
и наиболее точный способ определить
выражение - это "что-то, имеющее значение".
Простейший пример, приходящий на ум это
константы и переменные. Когда вы печатаете
"$a = 5", вы присваиваете значение '5'
переменной $a. '5', очевидно, имеет значение 5,
иными словами'5' это выражение со значением5
(в данном случае'5' это целочисленная
константа).
После этого присваивания вы считаете
значением $a 5, также, если вы напишете $b = $a,
вы будете ожидать того же как, если бы вы
написали $b = 5. Другими словами, $a это также
выражение со значением 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) /* функция удваивания
переменной */ В начале главы мы сказали, что объясним
различные типы операторов и, как и было
обещано выражения могут быть операторами.
Впрочем, не каждое выражения является
оператором. В данном случае оператор имеет
форму 'выражение' ';', то есть выражение, за
которым следует точка с запятой. В '$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 это одна из важнейших
возможностей многих языков, включая PHP. Она
позволяет организовать выполнение
фрагментов кода по условию. Возможности PHP
по использованию выражения IF похожи на C:
if (expr) statement
Как объяснялось в части про выражения,
вычисляется логический результат "expr"
. Если expr равно TRUE, то PHP выполнит
"statement", а если FALSE - проигнорирует.
Следующий пример выведет фразу 'a is bigger than
b' если $a больше $b:
Зачастую Вам требуется исполнить больше
чем одно выражение по условию. Конечно, не
надо окружать каждое выражение
конструкцией IF. Вместо этого вы можете
сгруппировать несколько выражений в блок
выражений. К примеру, слежующий код не
только выведет фразу, но и присвоит
значение $a переменной $b:
if ($a > $b) { print "a is bigger than b"; $b = $a; }
Выражение IF может иметь неограниченную
степень вложенности в другие выражения IF,
что позволяет Вам эффективно использовать
выполнение по условию различных частей
программы.
Зачастую Вам требуется исполнить одно
выражение, если соблюдается какое-либо
условие и другое выражение в противном
случае. Вот для этого применияется ELSE. ELSE
расширяет возможности IF по части обработки
вариантов выражения, когда оно равно FALSE.
Данный пример выведет фразу 'a is bigger than b'
если $a больше $b, и 'a is NOT bigger than b' в противном
случае:
Выражение ELSE выполняется только если
выражение IF равно FALSE, а если есть
конструкции ELSEIF - то если и они также равны
FALSE (см. ниже).
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 может быть
несколько ELSEIF. Первое выражение ELSEIF (если
таковые есть), которое будет равно TRUE, будет
выполнено. В PHP3 вы можете написать 'else if' (два
слова), что будет значить то же самое, что и
'elseif' (одно слово).
Выражение ELSEIF будет выполнено только если
выражение IF и все предыдущие ELSEIF равно FALSE, а
данный ELSEIF равен TRUE.
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) .Вот пример подобной
структуры :
Цикл WHILE - простейший тип цикла в PHP3. Он
действует как и его аналог в C. Основная
форма оператора WHILE :
WHILE(expr) statement
Смысл оператора WHILE прост. Он предписывает
PHP выполнять вложенный(е) оператор(ы) до тех
пор пока expr равно TRUE. Значение выражения
проверяется каждый раз при начале цикла,
так что если значение выражения изменится
внутри цикла, то он не прервЈтся до конца
текущей итерации (выполнение всего блока
вложенных операторов - это одна итерация).
Иногда, если значение expr равно FALSE с самого
начала, цикл не выполняется ни разу.
Как и в IF, вы можете сгруппировать
несколько операторов внутри фигурных
скобок или использовать альтернативный
синтаксис :
WHILE(expr): выражения ... ENDWHILE;
Следующие примеры идентичны - оба выводят
номера с 1 по 10:
Цикл DO..WHILE очень похож на WHILE за
исключением того, что значение логического
выражения проверяется не до, а после
окончания итерации. Основное отличие в том,
что DO..WHILE гарантировано выполнится хотя бы
один раз, что в случае WHILE не обязательно.
Для циклов DO..WHILE существует только один
вид синтаксиса:
Этот цикл выполнится один раз, так как
после окончания итерации будет проверено
значение логического выражения, а оно равно
FALSE ($i не больше 0), и выполнение цикла
завершится.
Опытные программисты на C может быть
знакомы с иным использованием DO..WHILE,
позволяющем прекратить исполнение блока
операторов в середине путЈм внедрения его в
цикл DO..WHILE(0) и использования оператора BREAK.
Следующий код демонстрирует такую
возможность :
Не беспокойтесь, если вы не совсем поняли
это. Вы можете программировать весьма
мощные скрипты и без этой возможности.
Циклы FOR - наиболее мощные циклы в PHP. Они
работают подобно их аналогам в C. Синтаксис
цикла FOR :
FOR (expr1; expr2; expr3) statement
Первое выражение (expr1) безусловно
вычисляется(выполняется) в начале цикла.
В начале каждой итерации вычисляется expr2.
Если оно равно TRUE, то цикл продолжается и
выполняются вложенный(е) оператор(ы). Если
оно равно FALSE, то цикл заканчивается.
В конце каждой итерации вычисляется(исполняется)
expr3.
Каждое из этих выражений может быть
пустым. Если expr2 пусто, то цикл продолжается
бесконечно (PHP по умолчанию считает его
равным TRUE, как и С). Это не так бесполезно,
как могло бы показаться, так как зачастую
вам требуется закончить выполнение цикла
используя оператор BREAK в сочетании с
логическим условием вместо использования
логического выражения в FOR.
Рассмотрим следующие примеры. Все они
выводят номера с 1 по 10 :
Конечно, первый вариант кажется лучшим (или
четвЈртый), но оказывавется возможность
использования пустых выражений в цикле FOR
зачастую оказывается полезной.
PHP также поддерживает альтернативный
синтаксис FOR :
FOR (expr1; expr2; expr3): выражение; ...; endfor;
Другие языки используют оператор foreach для
того, чтобы обрабатывает массивы или списки.
PHP использует для этого оператор while и
функции list() и
each() . Для примера смотрите документацию
по этим функциям.
VREAK прерывает выполнение текущего цикла.
CONTINUE переходит на начало ближайшего цикла.
Оператор SWITCH похож на группу операторов IF
с одинаковым выражением. Во многих случаях
вам нужно сравнить переменную (или
выражение) со многими различными
значениями и выполнить различные фрагменты
кода в зависимости от того, чему будет равно
значение выражения. Это как раз то, для чего
предназначается оператор SWITCH.
Следующие 2 примера это 2 разлчиных пути
для достижения одной вещи, но один
использует серию операторов IF, а другой -
оператор SWITCH.
Важно понять как работает оператор SWITCH
чтобы избежать ошибок. SWITCH выполняет
последовательно оператор за оператором. В
начале код не исполняется. Только когда
встречается оператор CASE с подходящим
значением, PHP начинает выполнять программу.
PHP продолжает выполнять операторы до конца
блока SWITCH или пока не встретит оператор BREAK.
Если вы не напишете BREAK в конце цикла
операторов, то PHP продолжит выполнять
операторы и следующего SWITCH'а. К примеру :
В этом случае, если $i равно 0, то PHP выполнит
все операторы print! Если $i равно 1, то PHP
выполнит последние два print. И только если $i
равно 2, вы получите ожидаемый результат и
выведено будет только 'i equals 2'. Так что важно
не забывать ставить BREAK (разве что в
некоторых случаях вы специально не
захотите их ставить для достижения
определЈнной цели).
Специальный случай - это 'default case'. Этот
оператор соответствует всем значениям,
которые не удовлетворяют другим case'ам. К
примеру :
Другой заслуживающий упоминания факт -
это то, что выражения в CASE могут быть любого
скалярного типа, то есть целые числа или
числа с плавающей запятой, а так же строки.
Массивы и объекты не будут ошибкой, но в
данном случае они не имеют значимости.
Оператор REQUIRE заменяет себя содержимым
указанного файла, похоже на то,как в
препроцессоре C работает #include.
Это означает, что вы не можете поместить
require() внутрь цикла и ожидать, что он включит
содержимое дугого файла несколько раз в
процессе каждой итерации. Для это
используйте INCLUDE.
require ('header.inc');
Оператор INCLUDE вставляет и выполняет
содержимое указанного файла.
Это случается каждый раз, когда
встречается оператор INCLUDE, так что вы можете
включить этот оператор внутрь цикла, чтобы
включить несколько файлов :
include() отличается от require()
тем, что оператор include выполняется каждый
раз при его встрече, а require()
заменяется на содержимое указанного файла
безотносительно будет ли выполнено его
содержимое или нет
Так как include() это
специальный оператор, требуется заключать
его в фигурные скобки при использовании
внутри условного оператора.
Когда файл исполняется, парсер пребывает
в "режиме HTML", то есть будет выводить
содержимое файла, пока не встретит первый
стартовый тег PHP (<?).
Также смотрите readfile(),
virtual().
Функция может быть объявлена следующим
образом:
Внутри функции может быть любой верный
код PHP3, даже объявление другой функции или класса
.
Функции должны быть определены перед тем,
как на них ссылаться.
Результаты возвращаются через
необязательный оператор return. Возвращаемый
результат может быть любого типа, включая
списки и объекты.
Множественные результаты не могут быть
возврашены в качестве результата, но вы
можете реализовать это путЈм возврата
списка :
Информация может быть передана функции
через список аргументов, которые являются
разделЈнным запятыми списком переменных и/или
констант.
PHP3 поддерживает передачу аргументов по
значению (по умолчанию), по
ссылке, и
значения по умолчанию. Списки аргументов
переменной длины не поддерживаются, но того
же можно достичь, передавая массивы.
По умолчанию, аргменты функции передаются
по значению. Если вы хотите в функции
модифицировать аргументы, то можете
передать их по ссылке.
Если вы хотите, чтобы аргумент всегда
передавался по ссылке, то следует поставить
амперсенд (&) перед именем аргумента в
объявлении функции :
Если вы хотите передать аргумент по
ссылке в случае, когда по умолчанию такого
не делается, то добавьте амперсенд перед
именем аргумента в вызове функции :
Функции могут определять значения по
умолчанию для скалярных аргументов в стиле
C++ как показано :
Этот пример выведет следующее :
Значение по умолчанию должно быть
константой, а не переменной или, к примеру,
членом класса.
Учтите, что когда вы объявляете аргументы
по умолчанию, они должны быть справа от всех
"неумолчальных" аргументов, в
противном случае это не будет работать, как
задумано. К примеру :
Этот пример выведет следующее :
А теперь сравните с этим :
И выводит следующее :
Оператор OLD_FUNCTION позволяет вам
определяить функцию использую синтаксис
PHP/FI2 (за исключением того, что вы должны
заменить 'function' на 'old_function').
Это свойство только для совместимости и
должно использоваться лишь конверторами
PHP/FI2 -> PHP3.
Описанные таким образом функции не могут
быть вызваны из служебного кода PHP. Это к
тому же значит, что вы не можете
использовать их в функциях типа usort(),
array_walk() и register_shutdown_function().
Вы можете обойти это путЈм введения
специальной функции в терминах PHP3, которая
будет вызывать OLD_FUNCTION. CLASS
Класс - это набор переменных и функций,
работающих с этими переменными. Класс
определяется следующим образом :
Это определения класса Cart, который
состоит связного списка наименований
товаров в корзине и двух функций для
добавления и удаления вещей из корзины.
Классы это типы, то есть, заготовки для
реальных переменных. Вы должны создавать
переменные желаемого типа, используя
оператор new :
Таким образом, мы создали объект $cart
класса Cart. Функция add_item() этого объекта
вызывается для добавления 1 товара номер 10 к
корзине.
Классы могут быть расширениями других
классов. Расширенный класс обладает всеми
переменными и функциями базового класса и
тем, что вы определите при расширении
класса. Это делается используя ключевое
слово extends :
Это определяет класс Named_Cart, который имеет
все переменные и функции класса Cart плюс
дополнительную переменную $owner и
дополнительную функцию set_owner(). Вы можете
создать поименованую корзину обычным
образом и установить или получить
владельца корзины. Также вы можете
использовать и нормальные функции корзины
в поименованой корзине :
Внутри функций класса переменная $this
означает сам объект. Вы должны использовать
$this->нечто для доступа к переменной или
функции с именем 'нечто' внутри объекта.
Конструкторы это функции в классе,
которые автоматически вызываются, когда вы
создаЈте новую переменную данного класса.
Функция становится классом, когда она имеет
такое же имя, как и сам класс.
Мы определили класс Auto_Cart который
является тем же классом Cart плюс имеет
конструктор, который инициализирует
корзину при создании, наполняя еЈ одним
товаром типа "10". Конструкторы также
могут иметь аргументы, и эти аргументы
могут быть необязательными, что делает
конструктор более полезным :
Помните основную арифметику из школы? Эти
операторы работают подобным образом
Таблица 7-1. Арифметические операторы Оператор деления("/") возвращает
целую величину(результат целочисленного
деления) если оба оператора - целые (или
строка преобразованная в целое). Если
каждый операнд является величиной с
плавающей запятой, выполнится деление с
плавающей запятой.
B действительности есть только один
оператор -- оператор конкатенации (".").
Основным оператором присваивания
является "=". Вы могли подумать что это
"равно"("equal to"). Но это не так. В
действительности это означает что левый
операнд получает значение выражения в
правых (собирательное присваивание).
Значением выражения присваивания
является присваиваемая величина. Так что
если "$a = 3", то это 3. Это позволит Вам
делать некоторые мудреные вещи:
В дополнение к основным операторам
присваивания есть дополнительные "комбинационные
операторы",для всех арифметических и
строковых операторов, что позволяет Вам
использовать значение в выражении и затем
устанавливать свое значение в результате
этого выражения. Например:
$a = 3; $a += 5; // теперь $a равно 8, как если бы
мы сказали: $a = $a + 5; Бинарные Операторы позволяют вам
изменять биты в целых числах.
Table 7-2.Бинарные Операторы Таблица 7-3. Логические операторы Разница в двух различных вариантах
операторов "and" и "or" - в различии
приоритетов операций. (см. ниже)
Операторы Сравнения, как и
подразумевается в их имени, позволяют Вам
сравнивать две величины.
Таблица 7-4. Операторы Сравнения ada_afetch -- загрузка строки результата
исполнения скрипта в массив ada_autocommit -- чтение и переключение флага
режима автоисполнения соединения See odbc_autocommit(). ada_close -- завершение соединения с сервером See odbc_close(). ada_commit -- совершение Adabas D транзакции See odbc_commit() ada_connect -- соединение с источником данных
Adabas D See odbc_connect(). ada_exec -- подготовка и исполнение SQL
инструкции See odbc_exec()
or odbc_do(). ada_fetchrow -- выборка строки из результата
исполнения скрипта See odbc_fetch_row(). ada_fieldname -- получение имени поля (столбца) See odbc_field_name(). ada_fieldnum -- получение номера поля See odbc_field_num(). ada_fieldtype -- получение типа данных поля See odbc_field_type(). ada_freeresult -- освобождение ресурсов,
отводимых под содержимое результата See odbc_free_result(). ada_numfields -- получение количества полей (столбцов)
в содержимом результата See odbc_num_fields(). ada_numrows -- количество строк (рядов) в
содержимом результата See odbc_num_rows(). ada_result -- получение данных из содержимого
результата See odbc_result(). ada_resultall -- распечатка результата в виде HTML
таблицы See odbc_result_all(). ada_rollback -- откат транзакции See odbc_rollback(). Выполняет подробный запрос для
указанного URI. Получает всю важную
информацию о заданном ресурсе и
возвращает эту информацию по классам.
Описание возвращаемых классов:
apache_note() это специальная
функция Apache которая получает и
устанавливает значения в таблице нотаций(примечаний)
запроса. При вызове с одним аргументом она
возвращает текущее значение note_name.
При вызове с двумя аргументами она
устанавливает значение нотации(примечания)
note_name в note_value и
возвращает предыдущее значение нотации(примечания)
note_name. Эта функция возвращает ассоциативный
массив из всех HTTP заголовков в текущем
запросе. Пример 1. GetAllHeaders()
Примечание: GetAllHeaders()
на данный момент это поддерживается
только если PHP запущен как модуль Apache. virtual() является спец.функцией
Apache, которая эквивалентна <!--#include
virtual...--> в mod_include. Она выполняет подзапрос
Apache. Применима для включения CGI скриптов
или .php файлов, или чего-нибудь еще, на чем
вы должны выполнить парсинг(анализ текста)
через Apache. Помните, что для CGI скриптов,
скрипт должен выдавать правильнывые
заголовки. Т.е. должне быть как минимуцм
Content-type заголовок. Для PHP файлов, вы должны
использовать include()
или require(). Возвращает массив параметров. Параметры
могут быть даныпо индексу при
использовании опрератора =>.
Помните что array() - это
языковая конструкция, и не является
регулярным выражением.
Следующий пример демонстрирует как
создавать двумерный массив, как
определять ключи для ассоциативного
массива, и как в пропускать-и-продолжать
числовые индексы в нормальном массиве. Пример 1. array()
См. также: list(). Применяет функцию с именем func
для каждого элемента массива arr.
Элементы проходят как первый аргумент
функции func; если func
требует больше чем один аргумент, будет
сгенерировано предупреждение всякий раз,
когда array_walk() вызывает func.
Эти предупреждения могут подавляться
добавлением знака '@' при вызове array_walk(),
или при использовании Помните, что func будет
работать с елементами массива arr,
так что все изменения сделанные над
элементами массива будут изменениями для
самого массива.
Пример 1. array_walk()
Эта функция сортирует массив так что
индексы массива поддерживают их
корреляцию с элементами массива с
которыми они связываются. Это
используется, главным образом, для
сортировки ассоциативных массивов, где
имеет значение фактический элементный
порядок. Пример 1. arsort()
Эта функция сортирует массив так что
индексы массива поддерживают их
корреляцию с элементами массива с
которыми они связываются. Это
используется, главным образом, для
сортировки ассоциативных массивов, где
имеет значение фактический элементный
порядок Пример 1. asort()
Возвращает число элементов в var,
который является естественно массивом (что
либо другое будет иметь один элемент).
возвращает 0 если переменная не
укстановлена.
возвражает 1 если переменная не является
массивом.
См. также: sizeof(),
isset(), и is_array(). Каждая переменная-массив имеет
внутренний указатель, который указывает
на один из своих элементов. Кроме того, все
элементы в массиве связываются
двунаправленным списком указателей для
дополнительных целей. Внутренний
указатель указывает на первый элемент,
который включался в массив пока Вы не
выполняли одну из функций, которые
модифицируют этот указатель в этом
массиве.
Функция current()просто
возвращает элемент массива, на который в
данный момент указывает внутренний
указатель. Он никак не перемещает
указатель. Если внутренний указатель
указывает на конец списка элементов, current()
возвращает false(ложно).
Внимание: если массив
содержит пустые элементы (0 или "",
пустую строку), то функция возвратит
"false" для каждого из них. Это
показывает, что текущий элемент является
нулевым значением или вы дошли до конца
массива. Для того, чтобы правильно
просматривать массив, используйте функцию
each().
Возвращает следующую пару ключ/значение
из массива array и
предоставляет курсор массива. Эта пара
возвращается в четырех-элементный массив,
с ключами 0, 1, key,
и value. Элементы Пример 1. each()
$bar теперь содержит
следующие пары ключ/значение:
0 => 0 1 => 'bob' key => 0 value => 'bob' $bar теперь содержит
следующие пары ключ/значение:
0 => 'Robert' 1 => 'Bob' key => 'Robert' value => 'Bob' each(), как правило,
используется вместе с list()
чтобы просмотреть массив; например,
$HTTP_POST_VARS: Пример 2. Просмотр $HTTP_POST_VARS с
помощью each()
См. также key(),
list(), current(),
reset(), next(),
и prev(). end() перемещает array's
внутренний указатель на последний элемент
массива.
key() Возвращает индекс
элемента в текущей позиции массива
Сортирует массив по ключу, используя
ключ для корреляциях данных. Это полезно
главным образом для ассоциативного
массива. Пример 1. ksort()
Подобно array(),
функция list в действительностью является
языковой конструкцией а не функцией list()
используется для связи списка переменных
одной операцией. Пример 1. list()
Возвращает следующий элемент массива, от
текущей позиции внутреннего указателя
массива, или "ложь"(false) если нет
больше элементов. Внимание:
если массив содержит пустые элементы,
тогда эта функция возвратит "ложь"(false)
и для этих элементов. Чтобы правильно
просмотреть массив, который может
содержать пустые элементы, смотрите
функцию each().
next() ведет себя подобно current(),
с одной лишь разницей. Он передвигает
внутренний указатель массива на один
элемент вперед прежде, чем возвратить
элемент. Это означает что он возвращает
значение следующего элемента и
передвигает на него внутренний указатель
массива. Если при обращении к следующему
элементу обнаружен конец массива - next()
возвращает "ложь"(false).
Возвращает предыдущий элемент массива,
или "ложь"(false), если перед текущим нет
больше элементов. Внимание:
если массив содержит пустые элементы, то
функция возвратит "ложь" и на этих
элементах. Чтобы правильно просмотреть
массив, который может содержать пустые
элементы, смотрите функцию each().
prev() ведет себя подобно next(),
за исключением того что он переводит
внутренний указатель массива на одну
позицию назад, а не вперед.
reset() возвращает внутренний
указатель массива в
первый элемент.
reset() возвращает
первыйэлемент массива.
Сортирует массив в обратном порядке (по
убыванию). Пример 1. rsort()
Эта функция сортирует масси - все
элементы по окончании ее работы будут
расположены по возрастанию. Пример 1. sort()
Эта функция сортирует массив так что
индексы массива поддерживают их
корреляцию с элементами массива с которой
они связываются. Т. е. при такой сортировке
используются индексы. функции сравнения
задает пользователь. Эта функция отсортирует ключи массива
используя функции сравнения, определенные
пользователем. Если массив, который Вы
хотите отсортировать, должен
сортироваться некоторыми не-тривиальными
критериями, Вы должны использовать эту
функцию. Пример 1. uksort()
См. также arsort(),
asort(), uasort(),
ksort(), rsort()
и sort(). Эта функция отсортирует массив по
значениям используя используя функции
сравнения, определенные пользователем.
Если массив, который Вы хотите
отсортировать должен сортироваться по
некоторым не-тривиальным критериям, Вы
должны использовать эту функцию. Пример 1. usort()
Данные BC функции задействованы только
при условии что PHP был скомпилирован в
режиме --enable-bcmath, т.е. при включенных в
конфигурацию bcmath функциях. bcadd -- Сложение двух чисел произвольной
точности. string bcadd(string левый операнд, string правый
операнд, int [масштаб]); Прибавляет левый операнд к
правому операнду и
возвращает сумму типа string (строковая
переменная). Факультативный
параметрмасштаб используется чтобы
установить количество разрядов после
десятичной отметки в результате.
Смотрите также bcsub(). bccomp -- Сравнение двух чисел произвольной
точности. Сравнивает левый операнд с
правым операндом и
возвращает результат типа integer (целое).
Факультативный параметр масштаб
используется для установки количества
цифр после десятичной отметки,
используемых при сравнении. При равенстве
двух операндов возвращается значение 0.
Если левый операнд больше правого
операнда возврашается +1, и если
левый операнд меньше правого
операнда возвращается -1. bcdiv -- Операция деления для двух чисел
произвольной точности. Делит левый операнд на
правый операнд и
возвращает результат. Факультативный
параметр масштаб
устанавливает количество цифр после
десятичной отметки в результате.
Смотрите также bcmul(). bcmod -- Получение модуля числа
произвольной точности. string bcmod Получение модуля левого
операнда используя операнд модуль.
Смотрите также bcdiv(). bcmul -- Операция умножения для двух чисел
произвольной точности. string bcmul Умножает левый операнд на
правый операнд и возвращает
результат. Факультативный параметр масштаб
устанавливает количество цифр после
десятичной отметки в результате.
Смотрите также bcdiv(). bcpow -- Возведение одного числа
произвольной точности в степень другого. string bcpow Возведение x в степень y.
Параметр масштаб может
использоваться для установки количества
цифр после десятичной отметки в
результате.
Смотрите также bcsqrt(). bcscale -- Устанавливает масштаб по
умолчанию для всех математических BC-функций string bcscale Эта функция устанавливает заданный по
умолчанию параметр масштаба для всех
последующих математических BC-функций,
которые явно не определяют параметр
масштаба. bcsqrt -- Получение квадратного корня числа
произвольной точности. string bcsqrt Возвращает кваддратный корень операнда.
Факультативный параметр масштаб
устанавливает количество цифр после
десятичной отметки в результате.
Смотрите также bcpow(). bcsub -- Вычитает одно число произвольной
точности из другого. string bcsub Вычитает правый операнд из
левого операнда и
возвращает результат типа string.
Факультативный параметр масштаб
устанавливает количество цифр после
десятичной отметки в результате.
Смотрите также bcadd(). Календарные функции - доступны только
если Вы скомпилировали календарное
расширение в dl/calendar. Смотрите dl/README для
получения инструкций.
Календарное расширение в PHP представляет
серию функций, которая упрощает
преобразование между разными календарными
форматами. Посредником прообразования
является дневной Юлианский счет. Дневной
Юлианский счет это самый старый счет дней (около
4000 д.э.). Чтобы менять числа между разными
календарными системами, Вы должны сначала
преобразовать вашу дату в дневной
Юлианский счет, а только затем в
календарную систему по вашему выбору.
Дневной Юлианский счет отличается от
Юлианского Календаря! Более подробно о
календарной систем смотрите на сайте: http://genealogy.org/~scottlee/cal-overview.html.
Отрывки с этой страницы включаются в данной
инструкцие.
Преобразование дневного Юлианcкого счета
в Грегорианскую в формате "месяц/день/год"
Правильный дипазон для Грегорианского
календаря 4714 д.э. до 9999 н.э.
Хотя это программное обеспечение может
оперировать даты в обратном порядке до 4714 д.э.,
такое использование может быть бесполезно
и не значительно. Грегорианский календарь
не был учрежден до Октября 15, 1582 (или Октябрь
5, 1582 в Юлианском календаре). Некоторые
страны еще очень долго не принимали его.
Например, Великобритания преобразовалась в
1752, СССР в 1918 и Греции в 1923. Наиболее
Европейские страны использовали Юлианский
Календарь До Грегорианского.
Пример 1. Календарные функции
Преобразование дневного Юлианского счета
в строку, содержащую дату Юлианского
Календаря в формате "месяц/день/год".
Правильный дипазон для Юлианского
календаря 4713 д.э. до 9999 н.э.
Хотя это программное обеспечение может
оперировать даты в обратном порядке до 4713 д.э.
такое использование может быть бесполезно
и не значительно. Календарь был создан в 46 д.э.,
но подробные не стабилизировался до по
крайней мере 8 н.э., и возможно познее в 4-ом
столетии. Также, начало года различно от
одной культуры к другой - не все соглашаются,
что Январь это первый месяц.
Преобразование дневного Юлианского счета
в Еврейский календарь
Еврейский календарь использовался в
течение нескольких тысячалетий, но в
течение начального периода не было никакой
формулы, чтобы определить начало месяца.
Новый месяц начинался когда замечено
полнолуние.
преобразовывает дневной Юлианский счет в
Французский Республиканский календарь
преобразовывает дату и Французского
Республиканского календаря в дневной
Юлианский счет
Эта программа преобразовывают даты в
начиная с 1 до 14 (Грегорианские даты 22
Сентября 1792 до 22 1806 Сентября). Это покрывает
тот период когда календарь использовался.
Возвращает строку с названием месяца. Стол 1. Календарные способы Возвращает день недели. Может возвратить
строку( Стол 1. Календарные недельные пути Возвращает true если данная дата правильна,
иначе false. Проверяет правильность даты,
заданной аргументами. Дата считается
правильной, если:
год между 1900 и 32767 включительно месяц между 1 и 12 включительно день находится в диапазоне
разрешенных дней данного месяца.
Високосные годы учитываются. Возвращает строку, отформатированную
согласно данной строке и используя данную временную
метку или текущее локальное время,
если не задана временная метка.
В фоматной строке должны использоваться
следующие символы:
a - "am" или "pm" A - "AM" или "PM" d - день месяца, цифровой, 2 цифры (на
первом месте ноль) D - день недели, текстовый, 3 буквы; т.е.
"Fri" F - месяц, текстовый, длинный; т.е.
"January" h - час, цифровой, 12-часовой формат H - час, цифровой, 24-часовой формат i - минуты, цифровой j - день месяца, цифровой, без начальных
нулей l (строчная 'L') - день недели, текстовый,
длинный; т.е. "Friday" m - месяц, цифровой M - месяц, текстовый, 3 буквы; т.е.
"Jan" s - секунды, цифровой S - английский порядковый суффикс,
текстовый, 2 символа; т.е. "th",
"nd" U - секунды с начала века Y - год, цифровой, 4 цифры w - день недели, цифровой, 0 означает
воскресенье y - год, цифровой, 2 цифры z - день года, цифровой; т.е. "299" Пример 1. Пример date()
Функции date() и mktime()
возможно использовать вместе для того,
чтобы найти даты в будущем или прошлом. Пример 2.Пример функций date()
и mktime()
Для того, чтобы отформатировать даты на
других языках, Вы должны использовать
функции setlocale()
и strftime()
Возвращает строку, отформатированную
согласно данной форматной строке и
используя данную временную
метку или текущее локальное время,
если метка не задана. Названия месяцев и
недель и другие, зависящие от языка строки,
зависят от текущего locale,
устанавливающегося с помощью setlocale()
.
В форматной строке следует использовать
следующие спецификаторы преобразований:
%a - сокращенное название дня недели
согласно текущему locale %A - полное название дня недели согласно
текущему locale %b - сокращенное название месяца
согласно текущему locale %B - полное название месяца согласно
текущему locale %c - предпочтительное представление
даты и времени для текущего locale %d - день месяца как десятичное число (в
диапазоне от 0 до 31) %H - час как десятичное число в 24-часовом
формате (в диапазоне от 00 до 23) %I - час как десятичное число в 12-часовом
формате (в диапазоне от 01 до 12) %j - день года как десятичное число (в
диапазоне от 001 до 366) %m - месяц как десятичное число (в
диапазоне от 1 до 12) %M - минуты как десятичное число %p - `am' или `pm' согласно текущему времени,
или соответствующие строки для текущего
locale %S - секунды как десятичное число %U - номер недели текущего года как
десятичное число, начиная с первого
Воскресенья в качестве первого дня
первой недели %W - номер недели текущего года как
десятичное число, ночиная с первого
Понедельника в качестве первого дня
первой недели %w - день недели как целое число,
Воскресенье - 0-й день %x - предпочитаемое представление даты
для текущего locale не включающее время %X - предпочитаемое представление
времени для текущего locale не включающее
дату %y - год как десятичное число без
столетия (в диапазоне от 00 до 99) %Y - год как десятичное число, включая
столетие %Z - временная зона или название или
сокращение %% - символ `%' Пример 1. Пример функции strftime()
См.также setlocale()
и mktime() . Возвращает ассоциативный массив,
содержащий информацию о дате со
следующими элементами:
"seconds" - секунды "minutes" - минуты "hours" - часы "mday" - день месяца "wday" - день недели, цифровой "mon" - месяц, цифровой "year" - год, цифровой "yday" - день года, цифровой; т.е.
"299" "weekday" - день недели, текстовый,
полный; т.е. "Friday" "month" - месяц, текстовый, полный; т.е.
"January" Аналогична функции date()
за исключением того, что время
возвращается в Гринвичском формате Greenwich
Mean Time (GMT). Например, при запуске в Финляндии
(GMT +0200), первая строка ниже напечатает "Jan
01 1998 00:00:00", в то время как вторая строка
напечатает "Dec 31 1997 22:00:00".
Пример 1. пример gmdate()
См.также date() ,
mktime() и gmmktime()
. Предупреждение: Обратите
внимание на необычный порядок аргументов,
который отличается от порядка аргументов
в вызове функции mktime() из UNIX, и который
нехорошо ведет себя при неправильно
заданных параметрах (см.ниже). Это очень
часто встречающаяся ошибка в скриптах.
Возвращает временную метку Unix согласно
данным аргументам. Эта временная метка
является целым числом, равным количеству
секунд между эпохой Unix (1 Января 1970) и
указанным временем.
Аргументы могут быть опущены с права
налево; каждый опущенный таким образом
аргумент будет установлен в текущую
величину согласно локальной дате и
времени.
MkTime is useful for doing date arithmetic and validation, as it MkTime
полезена при арифметических дейтсвиях с
датой и ее проверкой, она будет
автоматически вычислять корректную
величину для вешедших за границы
параметров. Например, каждая из следующих
строк возвращает строку "Jan-01-1998".
Пример 1. Пример mktime()
Идентична mktime()
за исключением передаваемых параметров,
представляющих дату в GMT. Возвращает текущее время, измеренное в
числе секунд с эпохи Unix (1 Января 1970 00:00:00 GMT).
См.также date() . Возвращает строку "msec sec" где sec
текущее время, измеренное в числе секунд с
эпохи Unix (0:00:00 1 Января, 1970 GMT), а msec - это
часть в микросекундах. Эти функции
доступны только в операционных системах,
поддерживающих системный вызов gettimeofday().
См.также time() . Не поддерживаются индексы и мемо(записи)
поля. Также не поддерживается блокировка.
Два webсервер процесса, одновременно
изменяющие файлы dBase вполне возможно
повредят вашу базу данных.
В отличие от баз данных SQL, в dBase нельзя
изменять определение полей после их
создания. Если только файл создан, то поля
базы данных фиксировано определены. Не
имеется никаких индексов, которые
ускоряют поиск или иначе организовывает
ваши данные. dBase файлы - это простые
последовательные файлы с записями
фиксированного размера. Записи
добавляются в конец файла и удаленные
записи будут присутствовать в вашей базе
до тех пор, пока вы не вызовете dbase_pack()
функцию.
Мы рекомендуем вы не использовать dBase
файлы для профессионального
использования фаз данных. Выберете взамен
какой-нибудь реальный SQL сервер; MySQL или
Postgres лучший выбор для работы вместе с PHP.
Поддержка dBase введена для импорта и
экспорта ваших данных из и в вашу web базу
данных, так как этот формат обычно
понимают многие программы, например
электронные таблицы, в Windows. Поддержка dBase
для любого экспорта или импорта данных
хорошо выполняет эти условия. Доступные типы полей:
Возвращает dbase_identifier(идентификатор базы
данных) для открытой базы данных, или false(ложь)
если база данных не была открыта. Все поля преобразовываются в
соответствующий PHP тип. (Даты остаются
строками.) Эти функции позволяют работать с записями
dbm-подобных баз данных. Данный тип баз
данных (поддерживается как библиотеками
Berkley db, gdbm и некоторыми другими, так и
встроенной в PHP3 библиотекой) оперирует с
парами ключ/значение (в противоположность
полноценным записям, поддерживаемым
реляционными базами данных).
Пример 1. Пример dbm
dbmopen -- открывает базу данных dbm
Первый аргумент - это полный путь к
открываемому 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 -- закрывает базу данных dbm
Разблокирует и закрывает указанную базу
данных.
dbmexists -- сообщает, существует ли в базе
данных значение для ключа
Возвращает true если существует значение,
ассоциируемое с ключом key.
dbmfetch -- извлекает из базы данных значение
ключа
Возвращает значение ключа key.
dbminsert -- вставляет в базу данных значение
ключа
Добавляет в базу данных значение с
указанным ключом key.
Возвращает -1 если база данных была
открыта в режими только чтение, 0 если
добавление произошло успешно и 1 если
указанный ключ уже существует. (Для замены
значения следует использовать dbmreplace().)
dbmreplace -- заменяет значение ключа
Замещает значение указанного ключа. Если
ключ не существует, функция добавляет его в
базу данных.
dbmdelete -- удаляет занчение ключа из базы
данных
Удаляет значение ключа из базы данных.
Возвращает false если ключ в базе данных не
существует.
dbmfirstkey -- возвращает первый ключ из базы
данных
Возвращает первый ключ базы данных.
Заметьте, что упорядочивание не
гарантируется, т.к. база данных может быть
построена на основе хэш-таблиц, которые не
предусматривают упорядочивание.
dbmnextkey -- возвращает следующий ключ базы
данных
Возвращает ключ, следующий после ключа key.
С помощью вызова dbmfirstkey(), а затем dbmnextkey()
возможно пройти по всем парам ключ/значение
в базе данных. Например:
Пример 1. Прохождение по всем парам ключ/значение.
dblist -- описывает используемые dbm-совместимые
библиотеки
Если параметр array установлен, то
указанный массив будет заполнен выводом
из программы. Помните, если массив уже
содержит данные, то exec() добавляет свои
данные. Если вы не хотите, что бы функция
добавляла данные, вызывайте unset()
для массива перед использованием exec().
Если параметр return_var установлен
наряду с параметром array, то в него
записывается результат выполнения
команды.
Обратите внимание, что если ваша функция
будет использовать данные из ввода
пользователей, то надо использовать EscapeShellCmd()
для того, что бы пользователи не смогли
запустить произвольные программы.
См. также system(), PassThru(),
popen() и EscapeShellCmd(). Обратите внимание, что если ваша функция
будет использовать данные из ввода
пользователей, то надо использовать EscapeShellCmd()
для того, что бы пользователи не смогли
запустить произвольные программы.
Вызов System() также
пробует автоматически вставить в буфер
вывода web сервера после каждой строки
вывода, если PHP запущен как модель сервера.
Если вы хотите запустить команду и
использовать все данные непосредственно
без всякого вмешательства других программ,
то используйте функцию PassThru().
См. также exec() и popen()
функции. См. также exec() и fpassthru(). Эти функии предоставляют доступ "только
для чтения" к данным в базе данных filePro.
filePro зарегистрированная торговая марка
Fiserv, Inc. Более подробную информацию о filePro вы
можете наяти на http://www.fileproplus.com/.
Читает и верифицирует map-файл, сохраняя
файловый счетчик и инфо.
Никакой блокировки не предусмотрено,
поэтому вам следует избегать модификации
вашей filePro базы данных, пока она открыта в PHP.
Возвращает имя поля по соответствующему
номеру field_number.
Возвращет тип поля, соответствующего
номеру field_number.
Возвращает ширину поля по номеру поля field_number.
Возвращает данные из указанной ячейки
базы данных.
Возвращает количество полей (колонок) в
открытой базе filePro.
Смотри также filepro().
Возвращает количество строк в открытой
базе filePro. Смотри также filepro(). Получив строку, содержащую путь у файлу,
данная функция возвратит базовое имя файла.
В Windows оба слеша - передний (/) и
обратный (\) - используются как
разделители при задании пути. В других
окружениях это только передний слеш (/).
Пример 1. basename() example
Смотри также: dirname()
Пытается изменить группу файла filename
на group. Только супервизор может изменить
текущую группу на любую случайную; другие
пользователи могут менять группу только на
любую из тех, для которых они являются
пользователями.
Возвращает true при успешном завершении; в
противном случае - false.
В Windows ничего не происходит и возвращается
true.
смотри также chown() и chmod().
Пытается изменить режим файла, указанного
в filename на mode.
Заметим, что mode не присваивает
автоматически восьмиричное значение, вам
необходим префикс mode с нулем (0):
Возвращает true при успешном завершении; в
противном случае - false.
смотри также chown() и chgrp().
Пытается изменить владельца файла filename
на пользователя user. Только суперюзер
может изменять владельца файла.
Возвращает true при успешном завершении; в
противном случае - false.
Note: В Window ничего не выполняется и
возвращается true. Смотри также chown() и chmod().
Вызовы системных функций stat() или lstat() в
большинстве систем достаточно "дорогостоящие".
Поэтому, результаты последнего вызова
любой из статусных функций (см. ниже)
сохраняются для последующего
использования при вызове этой же функции
для этого же файла. Если вы желаете
инициировать новый кеш, например, в случае,
когда к файлу было много обращений по
проверке статуса, или файл был изменен,
используйте эту функцию для очистки памяти
результатов вызовов.
Affected functions include stat(), lstat(),
file_exists(), is_writeable(),
is_readable(), is_executable(),
is_file(), is_dir(),
is_link(), Создает копию файла. Возвращает true при
успешном завершении; в противном случае -
false. Пример 1. copy()
смотри также: rename()
Получив строку, содержащую путь у файлу,
данная функция возвратит директорию,
содержащую файла.
В Windows оба слеша - передний (/) и
обратный (\) - используются как
разделители при задании пути. В других
окружениях это только передний слеш (/). Пример 1. dirname()
смотри также: basename()
Указатель на файл fp закрывается.
Возвращает true при удачной операции и false
при ошибке.
Возвращает true если указатель файла равен
EOF или в случае ошибки; в противном случае
возвращается false.
Указатель должен быть действующим и
указывать на файл, успешно открытый fopen(),
popen(), или fsockopen().
Возвращает строку, содержащую один символ,
прочитанный по файловому указателю fp.
При EOF возвращается false (as does feof()).
Указатель должен быть действующим и
указывать на файл, успешно открытый fopen(),
popen(), или fsockopen().
Смотри также fopen(), popen(),
fsockopen(), и fgets().
Возвращает строку до length - читается по
одному байту из файла, указанного в fp.
Чтение заканчивается, если прочитано length
символов - 1 байт прочитается в любом случае,
или до символов перевода строки и возврата
караетки, или до EOF.
При ошибке возвращается false.
Указатель должен быть действующим и
указывать на файл, успешно открытый fopen(),
popen(), или fsockopen().
Смотри также fopen(), popen(),
fgetc(), и fsockopen().
Идентично fgets(),
отличают fgetss попытки удалить HTML и PHP
тэги из прочитанного текста.
Смотри также fgets(), fopen(),
fsockopen(), и popen().
Идентична readfile(), но file()
выдает файл в массив. Каждый элемент
массива соответствует строке файла (вместе
с символом возврата строки).
Смотри также readfile(), fopen(),
и popen().
Возвращает true, если файл, определенный в filename,
существует; иначе - false.
Смотри также clearstatcache().
Возврвщет время последнего усешного
обращения к файлу, или false в случае ошибки.
Возвращается время последего изменения
файла, или false в случае ошибки.
Возврашает ID группы владельца файла, или
false в случае ошибки.
Возвращает номер inode файла, или false в
случае ошибки.
Возвращается время последего изменения
файла, или false в случае ошибки.
Возвращает ID пользователя, владельца
файла, или false в случае ошибки.
Возвращает разрешения, установленные для
файла, или false в случае ошибки.
.
Возвращает размер файла, или false в случае
ошибки.
В случае ошибки возвращется false
Если filename начинается с "http://"
(без учета регистра), открывается
соединение HTTP 1.0 с указанным сервером и
возвращается указатель файла, нга начало
текста ответа.
Поскольку редиректы HTTP не обрабатываются,
вы должны включать в указание директории
завершающие слеши.
Если filename начинается с "ftp://"
(без учета регистра), открывается ftp
соединение с указанным сервером и
возвращается указатель на искомый файл.
Если сервер не поддерживает режим
пассивного ftp, данная операция завершится
ошибкой. Вы можете открывать файлы как для
чтения, так и для записи через ftp (но не обе
операции одновременно).
Если filename начинается как-нибудь
иначе, откравается файл вашей файловой
системы, и возвращается указатель на
открытый файл.
Если при открвтии файла происходит ошибка,
функция возвращает false.
mode выбирается из следующего
списка:
'r' - Открыть только для чтения, помещает
указатель на начало файла. 'r+' - Открыть для чтения и для записи,
помещает указатель на начало файла. 'w' - Открыть только для записи, помещает
указатель на начало файла и очищает все
содержимое файла. Если файл не сществует,
создается новый файл 'w+' - Открыть для чтения и для записи,
помещает указатель на начало файла и
очищает все содержимое файла. Если файл
не сществует, создается новый файл. 'a' - Открыть только для записи, помещает
указатель на конец файла. Если файл не
сществует, создается новый файл. 'a+' - Открыть для чтения и для записи,
помещает указатель на конец файла. Если
файл не сществует, создается новый файл. Пример 1. fopen()
Если вы испытываете проблемы с чтением и
записью в файл, используя PHP как серверный
модуль, помните, что используемые вами
файлы и директории должны быть доступными
для серверных процессов
На платформе Windows будьте осторожны,
избегая обратных слешей в путях или
используйте передние слеши.
Смотри также fclose() , fsockopen(),
и popen().
Читает до EOF по полученному указателю
файла и записывает результат на
стандартное устройство вывода.
При возникновении ошибки fpassthru()
возвращает false.
Файловый указатель должен быть
действующим и указывать на файл, успешно
открытый fopen() popen(),
or fsockopen(). Файл,
закрытый fpassthru(), не читается, оставляя fp
неиспользованным.
Если вы хотиде стедать дамп файла на stdout,
вы можете использовать readfile(),
которая сэкономит вам один вызов fopen().
Смотри также readfile(), fopen(),
popen(), и fsockopen()
fputs() - это псевдоним fwrite(),
и обе функции полностью идентичны. Заметим,
что параметр length опционален и при
его отсутствии записывается вся строка str.
fread() читает байты из файла, на который
ссылается fp до length. Чтение
заканчивается, когда прочитано length
байт или достигнут EOF.
Смотри также fwrite(), fopen(),
fsockopen(), popen(),
fgets(), fgetss(),
file(), и fpassthru().
Для файла fp устанавливает указатель в
потоке файла на смещение в offset байт.
Эквивалентно вызову в Си fseek( fp, offset, SEEK_SET ).
При удачном выполнении возвращает 0, в
противном слчае возврщается -1. ЗАметим, что
поиск после EOF не рассматривается как
ошибка.
Не испоьзуется для файловых указателей,
возвращенных fopen() при
использовании форматов "http://" или
"ftp://".
Смотри также ftell() и rewind().
Возвращает позицию указателя в файле, на
который ссылвется fp, т.е. смещение в
потоке файла.
При возникновении ошибки возвращается
false.
TФайловый указатель должен быть
действующим и указывать на файл, успешно
открытый fopen() или popen().
Смотри также fopen(), popen(),
fseek() и rewind().
fwrite() записывает содержимое string
в файловый поток, указанный fp. Если
аргумент length присутствует, запись
останавливается после записи length-го
байта, или после записи всей строки string.
Заметим, что если есть аргумент length,
то конфигурационные опции magic_quotes_runtime
игнорируются и никакие слеши из string
не удаляются.
Смотри также fread(), fopen(),
fsockopen(), popen(),
и fputs().
Возвращает true, если filename существует и
это директория.
Смотри также is_file() и is_link().
Возвращает true, если filename существует и
является исполнимым файлом.
Смотри также is_file() и is_link().
Возвращает true, если filename существует и
является обычным файлом.
Смотри также is_dir() и is_link().
Возвращает true, если filename существует и
является символической ссылкой.
Смотри также is_dir() и is_file().
Возвращает true, если filename существует и
является доступным для чтения.
Помните, что PHP может иметь доступ к файлу
как поьлзователь, под чьим id запущен веб-сервер
(часто 'nobody'). Ограничения безопасного
режима не действуют внутри аккаунта.
Смотри также is_writeable().
Возврвщает true если файл существует и
доступен для записи.
Помните, что PHP может иметь доступ к файлу
как поьлзователь, под чьим id запущен веб-сервер
(часто 'nobody'). Ограничения безопасного
режима не действуют внутри аккаунта.
Смотри также is_readable().
link() cсоздает жесткую
ссылку.
Смотри также symlink()
создает символическую ссылку, и readlink()
вместе с linkinfo().
linkinfo() возвращает
поле st_dev из UNIX C структуры stat, возвращенной
системным вызовом lstat. Эта функция
используется для верификации, если ссылка (указанная
в path) реально существует (испотльзует
те же методы, что и макрос S_ISLNK, определенный
в stat.h). Возвращает 0 или FALSE в случае ошибки.
Смотри также symlink(), link(),
и readlink().
Пытается создать директорию, указанную в pathname.
Заметим, что если вы захотите указать mode
в восьмеричной системе, то число должно
начинаться с 0.
Возвращает true при успешном выполнении и
false при ошибке.
Смотри также rmdir().
Закрывает файловый указатель к каналу,
открытому popen().
Файловый указатель должен быть
действующим и возвращен успешным вызовом popen().
Возврващает статус завершения
запущенного процесса.
Смотри также popen().
ОТкрывает канал к процессу, исполняемому
путем форкинга команды command.
Возвращает файловый указаель, идентичный
возвращемому fopen(), но
этот указатель мононаправленный (может
использоваться только для чтения или
только для записи) и должен бытть закрыт pclose().
Этот указатель можно использовать с fgets(),
fgetss(), и fputs().
При возникновении ошибки возвращет false.
Смотри также pclose().
Читает файл и записывает его на
стандартное устройство вывода.
Возвращает количество прочитанных байтов.
В случае возникновения ошибки возвращется
false и за исключением функции, вызванной как
@readfile, выводится сообщение об ошибке.
Если filename начинается с "http://"
(без учета регистра), открывается
соединение HTTP 1.0 к указанному серверу и
текст ответа выводится на стандартное
устротйство вывода.
Поскольку редиректы HTTP не обрабатываются,
вы должны включать в указание директории
завершающие слеши.
Если filename начинается с "ftp://"
(без учета регистра), открывается ftp
соединение с указанным сервером и файл
ответа выводится на стандартное устройство
вывода. Если сервер не поддерживает режим
пассивного ftp, этот вызов завершится
ошибкой.
Если filename начинается как-нибудь
иначе, будет открыт файл файловой системы и
его ссодержимое выведется на стандартное
устройство вывода.
Смотри также fpassthru(),
file(), fopen(),
include(), require(),
и virtual().
readlink() работает
аналогично функции Си readlink и возвращает
содержимое символической ссылки path или
0 в случае ошибки.
Смотри также symlink(), readlink()
и linkinfo().
Пытается переименовать oldname в newname.
Возвращает true при успешном выполнениии и
false при сбое.
Позиционирует файловфй указатель для fp
на начало потока файла.
При возникновении ошибки возвращается 0.
Файловый указатель должен быть
действующим и указавать на файл, успешно
открытый fopen().
Смотри также fseek() и ftell().
Пытается удалить директорию, указанную
путем. Директория лдолжна быть пустой, и
релевантные разрешения должны допустить
это.
При возникновении ошибкт возвращается 0.
Смотри также mkdir().
Собирает статичтику о файле filename.
Возвращает массив статистической
информации о файле со следующими
элементами:
устройство inode номер ссылки id пользователя или владельца id группы владельца device type if inode device * размер в байтах время последнего доступа время последней модификации время последнего изменения размер блока для I/O файловой системы * количество занатых блоков Собирает информацию и файле иил
символической ссылке filename. Эта функция
идентична stat(), но если filename
- это символическая ссылка, то возвращается
статус символической ссылки, а не статус
файла, на который указывает данная ссылка.
Возвращает массив статистической
информации со следующими элементами:
устройство inode число ссылок id пользователя или владельца id группы владельца тип устройства, если inode - устройство * размер в байтах время последнего доступа время последней модификации время последнего изменения размер болка для I/O файловой системы * количество занатых блоков symlink() создает символическую ссылку с
существующей целью target с указанным
именем link.
Смотри также link()
создает жесткую ссылку, и readlink()
вместе с linkinfo().
Создает никальное имя файла в указанной
директории. Если директория не существует, tempnam()
может сгененрировать имя файла во
временной директории системы.
Возвращает новое временное имя файла, или
нулевую строку при ошибке. Пример 1. tempnam()
Пытается установить время модификации
файла filename в значение time. Если опция time
отсутствует, испотьлзуется текущее время.
Если файл не существует, то он создается.
Возвращает true при успешном выполнении и
false в обратном случае.
umask() устанавливает
текущую umask PHP в mask & 0777 и возвращает
старую umask. Когда PHP используется ска
серверный модуль, umask сохраняется при
завершении каждого запроса.
umask() без аргументов
возвращает текущую маску.
Удаляет filename. Аналогично функции
Unix C unlink().
Возвращает 0 или FALSE при ошибке.
Смотри также rmdir() для
удаления директорий. Эти функции позволяют вам управлять
ывводом на удаленный браузер на уровне
протокола HTTP.
Функция Header()
используется в начале HTML-файла
для отправки строки HTTP
заголовка. Смотри HTTP
1.1 Specification для более подробной информации
о заголовках HTTP.
PHP-скрипты часто генерируют динамический
HTML, который не следует кешировать на
клиентском браузере или прокси-сервере.
Многие прокси и клиенты можно заставить
отключить кеш: SetCookie() определяет
кук, который будет послан вместе с
остальной информацией из заголовка. Все
аргументы, исключая name опциональны.
Если присутствует только аргумент name,
кук с указанным именем будет удален с
клиента. Вы также можете представить любой
из аргументов пустой строкой, с целью
пропуска оного (""). Параметры expire
и secure являются целочисленными и ен
могут быть заменены пустыми строками. Для
этой цели используют (0). Аргумент expire
- это стандартное время Unix, возвращаемое
функциями time() или mktime().
secure показывает, что кук следует
передавать только по защищенному
соединению HTTPS. Некоторые примеры: Пример 1. SetCookie
Заметим, что значимые части кука при
посылке будут автоматически урл-кодированы,
тогда как при приеме кука - автоматически
декодированы и присвоены переменным с
соответствующими именами. Для просмотра
содержания тестового кука в скрипте, просто:
Для получения более подробной информации
о куках, смотрите спецификацию Netscape по http://www.netscape.com/newsref/std/cookie_spec.html.
Microsoft Internet Explorer 4 с Service Pack 1 могут
некорректно работать с куками, где
установлен параметр path. 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 имеет свою собственную
терминологию для именования различных
порций информации. Это было заимствовонно
и расширенно. Практически все функции
оперируют с одним из следующих типов данны:
object ID: уникально целое значение для
каждого объекта в Hyperwave сервере. Это
также одни из атрибутов объектной
записи (ObjectID). ИД объектов часто
используются в качестве входных
параметров для спецификации объекта. object record: строка с парами атрибут-значение
в фоме атрибут=значение. пары одделены
одна от друкой символом возврата
каретки. ОБъектная запись может быть
просто переконвертирована в объектный
массив: hw_object2array().
Несколько функций (их имена
заканчиваются на obj) возвращают
объектные записи. object array: ассоциативный массив со всеми
атрибутами объекта. Ключ - имя атрибута.
Если атрибут встречается в объектной
записи несколько раз, это ведет к
появлению другого индекса или
индексного массива. Атрибуты,
определнные в языке, будут иметь
множство ключей, аббревиатур языка в
ассоциативном массиве. Все другие
множественные атрибуты формируют
индексные массивы. Функции php3 никогда не
возвращают объектных массивов. hw_document: это совершенно новый тип данных,
который описывает наличный документ,
напимер HTML, PDF и др. Он несколько
оптимизированн под HTML, но может быть
использован и с другими форматами. Несколько функций, возвращающих массивы
объектных записей также возвращают
ассоциативный массив со статистической
информацией о нем. Этот массив - последний
элемент массива объектных записей.
Статистический массив содержит следующие
поля:
Число объектных записей с атрибутом PresentationHints,
установленным в Hidden. Число объектных записей с атрибутом PresentationHints,
установлденным в CollectionHead. Число объектных записей с атрибутом PresentationHints,
установленным в FullCollectionHead. Индекс в массиве объектных записей с
атрибутом PresentationHints, установленным в
CollectionHead. Индекс в массиве объектных записей с
атрибутом PresentationHints, установленным в
FullCollectionHead. Общее число объектных записей. Модуль 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
будет возвращать объект. Правило
перезаписи достаточно простое:
для возврвта самого объекта для разрешения проблемы поиска для идентификации вас для установки профиля один для каждой дополнительной
функции, как то показа атрибутов объекта.
показа информации о пользователе,
показа статуса сервера и др. Еще несколько заечаний:
Функция hw_InsertDocument расщеплена на hw_InsertObject()
и hw_PutDocument(). Имена некоторых функций пока еще не
подтверждены. Мольшинство функций требуют текущее
соединение как первый параметр. Это
ведет к достаточно большому количеству
лишнего набора, что в большинстве случев
излищне, поскольку существует только
одно соединение. Соединение по
умолчанию предоставляет улучшенный
вариант решения. Команда позволяет удалить, добавить или
модифицировать индивидуальные атрибуты
объектной записи. Объекты указываются
идентификатором оюъекта, object_to_change;
команды придерживаются следующего
синитаксиса:
<command> ::= <remcmd> | Возвращает True при отсутствии ошибок,
иначе False. Возвращает массив идентификаторов
объектов. Каждый иденитификатор - часть
коллекции с идентификатором objectID.
Массив содержит всех наследников,
документы и коллекции. Возвращает массив объектных записей.
Каждая запись - часть коллекции с
идентификатором objectID.
Массив содержит всех наследников,
документы и коллекции. Возвращет false, если соединение не
является действующим, в противном случае -
true. Closes закрывает соединение с Hyperwave
сервером с указанным номером соединения connection. Открывает соединение с Hyperwave сервером и
возвращает номер соединение при успешном
открытиии, или False, ели слединение не может
быть установлено. Каждый аргумент должен
быть "закавыченой" строкой, исключая
номер порта. Аргумент username
и password опциональны и
могут не указываться. В случае ошибки
идентификации, сервер завершит работу.
Проще использовать идентификацию как
пользователь anonymous. Функция возращает
индекс соединения, необходимы для других
функций Hyperwave. Вы можете открыть несколько
соединений. Помните, что пароли не
шифруются.
Смотри также hw_pConnect(). Копирует объекты с идентификаторами,
указанными во втором параметре в
коллекцию с идентификатором destination
id.
Возвращается число скопированных
объектов.
Смотри также hw_mv(). Удаляет объект с идентификатором,
указанным во втором параметре. Будут
удалены все экземпляры объекта.
При отсутствии ошибок возвращает true,
инача - false.
Смотри также hw_mv(). Возвращает идентификатор оъекта
документа, который относится к якорю anchorID. Возвращает объектную запись объекта
документа, относящегося к якорю anchorID. Возвращает объектную запись документа.
Смотри также hw_DocumentBodyTag(),
hw_DocumentSize(). Возвращает тег BODY для документа. Если
документ в формате HTML, тег BODY должен быть
напечатен перед документом.
Смотри также hw_DocumentAttributes(),
hw_DocumentSize(). Возвращает размер документа в байтах.
Смотри также hw_DocumentBodyTag(),
hw_DocumentAttributes(). Возвращает строку, содержащую последнее
сообщени об ошибке или 'No Error'. Если
возвратилось False, функция не выполнилась.
Сообщение относится к последней команде. Загружет текстовый документ на сервер.
Объектная запись документа не должна
модифицироваться, пока документ
редактируется. Эта функция работает
только с чисто текстовыми документами. Она
не отрывает специальных соединений для
данных, поэтому управление соединением во
время передачи данных блокируется.
Смотри также hw_PipeDocument(),
hw_FreeDocument(), hw_DocumentBodyTag(),
hw_DocumentSize(),
hw_OutputDocument(),
hw_GetText(). Возвращет номер последней ошибки. Если 0 -
ошибок не было. Ошибка относится к
последней команде. освобождает память, занятую hw-документом. Возвращает индексированный массив
идентификаторов объектов. Каждый ИД
объекта относится к родителям объекта с
идентификатором objectID. Возвращает индексированный массив
объектных записей плюс ассоциативный
массив со статистической информацией об
объектных записях. Ассоциативный массив -
последний член возвращенного массива.
Каждая объектная запись относится к
родителю объекта с ИД objectID. Возвращает массив идентификаторов
оюъектов. Каждый ИД объекта относится к
наследной коллекции, коллекции с
идентификатором objectID.
Функция не возвращает наследуемые
документы.
Смотри также hw_GetChildren(), hw_GetChildDocColl(). Возвращает массив объектных записей.
Каждая запись относится к наследной
коллекции, коллекции с идентификатором objectID.
Функция не возвращает наследуемые
документы.
Смотри также hw_ChildrenObj(),
hw_GetChildDocCollObj(). Возвращает объектные записи всех
якорных точек объекта с ИД objectID.
Объект может быть как документом, так и
якорем.
Смотри также hw_GetAnchors(). Возвращает объектную запись объекта с
идентификатором objectID.
Смотри также hw_GetAndLock(). Возвращает объектную запись объекта с ИД
objectID. Объект также
запирается, поэтому другие позователи не
имеют к нему доступа, пока объект не будет
разблокирован.
Смотри также hw_Unlock(),
hw_GetObject(). Возвращается документ с идентификатором
объекта 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(). Ищет объекты по всему серверу и
возвращает массив идентификаторов
объектов. Максимальное число найденных
димитируется в max_hits.
Если max_hits установлен в
-1, то максимальное число ответов не
ограниченно.
Смотри также hw_GetObjectByQueryObj(). Ищет объекты по всему серверу и
возвращает массив объектных записей.
Максимальное число найденных
димитируется в max_hits.
Если max_hits установлен в
-1, то максимальное число ответов не
ограниченно.
Смотри также hw_GetObjectByQuery(). Ищет объект в коллекции с
идентификатором objectID и
возвращает массив идентификаторов
объектов. Максимальное число найденных
димитируется в max_hits.
Если max_hits установлен в
-1, то максимальное число ответов не
ограниченно.
Смотри также hw_GetObjectByQueryCollObj(). Ищет объект в коллекции с
идентификатором objectID и
возвращает массив объектных записей.
Максимальное число найденных
димитируется в max_hits.
Если max_hits установлен в
-1, то максимальное число ответов не
ограниченно.
Смотри также hw_GetObjectByQueryColl(). Возвращает массив идентификатров
объектов наследуемых документов
коллекции.
Смотри также hw_GetChildren(), hw_GetChildColl()
. Возвращает массив идентификатров
объектов наследуемых документов
коллекции.
Смотри также hw_ChildrenObj(),
hw_GetChildCollObj(). Возвращает массив идентификаторов
объектов для якорей документа с ИД objectID. Возвращает массив объектных записей для
якорей документа с ИД objectID. Перемещает объект с объектным
идентификатром, указанным во втором
параметре, из коллекции с идентификатором source
id в коллекцию с идентификатором destination
id. Если исходный ИД равен 0, объекты
будут "отвязаны" от исходной
коллекции. Если это последний экземпляр
этого объекта, он будет удален.
Возвращется число перемещенных объектов.
Смотри также hw_cp(),
hw_deleteobject(). Идентификация пользователя с именем username
и паролем password.
Идентификация имеет силу только для
текущей сессии. Я не думаю, что данная
функция так уж часто используется. В
большинстве случаев будет проще проводить
идентификацию при установлении
соединения.
Смотри также hw_Connect(). Проверяет, является ли множество
объектов (документов или коллекций),
определенное в object_id_array,
частью коллекций, определенных в
коллекции id_array. Если
четвертый параметр return_collections
равен 0, подмножество идентификаторов
объектов, которое является частью
коллекций (т.е. документы или коллекции,
которые являются наследниками одной или
более коллекций идентификаторов
коллекции или их подколлекций, рекурсивно)
возвращается как массив. Когда четвертый
праметр равен 1, однако, множество
соллекций, которые имеют наследников в
этом подмножестве, возвращается как
массив. Это позволяет пользователю,
например, подчеркнуть часть иерархии
коллекции, которая содержит находки
предидущего запроса, в графическом виде.
Возвращает сведения о текущем
соединении. Возвращаемая строка имеет
следующий формат: <Serverstring>, <Host>,
<Port>, <Username>, <Port of Client>, <Byte swapping> Вставить новую коллекцию с атрибутами
как в object_array в коллекцию
с идентификатором objectID. Вставить новый документ с атрибутами как
в object_array в коллекцию с
идентификатором objectID.
Эта функци может добавить как отдельную
объектную запись, так и чистый ascii текст из text,
если text получен. Если вы
хотите добавить документ в общем,
используйте hw_insertdocument().
Смотри также hw_InsertDocument(),
hw_InsColl(). Загружает документ в коллекцию parent_id.
Перед этим документ должен быть создан hw_NewDocument().
Удостоверьтесь, что объектная запись
нового документа содержит следующие
атрибуты: Type, DocumentType, Title и Name. Возможно, вы
захотите также установить MimeType.
Смотри также hw_PipeDocument(). Возвращает новый hw-документ с данными,
установленными по document_data
и объектной записью object_record.
Длина данных документа document_data
передается в document_size.
Эта функция не добавляет документ в Hyperwave
сервер.
Смотри также hw_FreeDocument(), hw_DocumentSize(),
hw_DocumentBodyTag(),
hw_OutputDocument(),
hw_InsertDocument(). Преобразует object_record в
объектный массив. Печатает документ без тега BODY. Возвращает индекс соединения в случае
удачи, или false, если соединение не может
быть установлено. Открывает устойчивое
соединение с Hyperwave сервером. Каждый
аргумент должен быть "заавыченной"
строкой, исключая номер порта. Аргументы username
и password опциональны и
могут быть опущены. В случае ошибки
идентификации, сервер будет остановлен.
Проще применять вход пользователя anonymous. В
ыможете открыть множество устойчивых
соединений.
Смотри также hw_Connect(). Возвращает hw-документ с идентификатором objectID.
Если документ имеет якоря, которые можно
вставить, то данная операция произойдет
автоматически. Документ передается через
специальное соединение для данных,
поэтому управляющее соединение не
блокируется.
Смотри также hw_GetText()
for more on link insertion, hw_FreeDocument(), hw_DocumentSize(),
hw_DocumentBodyTag(),
hw_OutputDocument(). Возвращает объектный идентификатор для
гиперкоренной коллекции. Обычно это 0.
Наследная коллекция от гиперкорневой -
корневая, на сервере, с которым
установлено соединение. Разблокирует документ для доступа
другим пользователям.
Смотри также hw_GetAndLock(). Возвращает имя пользователя соединения. Вы можете использовать фуннкции работы с
изображениями для получения размеров
картинок в файлах JPEG, GIF, PNG, и, если у Вас есть
библиотека GD (доступна на http://www.boutell.com/gd/), Вы
также будете иметь возможность создавать
GIF-изображения и управлять ими.
Функция GetImageSize()
определяет размеры любых изображений в
файлах GIF, JPG или PNG и
возвращает размерность вместе с типом
файла и строкой в формате высота/ширина,
которую можно использовать в стандартном
теге HTML IMG.
Возвращается массив из четырех элементов.
Индекс 0 содержит ширину изображения в
пикселах. Элемент 1 содержит высоту. Элемент
2 - флаг типа изображения. 1 = GIF, 2 = JPG, 3 = PNG.
Элемент 3 - строку с корректным заданием
"height=xxx width=xxx" для прямого
использования в теге IMG Пример 1. GetImageSize
Опциональный параметр imageinfo
позволяет Вам получить некоторую
дополнительную информацию о файле
изображения. Сейчас возвращаеются
разнообразные JPG APP маркеры в
ассоцированном массиве. Некоторые
программы используют эти APP для встраивания
текстовой информации в изображение. Очень
распространено встраивание IPTC http://www.xe.net/iptc/
информации в APP13 маркер. Вы можете
использовать функцию iptcparse()
для перевода бинарного APP13 маркера в нечто
читабельное. Пример 2. GetImageSize возвращает IPTC
Примечание: Эта функция не требует
библиотеки GD. ImageArc рисует чать эллипса с центро в cx, cy
(верхний левый угол - 0,0) в изображении im. w
и h определяют высоту и ширину эллипса в
соответствии с начальной и конечной точкой,
определенными в аргументах s и e.
ImageChar рисует первый символ из c в
рисунке id с верхним левым углом в x,y
(верхний левый - 0,0) цветом col.
Шрифтом 1, 2, 3, 4 или 5, используются
встроенные шрифты (больше цифра - больше
шрифт).
Смотри также imageloadfont().
ImageCharUp рисует символ c вертикально в
изображении im по координатам x, y (верхний
левый - 0, 0) с цветом col. Если font равен
1, 2, 3, 4 или 5, используются встроенные шрифты.
Смотри также imageloadfont().
ImageColorAllocate возвращает цвет в схеме RGB.
Аргумент im возвращается функцией imagecreate().
ImageColorAllocate должна быть вызвана для создания
каждого цвета, который планируется
использовать в изображении, представленном
im.
ImageColorTransparent устанавливает прозрачный
цвет в изображении im в col. im -
идентификатор изображения, возвращенный imagecreate(),
а col - идентификатор цвета, возвращенный
функцией imagecolorallocate().
Возвращается идентификатор нового (или
текущего, если не указан параметр col)
прозрачного цвета.
ImageCopyResized копир область одного
изображения в другое. dst_im -
изображение-получатель, src_im -
исходное изображение. Если координаты
исходного и результирующего изображений
различны по ширине и высоте, производится
соответствующее сжатие/растягивание
фрагмента изображения. Координаты -
относительно левого верхнего угла. Функция
может быть использована для копирования
фрагментов одного и того же изображения (если
dst_im равно src_im) но если
области перекроются, результат может быть
непредсказуемым.
ImageCreate возвращает идентификатор
изображения чистого листа размерами x_size
на y_size.
ImageCreateFromGif возвращает идентификатор
изображения, полученного из filename.
ImageLine рисует пунктирную линию от x1,y1 до
x2,y2 (верхний левй угол - 0,0) в изображении im
цветом col.
Смотри также imageline().
ImageDestroy освобождает память,
ассоциированную с изображением im. im
- идентификатор, возвращенный функцией imagecreate().
ImageFill выполняет заливку, начиная с
координат x, y (верхний левй угол - 0,0)
цветом col изображения im.
ImageFilledPolygon создает закрашенный
многоугольник в изображении im. points -
массив PHP содержит вершины многоугольника:
ImageFilledRectangle создает закрашенный
прямоугольник цвета col в изображении im,
начиная с координат верхнего левого угла x1,
y1, и заканчивая в правом нижнем - x2, y2. 0,
0 - левый верхний угол изображения.
ImageFillToBorder выполняет заливку до границы,
определенной цветом в border. Начальная
точка заливки - x,y (верхний левый угол - 0,0) и
облласть заливается цветом col.
Возвращает высоту шрифта font в
пикселах.
Смотри также imagefontwidth()
и imageloadfont().
Возвращает ширину символа шрифта font в
пикселах.
Смотри также imagefontheight()
и imageloadfont().
ImageGif создает GIF файл с именем filename из
изображения im. Аргумент im
возвращается функцией imagecreate().
Формат изображения будет соответствовать
спецификации GIF87a, если изображение не было
сделано прозрачным функцией imagecolortransparent(),
в этом случае формат будет соответствовать
GIF89a.
Аргумент filename опционален, и если он
отсутствует, строки изображения будут
выводиться непосредственно на брайзер
потоком. Указав тип изображения image/gif в
функции header, вы можете создавать PHP
скрипты, которые будут выводить GIF на
браузер.
ImageInterlace()
переключает бит чередования. Если interlace
равен 1, изображение im будет выводиться
поэтапно, и если interlace равно 0,
чередование выключено.
Возвращается текущее состояние бита
чередования для изображения.
ImageLine рисует линию от x1,y1 до x2,y2 (левй
верхний точка - 0,0) в изображении im
цветом col.
Смотри также imagecreate()
и imagecolorallocate().
ImageLoadFont загружает пользовательский
растровый шрифт и возвращает идентификатор
шрифта (который всегда больше 5, тобы не
вызвать конфликта со встроенными шрифтами).
Файл шрифта - двоичный и архиетктурно
зависимый. Это значит, что Вам следует
генерировать файл шрифта на том процессоре
(архитектуре), на котором Вы будете
запускать PHP.
Таблица 1. Формат файла шрифта Смотри также ImageFontWidth()
и ImageFontHeight().
ImagePolygon создает многоугольник в
изображении im. points - массив PHP,
содержащий вершины многоугольника, т.е
points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points
- общее число вершин.
Смотри также imagecreate().
ImageRectangle создает прямоугольник цветом col
в изображении im, начиния с левой верхней
координаты x1,y1 и заканчивая нижней
правой x2,y2. 0,0 - левй верхний угол
изображения.
ImageSetPixel рисует пиксел x,y (верхний левый
- 0,0) в изображении im цветом col.
Смотри также imagecreate()
и imagecolorallocate().
ImageString рисует строку s в изображении im
по координатам x,y (верхний левый - 0,0)
цветом col. Если font равен 1, 2, 3, 4 или 5,
используются встроенные шрифты.
Смотри также imageloadfont().
ImageStringUp рисует строку s вертикально в
изображении im по координатам x,y (верхний
левый - 0,0) цветом col. Если font равен 1, 2,
3, 4 или 5, используются встроенные шрифты.
Смотри также imageloadfont().
ImageSX возвращает ширину изображения,
определяемого im.
Смотри также imagecreate()
и imagesy().
ImageSY возвращает высоту изображения,
определяемого im.
Смотри также imagecreate()
и imagesx().
Функция рассчитывает и возвращает
границы области (в пикселах) для текста с
шрифтами TrueType.
Измеряемая строка. Размер шрифта. Имя файла TrueType шрифта. (Может быть и URL.) Угол в градусах, под которым наклонен
измеряемый text. Точки относятся к text безотносительно
к углу, т.е "верхний левый" означает
верхний левый угол текста при его
горизонтальном расположении.
Функция требует две библиотеки: GD и Freetype.
Смотри также ImageTTFText().
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 (в форма: { ) для
доступа к сиволам за пределами первых 255.
col индекс цвета. Использование
отрицания индекса цвета имеет эффект
включения антиалиасинга.
ImageTTFText()
возвращает массив из 8 элементов,
представляющих четыре точки границы
области вывода текста. Порядок точек:
вепхняя левая, верхняя правая, нижняя
правая, нижняя левая. ТОчки относятся к
тексту без учета угла, т.е. "верхняя левая"
означает верхний левый угол горизонтально
расположенного текста.
Скрипт этого примера создает черный GIF 400x30
пикселей, со словом "Testing...", написанным
шрифтом Arial. Пример 1. ImageTTFText Эта функция требует обе библиотеки: GD и FreeType<.
Смотри также ImageTTFBBox().
Returns the index of the color of the pixel at the specified location in the
image.
Смотри также imagecolorset()
и imagecolorsforindex().
Возвращает индекс цвета в палитре
изображения, который "ближе всего" к
указанному набору RGB.
"Дистанция" между желанным цветом и
каждым цветом в палитре определяется так,
как будто значения RGB определяют точки в
трехмерном пространстве.
Смотри также Возвращает индекс указанного цвета в
палитре изображения.
Если цвет в палитре изображения не
присутствует, возвращается -1.
Смотри также imagecolorclosest().
Эта функция всегда возвращает индекс для
запрашиваемого цвета, одно из двух - или
указанный цвет, или ближайшую альтернативу.
Смотри также imagecolorclosest().
Эти установки устанавливают соответствие
между индексом в палитре и цветом. это
используется для создания эффектов
сплошной заливки в палитре изображения без
накладных расходов преобразования текущей
заливки.
Смотри также imagecolorat().
Возвращается ассоциативный массив с
красным, синим и зеленым ключами, которые
содержат соответствующие значения для
указанного индекса цвета.
Смотри также imagecolorat()
и imagecolorexact().
Возвращает количество цветов в указанной
палитре.
Смотри также imagecolorat()
и imagecolorsforindex(). Для того, чтобы эти функции заработали вц
должны скомпилировать 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 -- Добавляет текстовое сообщение в
указанный почтовый ящик
Возвращает true в случае успеха или false
иначе.
imap_append() добавляет текстовое сообщение в
указанный почтовый ящик mbox. Если указаны
необязательные флаги, также записывает в
почтовый ящик и флаги.
При общении с сервером Cyrus IMAP нужно
использовать в качестве ограничителей
строки "\r\n" вместо "\n", иначе
действие не выполнится.
imap_base64 -- Декодирует текст, закодированный
с помощью BASE64
Функция imap_base64() декодирует текст в
формате BASE-64. Декодированное сообщение
возвращается как строка.
imap_body -- Читает тело сообщения
Функция imap_body() возвращает тело сообщения,
имеющего номер п/п msg_number в текущем почтовом
ящике. Необязательные флаги это битовые
маски из
FT_UID - Номер сообщения msgno является UID'ом
сообщения imap_check -- Проверяет текущий почтовый ящик
Возвращает информацию о текущем почтовом
ящике. В случае неуспеха возвращает FALSE.
Функция imap_check() проверяет статус текущего
почтового ящика на сервере и возвращает
информацию в объекте со следующими
свойствами.
Date : дата сообщения imap_close -- Закрывает поток IMAP
Закрывает поток imap. Необязательный флаг
CL_EXPUNGE заставляет стереть помеченные на
удаление сообщения при закрытии.
imap_createmailbox -- Создает новый почтовый ящик.
imap_createmailbox() создает новый почтовый ящик
указанный в mbox. Возвращает true в случае
успеха и false при ошибке.
imap_delete -- Помечает сообщение из текущего
почтового ящика на удаление
Возвращает true. imap_deletemailbox -- Удаляет почтовый ящик
imap_deletemailbox() удаляет указанный почтовый
ящик. Возвращает true в случае успеха и false
иначе.
imap_expunge -- Удаляет все сообщения,
помеченные на удаление
imap_expunge() удаляет все сообщения помеченные
на удаление с помощью imap_delete(). Возвращает
true.
imap_fetchbody -- Извлекает простую секцию тела
сообщения
Эта функция заставляет извлечь подробную
секцию указанного сообщения как текстовую
строку. Секция - это строка целых чисел,
разделенных точками, которые указывают на
части тела сообщения в списке частей
согласно спецификации IMAP4. Части тела не
декодируются этой функцией. Необязательным
параметром к imap_fetchbody () является битовая
маска из
imap_fetchstructure -- Читает структуру простого
сообщения
Эта функция заставляет извлечь всю
информацию о структуре сообщения с номером
msg_number. Возвращаемая величина является
объектом со следующими элементами. Также функция возвращает массив объектов
под названием parameters[]. Этот объект имеет
следующие свойства. В случае сообщения из нескольих частей,
функция также возвращает массив объектов
всех свойств под название parts[].
imap_header -- Читает заголовок сообщения
Эта функция возвращает объект различных
элементов заголовка
imap_headers -- Возвращает заголовки всех
сообщений в почтовом ящике
Возвращает строковый массив из
информации по заголокам. Один элемент
массива на сообщение.
imap_listmailbox -- Читает список почтовых ящиков
Возвращает массив, содержащий названия
почтовых ящиков.
imap_listsubscribed -- Перечисляет все подписанные
ящики
Возвращает массив всех почтовых ящиков на
которые Вы подписаны. Аргументы ref и pattern
указывают начальное месторасположение
откуда начинать поиск и шаблон, которому
должны удовлетворять названия почтовых
ящиков.
imap_mail_copy -- Копирует указанные сообщения в
почтовый ящик
Возвращает true в случае успеха и false иначе.
Копирует почтовые сообщения указанные с
помощью msglist в почтовый ящик mbox. msglist - это
диапазон, а не просто номера сообщений.
флаги - это битовые маски из
imap_mail_move -- Переносит указанные сообщения в
почтовый ящик
Переносит почтовые сообщения указанные с
помощью msglist в почтовый ящик mbox. msglist - это
диапазон, а не просто номера сообщений.
Возвращает true в случае успеха и false иначе.
imap_num_msg -- Выдает количество сообщений в
текущем почтовом ящике
Возвращает количество сообщений в
текущем почтовом ящике.
imap_num_recent -- Возвращает количество недавно
пришедших сообщений в текущем почтовом
ящике
Возвращает количество недавно пришедших
сообщений в текущем почтовом ящике.
imap_open -- Открывает поток IMAP в почтовый ящик
В случае успеха возвращает поток IMAP или
false иначе. Эта функция может быть
использована для открытия потоков к POP3 и NNTP
серверам. Для того, чтобы присоединиться к
серверу IMAP на 143-й порт на локальной машине
сделайте следующее:
Для того, чтобы подсоединиться к POP3-серверу
на 110-й порт на локальном сервере
используйте:
Для того, чтобы подсоединиться к NNTP-серверу
на 119-й порт на локальном сервере
используйте:
Для того, чтобы подсоединиться к
удаленному серверу замените "localhost" на
имя или IP-адрес сервера к которому Вы хотите
подсоединиться.
Опции - битовая маска из
imap_ping -- Проверяет поток IMAP на
работоспособность
Возвращает true если поток еще
работоспособен и false иначе. Функция imap_ping()
проверяет поток на работоспособность. Он
может также проверять новую почту; это
предпочтительный метод для периодической
проверки новой почты и "живучести"
удаленных серверов.
imap_renamemailbox -- Переименовывает старый
почтовый ящик в новый
Эта функция переименовывает старый
почтовый ящик в новый. Возвращает true в
случае успеха и false иначе.
imap_reopen -- Заново открывает поток IMAP на
новый почтовый ящик
Возвращает true в случае успеха и false иначе.
Эта функция заново открывает указанный
поток на новый ящик.
Опции - битовая маска из
imap_subscribe -- Подписывает на почтовый ящик
Подписывает на новый почтовый ящик.
Возвращает true в случае успеха и false иначе.
imap_undelete -- Снимает отметку с сообщения
помеченного на удаление
Эта функция cнимает отметку с сообщения
помеченного на удаление функцией imap_delete().
Возвращает true в случае успеха и false иначе.
imap_unsubscribe -- Снимает подписку с почтового
ящика
Снимает подписку с почтового ящика.
Возвращает true в случае успеха и false иначе.
imap_qprint -- Конвертирует строку формата
quoted-printable в 8-битовую строку
Конвертирует строку формата quoted-printable в 8-битовую
строку. Возвращает 8-битовую (бинарную)
строку
imap_8bit -- Конвертирует 8-битовую строку в
формат quoted-printable
Конвертирует 8-битовую строку в формат
quoted-printable. Возвращает строку в формате
quoted-printable.
imap_binary -- Конвертирует 8-битную строку в
формат base64
Конвертирует 8-битную строку в формат base64.
Возвращает строку в формате base64.
imap_scanmailbox -- Читает список почтовых ящиков,
проводит поиск в названиях ящиков
Возвращает массив, содержащий имена
почтовых ящиков, которые имеют строку string в
названии.
imap_mailboxmsginfo -- Получает информацию о
текущем почтовом ящике
Возвращает информацию о текущем почтовом
ящике. FALSE в случае неудачи. Функция
imap_mailboxmsginfo() проверяет статус текущего
почтового ящика на сервере и возвращает
информацию в объекте со следующими
свойствами:
imap_rfc822_write_address -- Возвращает правильно
отформатированный email адрес
Возвращает правильно отформатированный
email адрес по данному почтовому ящику, хосту
и персональной информации.
imap_rfc822_parse_adrlist -- Проводит разбор адресной
строки
Эта функция разбирает адресную строку и
для каждого адреса возвращает массив
объектов. Есть 4 типа объектов:
imap_setflag_full -- Устанавливает флаги на
сообщения
Эта функция застваляет добавить
указанный флаг к набору флагов сообщения в
указанной последовательности.
options - это битовая маска из
imap_clearflag_full -- Очищает флаги сообщения
Эта функция заставляет удалить флаги из
набора флагов сообщения в указанной
последовательности.
options - это битовая маска из
imap_sort -- Сортирует сообщения в текущем
почтовом ящике
Возвращает массив номеров сообщений
рассортированных по данному параметру. Rev
должен быть равен 1 если нужна сортировка в
обратном порядке. Критерии сортировки (должен
быть указан только один):
imap_fetchheader -- Возвращает заголовок
сообщения
Эта функция заставляет извлечь полный,
неотфильтрованный заголовок указанного
сообщения в формате RFC 822 как текстовую
строку.
Опиции:
imap_uid -- Эта функция возвращает UID по
данному номеру сообщения в
последовательности
Эта функция возвращает UID по данному
номеру сообщения в последовательности. Не возвращает информацию конфигурации,
установленную при компиляции PHP, или
прочитанную из файла конфигурации Apache (использование
php3_configuration_option директив).
Что бы проверить, использует ли система
php3.ini файл, попробуйте получить значение
cfg_file_path. Если оно установлено, то php3.ini файл
используется. См. также getmyuid(), getmypid(),
getmyinode(), и getlastmod(). См. также get_magic_quotes_runtime(),
set_magic_quotes_runtime(). См. также get_magic_quotes_gpc(),
set_magic_quotes_runtime(). См. также date(), getmyuid(),
get_current_user(), getmyinode(),
и getmypid(). См. также getmyuid(), get_current_user(),
getmypid(), и getlastmod(). Обратите внимание, что при работе PHP как
модуля сервера, вы не получите точный IP
процесса.
См. также getmyuid(), get_current_user(),
getmyinode(), и getlastmod(). См. также getmypid(), get_current_user(),
getmyinode(), и getlastmod(). См. также phpversion(). См. также phpinfo(). См. также get_magic_quotes_gpc(),
get_magic_quotes_runtime(). При вызове, set_time_limit() перезапускает
счетчик времени исполнения с нуля. Другими
словами, если установлен лимит по
умолчанию 30 секунд, и прошло 25 секунд со
времени запуска, то после вызова set_time_limit( 20
) общее время будет составлять 45 секунд
после с начала запуска скрипта. Драйверы 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 , то
концевые пробелы будут удаляться
автоматически. При успешном завершении возвращает
идентификатор соединения, при ошибке - 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
Возвращает идентификатор реальной
устойчивой ссылки к Informix при успешном
завершении и false при ошибке.
ifx_pconnect() работает очень
похоже с ifx_connect(),
но с двумя основными отличиями.
Эта функция ведет себя точно так же, как ifx_connect(),
когда PHP не запкщено как модуль Апача. Во-первых,
при соединении функция перво-наперво
пытается найти устойчивую ссылку, которая
была открыта ранее к тому же хосту с теми же
параметрами (пользователь, пароль). Если
поиски увенчались успехом, будет возвращен
идентификатор ранее установленного
соединения.
Во-вторых, соеденение с SQL-сервером не
закроется по окончании выполнения скрипта.
Вместо этого, ссылка останется открытой для
дальнейшего использования (ifx_close()
не закроет ссылку, установленную
CLASS="FUNCTION">ifx_pconnect()).
Ссылкт такого типа обычно называют
устойчивыми (persistent).
Смотри также: ifx_connect(). Всегда возвращает true
ifx_close() закрывает ссылку к
базе данных Informix, которая ассоциируется со
специальным идентификатором ссылки. Если
идентификатор ссылки не указан,
предполагается последнее установленное
соединение.
Заметим, что данная функция не
ринадлежит к разряду широко используемых,
поскольку неустойчивые соединения
автоматически закрываются после
окончания выполнения скрипта.
ifx_close() не закрое устойчивое
соединение, сгенерированное ifx_pconnect().
Смотри также: ifx_connect(),
и ifx_pconnect(). Пример 1. закрытие соединения с
Informix
Возвращает определенный идентификатор
результата 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
Пример 2. Вставка нескольких
значений в таблицу "catalog"
Возвращает целое 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(). Возвращает true при успешном выполнении,
false при ошибке.
Выполняет предварительно
подготовленный запрос или открывает
курсор для него.
НЕ освобождает result_id
при ошибке.
ТАкже устанавливает реальное значение ifx_affected_rows()
для не-select выражений для выборки данных в ifx_affected_rows().
Смотри также: ifx_prepare(). Коды оошибок The Informix (SQLSTATE & SQLCODE) имеют
следующий фомат:
x [SQLSTATE = aa bbb SQLCODE=cccc]
где:
x = space : нет ошибок
E : ошибка
N : нет больше данных
W : предупреждене
? : неопределенность
Первый символ возвращет общий
результата, SQLSTATE и SQLCODE описывают ошибку
более детально. Обрабатывается последняя
ошибка.
Просмотрите Руководство к Informix для
получения описания SQLSTATE и SQLCODE.
Смотри также: ifx_errormsg() Возвращает сообщение об ошибке Informix,
ассоциируещееся с последней ошибкой, или,
если установлен опциональный параметр "errorcode",
сообщение, соответствующее "errorcode".
Смотри также: ifx_error()
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
Возвращает ассоциативный массив,
соответсвующий выбранному ряду, или 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
Возвращает количество выбранных рядов
или false по ощибке.
Форматирует все ряды запроса с
идентификатором result_id в
html-таблицу. Второй опциональный параметр -
строка с тегами установок <table> Пример 1. Результат Informix как
таблица HTML
Возвращает асоциативный масив с именами
полей как ключами и типами данных SQL как
данными для запроса с result_id.
При ошибке FALSE. Пример 1. Имена полей и типы данных
SQL
ifx_fieldproperties -- список свойств
полей SQL
Возвращает ассоциативный массив с
именами полей как ключами и SQL свойствами
полей как данными для запроса с result_id.
При ошибке - FALSE.
Возвращает свойства полей Informix SQL для
каждого поля в запросе как ассоциативный
массив. Свойства расшифровываются как:
"SQLTYPE;длина;точность;размер;ISNULLABLE" где
SQLTYPE = тип Informix типа "SQLVCHAR" и т.п. и
ISNULLABLE = "Y" или "N". Пример 1. Сойства полей Informix SQL
Возвращает число колонок в запросе для result_id
или FALSEпо ошибке.
После подготовки или выполнения запроса,
этот вызов дает вам количество колонок в
запросе. Дает количество строк, выбранных до сих
пор для запроса с result_id
после ifx_query()
или ifx_do(). Освобождает ресурсы, занятые запросом с
идентификатором результата result_id.
Возвращает FALSE при ошибке. Создает символьный объект. param
должен иметь символьное содердимое. Удаляет символьны объеккт для
аолученного идентификатора символьногго
объекта bid. Возвращает
FALSE при ошибке, в противном случае - TRUE. Обновляет содержимое символьного
объекта с идентификатором bid.
content - строка с новыми
данными. Возвращает FALSE при ошибке, в
противном случае - TRUE. Возвращает содержание символьного
объекта с идентификатором bid. Создает объект BLOB
type: 1 = TEXT, 0 = BYTE
mode: 0 = BLOB-объект хранится в памяти 1 = BLOB-объект
хранит содержимое в файле
param: если режим = 0: указатель на
содержимое если режим = 1: указатель на файл-строку
Возвращает FALSE при ошибке, в противном
случае - новый идентификатор BLOB-объекта. Дублирует полученный BLOB-объект. bid
- идентификатор дублируемого объекта
Возвращает FALSE при ошибке, в противном
случае - новый идентификатор BLOB-объекта. Удаляет объект BLOB сидентификатором bid.
Возвращает FALSE при ошибек и TRUE в противном
случае. Возвращает содержимое объекта BLOB с
идентификатором bid. Обновляет содержимое объекта BLOB c
идентификатором bid. content
- строка с новыми данными. Возвращает FALSE
при ошибке и TRUE в противном случае. Устанавливает для BLOB режимы по умолчанию
для всех запросов select. Режим "0"
означает сохранение Byte-BLOB в памяти, а режим
"1" - сохранение в файл. Устанавливает умолчания для текстового
режима для всех запрососв типа select. Режим
"0" - возвращается идентификатор BLOB, а
при режиме "1" - возвратится varchar с
текстовым содержанием. Устанавливает умолчани для байтового
режима для всх запросов select. Режим "0" -
возвращается идентификатор BLOB, а при
режиме "1" - возвратится varchar с
текстовым содержанием. Устанавливает возвращаемое по умолчанию
значение при выборке ряда для полей
созначением NULL. При mode=0 вощвращается
пустая строка, при mode=1 - NULL. Создает 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 в
противном случае. Удаляет объект slob с идентификатором bid.
Возвращает FALSE приошибке и TRUE в противном
случае. Удаляет объект slob с идентификатором bid.
Возвращает FALSE приошибке и TRUE в противном
случае. Открывает объект slob. bid
должен быть существующим идентификатором
slob. Режимы: 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR,
16 = LO_BUFFER, 32 = LO_NOBUFFER -> or-маска. Возвращает
FALSE при ошибке и новый идентификатор
объекта slob в противном случае. Возвращает текущий файл или позицию
поиска для открытього объекта slob, bid
должен быть действующим идентификатором
slob. Возвращает FALSE при ошибке, в противном
случае - позицию поиска. Устанавливает текуцщий файл или позицию
поиска для открытого объекта slob. bid
должен быть существующим идентификатором
slob. Режимы: 0 = LO_SEEK_SET, 1 = LO_SEEK_CUR, 2 = LO_SEEK_END и offset
- байтовое смещение. Возвращает FALSE при
ошибке, в противном случае - позицию поиска. Читает байты в объект slob. bid
- существующий идентификатор slob и nbytes
- количество байт, которое надо прочесть.
Возвращает FALSE при ошибке и строку в
протвном случае. Записывает строку в объект slob. bid
- существующий идентификатор slob и content
- содержание записи. Возвращает FALSE при
ошибке или число записанных байт в
противном случае. 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 Так же как и при организации структуры
каталога на жестком диске, в данном
способе нет жестких правил по организации
структуры, и менеджер сервера директории
LDAP допускает любую структуру, подходящую
для выбранной цели. Однако имеется ряд
соглашений. Суть их в том, что вы не можете
написать код доступа к серверу директории,
не зная его структуры, так же как вы не
можете использовать базу данных без
представления о ее предназначении. Пример
полной программы
Поиск информации для всех записей, где
фамилия начинается с "S", в сервере
директории, вывод на дисплей и извлечение
с именем и email-адресом. Пример 1. Пример поиска в LDAP
Вам потребуется установить и
скомпилировать библиотеки LDAP-клиента или
из пакета University of Michigan ldap-3.3, или из Netscape
Directory SDK. Вам также потребуется
перекомпилировать PHP с поддержкой LDAP для
того чтобы применение PHP LDAP вызовов стало
доступным.
Прежде чем использовать LDAP вызовы,
необходимо знать ..
Типичная последовательность LDAP-вызовов,
которую вы можете применять в приложениях,
представлена в следующем щаблоне:
ldap_connect() // установка
соединения с сервером Большое количество информации по LDAP
может быть найдено:
Netscape SDK одержит полезное Руководство
Программиста в .html формате. ldap_add -- добавляет записи в LDAP каталог int ldap_add возвращает true при успехе и false при ошибке.
Функция ldap_add() используется
для добавления записей в LDAP каталог. DN
добавляемой записи выражается
посредством dn. Массив записи определяет
информацию о записи. Значения записей
индексируются посредством индивидуальных
атрибутов. В случае множественных
значений для атрибута, они индексируются
целыми числами начиная с 0.
запись["атрибут1"] = значение Пример 1. Полный прример с
идентифицируемой связью
ldap_bind -- связь с LDAP каталогом int ldap_bind Связь с LDAP каталогом с определенным RDN и
паролем. Возвращает true при успехе и false при
ошибке.
ldap_bind() осуществляет
операцию связи с каталогом. bind_rdn и bind_password
используются факультативно. Если не
определено, применяется связь anonymous. ldap_close -- закрывает связь с LDAP сервером int ldap_close Возвращает true при успехе, false при ошибке.
ldap_close() закрывает связь с LDAP
сервером, которая ассоциировалась с
определенным link_identifier.
Этот вызов внутренне идентичен ldap_unbind().
LDAP API использует вызов ldap_unbind(),
поэтому возможно он предпочтительнее
вызова ldap_close(). ldap_connect -- соединение с LDAP сервером int ldap_connect Возвращает положительный LDAP
идентификатор связи при успехе, false при
ошибке.
ldap_connect() устанавливает
соединение с LDAP сервером по определенным hostname
и port. Оба аргумента
факультативные. Если аргументы не
определены, то будет возвращен
идентефикатор уже открытого
соединения. Если определено только hostname,
то по умолчанию используется порт 389. ldap_count_entries -- подсчет количества записей
при поиске int ldap_count_entries Возвращает количество записей в
результате или false при ошибке.
ldap_count_entries() возвращает
количество записей хранимых в результате
от предыдущей операции поиска. result_identifier
идентифицирует внутренний ldap результат. ldap_delete -- удаляет запись из каталога int ldap_delete Возвращает true при успехе и false при ошибке.
ldap_delete() удаляет отдельную
запись из LDAP каталога, определенную по dn. ldap_dn2ufn -- конвертирует DN в User Friendly Naming
формат string ldap_dn2ufn ldap_dn2ufn() преобразует DN в
более дружественную для пользователя
форму, удаляя имена типа. ldap_explode_dn -- разбивает DN на составные части array ldap_explode_dn 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 -- возвращает первый атрибут string ldap_first_attribute Возвращает первый атрибут в записи при
успехе и false при ошибке.
Подобно чтению записей, атрибуты также
читаются один за другим из отдельной
записи. ldap_first_attribute()
возвращает первый атрибут в записи,
отмеченной идентификатором записи.
Оставшиеся атрибуты ищутся
последовательными вызовами ldap_next_attribute().
ber_identifier является
идентификатором указателя положения
внутренней памяти. Он передается по ссылке.
Аналогичный ber_identifier
передается ldap_next_attribute() функции, которая
изменяет этот указатель.
См. также ldap_get_attributes() ldap_first_entry -- возвращает первый
идентификатор (id) результата int ldap_first_entry Возвращает идентификатор записи для
первой записи результата при успехе и
false при ошибке.
Записи в LDAP-результате считываются
последовательно с использованием функций ldap_first_entry()
и ldap_next_entry().
ldap_first_entry() возвращает
идентификатор записи для первой записи в
результате. Этот идентификатор записи
передается затем в процедуру lap_next_entry()
для получения последовательных записей из
результата.
См. также ldap_get_entries(). ldap_free_result -- освобождает память
результата int ldap_free_result Возвращает true при успехе и false при ошибке.
ldap_free_result() освобождает
внутреннюю память, предназначенную для
хранения результата и отмечаемую
посредством result_identifier.
Вся память результата автоматически
освобождается когда скрипт завершается.
Обычно вся память, выделяемая для ldap
результата освобождается при окончании
скрипта. В случае, когда скрипт выполняет
последовательные поиски, которые
возвращают большие наборы записей в
результате, ldap_free_result() может
быть вызвана для сохранения
работоспособности оперативной памяти для
следующей части скрипта.. ldap_get_attributes -- получает атрибуты записи в
результате от поиска array ldap_get_attributes Возвращает полную информацию о записи в
многоразмерном массиве при успехе и false
при ошибке.
ldap_get_attributes() используется
для упрощения чтения атрибутов и значений
из записи в результате от поиска.
Возвращаемым значением функции является
многоразмерный массив атрибутов и
значений.
Разместив определенную запись в
каталоге, вы можете узнать какая
информация хранится для этой записи,
используя данный вызов. Вы могли бы
использовать этот вызов в приложении
которое "просматривает" каталог
записей и/или когда вам не известна
структура каталога записей. Во многих
вы можете искать определенные
атрибуты, такие как email-адрес или фамилия,
не озадачиваясь при этом содержимым
других данных.
return_value["count"] = количество
атрибутов в записи Пример 1. Показывает список
атрибутов отдельной записи каталога
См. также ldap_first_attribute()
и ldap_next_attribute() ldap_get_dn -- получает DN записи результата string ldap_get_dn Возвращает DN записи результата или false
при ошибке.
ldap_get_dn() используется для
нахождения DN записи в результате. ldap_get_entries -- получает все записи
результата array ldap_get_entries Возвращает полную информацию о
результате в многомерном массиве при
успехе и false при ошибке.
ldap_get_entries() используется для
упрощения чтения множества записей из
результата и затем чтения атрибутов и
множественных значений. Информация о
записи возвращается по одиночному вызову
функции в многомерном массиве. Структура
массива представлена ниже.
Индекс атрибута преобразуется к нижнему
регистру. (Атрибуты серверов каталогов
нечувствительны к регистру, но не в том
случае когда они используются в качестве
индексов массива).
return_value["count"] = количество
записей в результате См. также ldap_first_entry()
и ldap_next_entry() ldap_get_values -- получение всех значений из
записи результата array ldap_get_values Возвращает массив значений атрибута при
успехе и false при ошибке.
ldap_get_values() используется для
чтения всех значений атрибута в записи в
данном результате. Запись определяется по result_entry_identifier.
Количество значений может быть получено
при индексации "счетчика" в
результирующем массиве. Отдельные
значения доступны по целочисленному
индексу в массиве. Первый индекс
начинается с 0.
Для данного вызова необходим result_entry_identifier,
поэтому нужно предварительно сделать один
вызов ldap поиска, и один из вызовов для
получения отдельной записи.
Ваше приложение или может быть жестко
настроено на поиск определенных атрибутов
(таких как "фамилия" или "почта")
или вы должны использовать вызов ldap_get_attributes()
для получения информации о том, какие
атрибуты существуют для данной записи.
В LDAP может быть более одной записи для
атрибута, поэтому можно, например, хранить
несколько адресов email в записи каталога
для одной персоны, при этом все записи
будут отмечены с атрибутом "mail"
return_value["count"] = количество
значений для атрибута Пример 1. Список значений атрибута
"mail" для записи каталога
ldap_list -- одноуровневый поиск int ldap_list Возвращает идентификатор результата
поиска или false при ошибке.
ldap_list() выполняет поиск с
определенным фильтром по каталогу с
областью LDAP_SCOPE_ONELEVEL.
LDAP_SCOPE_ONELEVEL означает что такой поиск
может вернуть только информацию,
находящуюся на уровне непосредственно
ниже базового dn, заданного в вызове. (Эквивалентно
вводу "ls" и получению списка файлов и
папок в текущем рабочем каталоге).
Этот вызов берет факультативно
четвертый параметр который является
массивом требуемых атрибутов. См.
примечание к ldap_search(). Пример 1. Составление списка всех
подразделений организации
ldap_modify -- изменение записи LDAP int ldap_modify Возвращает true при успехе и false при
ошибке.
ldap_modify() используется для
изменения существующих записей в каталоге
LDAP. Структура записи такая же как и в ldap_add(). ldap_next_attribute -- получает следующий атрибут
в результате string ldap_next_attribute Возвращает следующий атрибут в записи
или false при ошибке.
ldap_next_attribute() вызывается для
поиска атрибутов в записи. Внутреннее
положение указателя устанавливается по ber_identifier.
Он посылается в данную функцию по ссылке.
Первый вызов ldap_next_attribute()
осуществляется с result_entry_identifier
получаемым от ldap_first_attribute().
См. также ldap_get_attributes() ldap_next_entry -- получает следующую запись в
результате int ldap_next_entry Возвращает идентефикатор записи для
следующей записи в результате, записи
которого начинали считываться функцией 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 -- чтение записи int ldap_read Возвращает идентификатор результата
поиска или false при ошибке.
ldap_read() выполняет поиск при
определенном фильтре по каталогу с
областью LDAP_SCOPE_BASE. Таким образом, это
эквивалентно чтению записи из каталога.
Пустой фильтр не допустим. Если вы хотите
получить абсолютно всю информацию для
данной записи, используйте фильтр
"objectClass=*". Если вы знаете какие типы
записей используются в сервере каталога,
вы можете применить подходящий фильтр,
такой как "objectClass=inetOrgPerson".
Этот вызов берет факультативно
четвертый параметр который является
массивом требуемых атрибутов. См.
примечание ldap_search(). ldap_search -- поиск по дереву LDAP int ldap_search Возвращает идентификатор результата
поиска или 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 поиск
Когда вы выполняете поиск, и слишком
много данных возвращается (много записей)
вы получите предупреждение, и ldap_get_entries()
выдаст сбой. Рассматриваемый здесь прием
должен выключить это предупреждение,
потом проверить полученную запись.
$normerr = error_reporting (); Вы можете попробовать сузить эту область,
добавив особый фильтр, т.е. (cn=a*), но было
бы лучше иметь возможность захватить
результаты в битах (т.е. 1-100, 101-200...). ldap_unbind -- прекращение связи из каталога LDAP int ldap_unbind Возвращает true при успехе и false при ошибке.
ldap_unbind() прекращает связь из
каталога LDAP. Функция mail() позволяет отсылать
почту. Если задан четвертый строковый
аргумент, он автоматически вставляется в
конец заголовка. обычно это используется
при добавлении дополнительных полей в
заголовок. Несколько дополнительных полей
разделяются символом новой строки. Пример
2. Посылка почты с дополнительными полями
заголовка. Эти математические функции работают
только с диапазоном чисел типа long и double.
Если Вы хотите использовать большие числа,
взгляните на математические
функции произвольной точности. .
Следующие величины определяются как
математические константы PHP:
Таблица 1. Математические константы Возвращает абсолютную величину числа.
Если число с плавающей запятой, то также
возвращает число с плавающей запятой. Возвращает арккосинус аргумента в
радианах.
Возвращает арктангенс аргумента в
радианах.
См.также acos()
и atan(). Эта функция вычисляет арктангенс от двух
переменных x и y. Аналогично вычислению
арктангенса y / x, за исключением того, что
знаки обоих аргументов используются для
определения сектора результата.
Функция возвращает результат в радианах,
находящихся между -PI и PI (включительно).
Возвращает строку, содержащую number,
представленное по основанию tobase.
Основание, в котором дается число which number
указывается в frombase.
Основания frombase и tobase
должны находиться в диапазоне от 2 до 36
включительно. Цифры в числах с основанием
выше, чем 10 будут представлены буквами a-z,
со значениями a - 10, b - 11 и z - 36. Пример 1. base_convert()
Возвращает десятичный эквивалент
двоичного числа, представленного
аргументом binary_string.
OctDec конвертирует двоичное число в
десятичное. Наибольшее число, которое
может быть сконвертировано равно 31 битам
или 2147483647 в десятичном виде.
См.также функцию decbin(). Возвращает следующее наивысшее целое
значение number.
Использование ceil() на целых
числах - абсолютная трата времени.
ЗАМЕЧАНИЕ: Функция ceil() в PHP/FI
2 возвращаля число типа float. Используйте: $new
= (double)ceil($number); для того, чтобы
сэмулировать старое поведение функции.
Возвращает строку, содержащую двоичное
представление аргумента number. Наибольшее
число, которое может быть сконвертировано
равно 2147483647 в десятичном виде или 31 бит.
См.также функцию bindec(). Возвращает строку, содержащую
шестнадцатиричное представление
аргумента number. Наибольшее число, которое
может быть сконвертировано равно 2147483647 в
десятичном виде или "7fffffff" в
шестнадцатиричном.
См. также функцию hexdec(). Возвращает строку, содержащую
восьмеричное представление аргумента number.
Наибольшее число, которое может быть
сконвертировано равно 2147483647 в десятичном
виде или "17777777777" в восьмеричном. См.также
octdec(). Возвращает следующее нижележащее
значение после number.
Использование floor() на целых
числах - абсолютная потеря времени.
ЗАМЕЧАНИЕ: Функция floor() в
PHP/FI 2 возвращала число типа float.
Используйте: $new = (double)floor($number);
для эмулирования старого поведения этой
функции.
Возвращает максимальную величигу,
которая может быть возвращена вызовом
функции rand().
См.также rand(),
srand() mt_rand(),
mt_srand() и mt_getrandmax(). Возвращает десятичный эквивалент числа,
представленного аргументом hex_string. HexDec
конвертирует шестнадцатиричную сстроку в
десятичное число. Наибольшее число,
которое может быть сконверьтировано равно
7fffffff в шестнадцатиричном виде или 2147483647 в
десятичном.
См. также функцию dechex(). Возвращает натуральный логарифм от
аргумента arg. Возвращает логарифм по основанию 10 от
аргумента arg. max() возвращает наибольшее
число из перечисленных в параметрах.
Если первый элемент является массивом, max()
возвращает максимальную величину массива.
Если первый парметр - целое, строка или
типа double, следует использовать как минимум
два параметра, и в этом случае max()
возвращает наибольшее из этих величин. Вы
можете сравнивать неограниченное
количнество значений.
Если одна или более величин типа double, все
остальные величины будут обращены double, и,
соответственно, возвратится число типа
double. Если ни одно из чисел не является double,
то все будут обращены в целые и
возвратится целое число. min() возвращает наименьшее
значение из указанных в аргументах.
Если первый параметр - массив, min()
возвратит наименьшую величину массива.
Если первый параметр - целое число, строка
или double, следует указать минимум два
парметра и min() возвратит
Основные директивы
конфигурации
bit value
допустимые
сообщения
1
нормальные ошибки
2
нормальные
предупреждения
4
ошибки
синтаксического анализатора
8
некритичные
предупреждения стиля
include_path=.:/home/httpd/php-lib
Значением по умолчанию этой директивы
является . (только текущий
каталог).
include_path=".;c:\www\phplib"
Директивы Конфигурации
Почты
configure делает честную попытку
определить это за вас и устанавливает
значение по умолчанию, но в случае
неудачи вы можете установить это здесь.
Директивы Конфигурации
Safe Mode
Debugger Configuration Directives
Директивы Загрузки
Расширений(Extension Loading)
Директивы конфигурации MySQL
Директивы конфигурации mSQL
Директивы конфигурации
Postgres
Директивы Конфигурации Sybase
Директивы Конфигурации
Sybase-CT
Директивы Конфигурации BC
Math
Директивы Конфигурации
Возможностей Броузера
Директивы Конфигурации
Унифицированных ODBC
Модуль Apache
Директивы конфигурации
модуля Apache
Модуль CGI переадресации
module/action
CGI
Виртуальные хосты
Безопасность
С правильным выбором compile-time и runtime опций
конфигурации он дает вам как раз ту
комбинацию свободы и безопасности, которая
вам нужна.
CGI binary
Возможные
атаки
Вариант 1:
обслуживаются только общие(public) файлы
Вы все еще должны убедиться, что ваши
сценарии PHP не полагаются на этот или другой
путь вызова сценария, ни непосредственно http://my.host/cgi-bin/php/dir/script.php3,
ни переадресацией http://my.host/dir/script.php3.
Вариант 2:
использование --enable-force-cgi-redirect
Action php3-script /cgi-bin/php
AddHandler php3-script .php3
Вариант 3:
установка doc_root или user_dir
Вариант 4: PHP
синтаксический анализатор вне дерева web
#!/usr/local/bin/php
Модуль Apache
Глава 5. Синтаксис и
грамматика
Переход из HTML
1. <? echo("простейший способ, инструкция обработки SGML\n"); ?>
2. <?php echo("при работе с XML документами делайте так\n"); ?>
3. <script language="php">
echo ("некоторые редакторы (подобные FrontPage) не
любят обрабатывающие инструкции");
</script>;
4. <% echo("От PHP 3.0.4 можно факультативно применять ASP-тэги"); %>
Разделение инструкций
<php
echo "Это тест";
?>
<php echo "Это тест" ?>
Типы переменных
Инициализация переменной
Инициализация Массивов
$names[] = "Jill"; // $names[0] = "Jill"
$names[] = "Jack"; // $names[1] = "Jack"
Инициализация объектов
class foo {
function do_foo () {
echo "Doing foo.";
}
}
$bar = new foo;
$bar -> do_foo ();
Область Переменной
$a = 1; /* глобальная область */
Function Test () {
echo $a; /* ссылка на переменную локальной области */
}
Test ();
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum ();
echo $b;
Function Test () {
$a = 0;
echo $a;
$a++;
}
Function Test () {
static $a = 0;
echo $a;
$a++;
}
Function Test () {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
Изменяемые переменные
$a = "hello";
$$a = "world";
echo "$a ${$a}";
echo "$a $hello";
Переменные вне PHP
HTML Формы (GET и POST)
<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form>
<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>
Имена переменных РИСУНКА
АКТИВИЗАЦИИ
<input type=image src="image.gif" name="sub">
HTTP Кукисы
SetCookie ("MyCookie[]", "Testing", time()+3600);
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
Переменные окружения
echo $HOME; /* Показывает переменную окружения HOME,
если она установлена. */
Директивы конфигурации сервера
Изменение типа
$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)
Определение типов переменных
Приведение типа
$foo = 10; // $foo is an integer
$bar = (double) $foo; // $bar is a double
$foo = (int) $bar;
$foo = ( int ) $bar;
Преобразование строк
$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'
Манипуляции с массивом
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world"
Глава 6. Элементы языка
Константа
Пример 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!");
?>
Пример 6-2. Описание констант
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
undefine ("CONSTANT");
?>
Выражения
function foo () {
return 5;
}
{
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 */
IF
if ($a > $b)
print "a is bigger than b";
ELSE
if ($a > $b) {
print "a is bigger than b";
} else {
print "a is NOT bigger than b";
}
ELSEIF
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 :
IF(): ... ENDIF;
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
/* example 1 */
$i = 1;
while ($i <= 10) {
print $i++; }
/* example 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
DO..WHILE
$i = 0;
do {
print $i;
} while ($i>0);
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
/* пример 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++) ;
BREAK
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
CONTINUE
while (list($key,$value) = each($arr)) {
if ($key % 2) { // skip even members
continue;
}
do_something_odd ($value);
}
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;
}
/* пример 3 */
switch ($i) {
case 0:
print "i equals 0";
case 1:
print "i equals 1";
case 2:
print "i equals 2";
}
/* 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";
}
REQUIRE
INCLUDE
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
include($files[$i]);
}
/* Это неправильно и не будет работать, как хотелось бы. */
if ($condition)
include($file);
else
include($other);
/* А вот это - верно. */
if ($condition) {
include($file);
} else {
include($other);
}
FUNCTION
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Example function.\n";
return $retval;
}
Возвращение
результатов
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();
Аргументы
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.'
Значения
по умолчанию
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
<?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;
$cart->add_item("10", 1);
class Named_Cart extends Cart {
var $owner;
function set_owner ($name) {
$this->owner = $name;
}
}
$ncart = new Named_Cart; // Создать корзину
$ncart->set_owner ("kris"); // Указать владельца
print $ncart->owner; // Распечатать имя владельца корзины
$ncart->add_item ("10", 1); // (унаследовано из обычной корзины)
class Auto_Cart extends Cart {
function Auto_Cart () {
$this->add_item ("10", 1);
}
}
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. Выражения
Операторы
Арифметические
операторы
пример
название
результат
$a + $b
Сложение
Сумма $a и $b.
$a - $b
Вычитание
Вычитает $b из $a.
$a * $b
Умножение
Произведение $a и $b.
$a / $b
Деление
Деление $a на $b.
$a % $b
Остаток деления
Остаток от деления $a на
$b.
Операторы строк
$a = "Hello ";
$b = $a . "World!"; // теперь $b = "Hello World!"
Операторы
присваивания
$a = ($b = 4) + 5; // теперь $a равно 9, а $b стало равным 4.
$b = "Hello ";
$b .= "There!"; // теперь $b равно "Hello
There!", как если бы мы написали $b = $b .
"There!";
Бинарные Операторы (Побитовые
Логические Операторы)
пример
название
результат
$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) */Логические операторы
пример
название
результат
$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.
Операторы Сравнения
пример
название
результат
$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
Description
ada_autocommit
Description
ada_close
Description
ada_commit
Description
ada_connect
Description
ada_exec
Description
ada_fetchrow
Description
ada_fieldname
Description
ada_fieldnum
Description
ada_fieldtype
Description
ada_freeresult
Description
ada_numfields
Description
ada_numrows
Description
ada_result
Description
ada_resultall
Description
ada_rollback
Description
Специфичные функции Apache
apache_lookup_uri
Описание
class apache_lookup_uri(string filename);
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
Описание
string apache_note(string note_name, string
[note_value]);
getallheaders
Описание
array getallheaders(void);
Этот пример покажет все заголовки
текущего запроса
$headers = getallheaders();
while (list($header, $value) = each($headers)) {
echo "$header: $value<br>\n";
}
virtual
Описание
int virtual(string filename);
Функции обработки массивов
array
Описание
array 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")
);
array_walk
Описание
int array_walk(array arr, string func);
$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' );
arsort
Описание
void arsort(array array);
Пример нам покажет: fruits[a] =
orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple
Фрукты показаны в обратном алфавитном
порядке, и поддерживаются связанные с ними
индексы.
$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";
}
asort
Описание
void asort(array array);
Этот пример покажет: fruits[c] =
apple fruits[b] = banana fruits[d] = lemon fruits[a] = orange
Фрукты показаны в алфавитном порядке, и
поддерживаются индексы связанные с каждым
элементом массива.
$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";
}
count
Описание
int count(mixed var);
current
Описание
mixed current(array array);
each
Описание
array each(array array);
$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );
$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );
echo "Values submitted via POST method:<br>";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
echo "$key => $val<br>";
}
end
Описание
end(array array);
key
Описание
mixed key(array array);
ksort
Описание
int ksort(array array);
Этот пример должен показать: fruits[a]
= orange fruits[b] = banana fruits[c] = apple fruits[d] = lemon
$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";
}
list
Описание
void 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>
next
Описание
mixed next(array array);
pos
prev
Описание
mixed prev(array array);
reset
Описание
mixed reset(array array);
rsort
Описание
void rsort(array array);
Этот пример покажет: fruits[0] =
orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple Фрукты
отсортированы в обратном алфавитном
порядке.
$fruits = array("lemon","orange","banana","apple");
rsort($fruits);
for(reset($fruits); ($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value."\n";
}
sizeof
sort
Описание
void sort(array array);
Этот пример покажет: fruits[0] =
apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange
Фрукты будут отсортированы повозрастанию
в алфавитном порядке.
$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
uasort
Описание
void uasort(array array, function
cmp_function);
uksort
Описание
void uksort(array array, function
cmp_function);
Пример покажет: 20: twenty 10: ten 4:
four 3: three
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";
}
usort
Описание
void usort(array array, function
cmp_function);
Пример покажет: 0: 6 1: 5 2: 3 3: 2 4:
1 Очевидно, что в этом тривиальном
случае функция rsort()
было бы более соответствующей.
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";
}
Математические BC (произвольной точности) функции
bcadd
Описание
bccomp
Описание
int bccomp(string левый операнд, string правый
операнд, int [масштаб]);
bcdiv
Описание
string bcdiv(string левый операнд, string правый
операнд, int [масштаб]);
bcmod
Описание
(string левый операнд, string модуль);
bcmul
Описание
(string левый операнд, string правый
операнд, int [масштаб]);
bcpow
Описание
(string x, string y, int [масштаб]);
bcscale
Описание
(int масштаб);
bcsqrt
Описание
(string операнд, int масштаб);
bcsub
Описание
(string левый операнд, string правый
операнд, int [масштаб]);
Календарные функции
JDToGregorian
JDToGregorian -- Преобразование дневного Юлианcкого
счета в Грегорианскую дату
Описание
string jdtogregorian(int julianday);
GregorianToJD
GregorianToJD -- Преобразовывает Грегорианскую
дату на Дневный Юлианский cчет
Описание
int gregoriantojd(int month, int day, int year);
<?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);
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);
JDMonthName
JDMonthName -- возвращает название месяца
Описание
string jdmonthname(int julianday, int mode);
main
сообщает функции, в какой календарь нужно
преобразовать дневнрй Юлианский счет на, и
какой тип месячных имен должен быть
возвращен.
Способ
Значение
0
Грегорианский - apreviated
1
Грегорианский
2
Юлианский - apreviated
3
Юлианский
4
Еврейский
5
Французский
Республиканский
JDDayOfWeek
JDDayOfWeek -- Возвращает день недели
Описание
mixed jddayofweek(int julianday, int mode);
string) или int в зависимости
от способа(mode).
Способ
Значение
0
возвращает дневной
номер как int (0=воскресенье, 1=понедельник,
и т.п.)
1
возврат string содержание
дня недели (английское-грегорианское)
2
возвращает string содержа
abreviated дени недели (английский-грегорианский)
Функции даты/времени
checkdate
Описание
int checkdate (int month, int day, int
year);
date
Описание
string date (string format, int timestamp);
Нераспознанные символы в форматной строке
будут печататься как есть.
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)));
$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);
strftime
Описание
string strftime (string format, int
timestamp);
Пример будет работать, если у вас
установлены соответствующие locale.
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"));
getdate
Описание
array getdate (int timestamp);
gmdate
Описание
string gmdate (string format, int
timestamp);
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) );
mktime
Описание
int mktime (int hour, int minute, int
second, int month, int day, int year);
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) );
gmmktime
Описание
int gmmktime (int hour, int minute, int
second, int month, int day, int year);
time
Описание
int time (void);
microtime
Описание
string microtime (void);
Функции dBase
dbase_create
Описание
Если создание базы данных успешно, то
возвращает dbase_identifier(идентификатор базы
данных), в противном случае возвращает false(ложь).
L
Логическое. Не требует длину или
точность.
M
Мемо. (Помните, что они не
поддерживаются в PHP.) Не требует длину
или точность.
D
дата (сохраненная как ГГГГММДД). Не
требует длину или точность.
N
Числовое. Это поле имеет и длину и
точность(количество цифр после
десятичной точки).
C
Строка. Имеет длину и не требует
точность.
// "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_close
Описание
dbase_pack
Описание
dbase_add_record
Описание
dbase_delete_record
Описание
dbase_get_record
Описание
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
Описание
Функции 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
Описание
int dbmopen(string filename, int flags);
dbmclose
Описание
bool dbmclose(int dbm_identifier);
dbmexists
Описание
bool dbmexists(int dbm_identifier, string key);
dbmfetch
Описание
string dbmfetch(int dbm_identifier, string key);
dbminsert
Описание
int dbminsert(int dbm_identifier, string key, string value);
dbmreplace
Описание
bool dbmreplace(int dbm_identifier, string key, string value);
dbmdelete
Описание
bool dbmdelete(int dbm_identifier, string key);
dbmfirstkey
Описание
string dbmfirstkey(int dbm_identifier);
dbmnextkey
Описание
string dbmnextkey(int dbm_identifier, string key);
$key = dbmfirstkey($dbm_id);
while ($key) {
echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
$key = dbmnextkey($dbm_id, $key);
}
dblist
Описание
string dblist(void);
Функции для работы с каталогами
chdir
Описание
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
Описание
opendir
Описание
readdir
Описание
<?php
$handle=opendir('.');
echo "Directory handle: $handle\n";
echo "Files:\n";
while ($file = readdir($handle)) {
echo "$file\n";
}
closedir($handle);
?>
rewinddir
Описание
Функции динамической загрузки
dl
Описание
escapeshellcmd
Описание
system(EscapeShellCmd($cmd))
Функции запуска программ
exec
Описание
system
Описание
passthru
Описание
Функции работы с filePro
filepro
filepro -- читает и верифицирует map-файл
Описание
bool filepro(string directory);
filepro_fieldname
filepro_fieldname -- получить имя поля
Описание
string filepro_fieldname(int field_number);
filepro_fieldtype
filepro_fieldtype -- получить тип поля
Описание
string filepro_fieldtype(int field_number);
filepro_fieldwidth
filepro_fieldwidth -- получить ширину поля
Описание
int filepro_fieldwidth(int 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_rowcount
filepro_rowcount -- сколько строк в базе filePro?
Описание
int filepro_rowcount(void);
Функции файловой системы
basename
basename -- возвращает из полного пути имя файла
Описание
string basename(string path);
$path = "/home/httpd/html/index.php3";
$file = basename($path); // $file устанавливается в "index.php3"
chgrp
chgrp -- изменить файловую группу
Описание
int chgrp(string filename, mixed group);
chmod
chmod -- изменить режим файла
Описание
int chmod(string filename, int mode);
chmod( "/somedir/somefile", 755 ); // десятичный; возможно неправильныйt
chmod( "/somedir/somefile", 0755 ); // восьмиричный; корректное значение режима
chown
chown -- изменяет владельца файла
Описание
int chown(string filename, mixed user);
clearstatcache
clearstatcache -- очистить кеш статистики файла
Описание
void clearstatcache(void);
copy
copy -- скопировать файл
Описание
int copy(string source, string dest);
if (!copy($file, $file.'.bak')) {
print("failed to copy $file...<br>\n");
}
dirname
dirname -- путь к файлу
Описание
string dirname(string path);
$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"
fclose
fclose -- close an open file pointer
Описание
int fclose(int fp);
Указатель должен быть действующим и
указывать на файл, успешно открытый fopen()
или fsockopen().
feof
feof -- проверка на достижение указателем
конца файла
Описание
int feof(int fp);
fgetc
fgetc -- получить символ из файла
Описание
string fgetc(int fp);
fgets
fgets -- получить строку по указателю на файл
Описание
string fgets(int fp, int length);
fgetss
fgetss -- получить строку по указателю файла и
вырезать HTML тэги
Описание
string fgetss(int fp, int length);
file
file -- прочитать файл в массив
Описание
array file(string filename);
file_exists
file_exists -- проверяет существование искомого
файла.
Описание
int file_exists(string filename);
fileatime
fileatime -- время поледнего обращения к файлу
Описание
int fileatime(string filename);
filectime
filectime -- время последнего изменения файла
Описание
int filectime(string filename);
filegroup
filegroup -- группа файла
Описание
int filegroup(string filename);
fileinode
fileinode -- inode файла
Описание
int fileinode(string filename);
filemtime
filemtime -- время модификации файла
Описание
int filemtime(string filename);
fileowner
fileowner -- владелец файла
Описание
int fileowner(string filename);
fileperms
fileperms -- разрешения для файла
Описание
int fileperms(string filename);
filesize
filesize -- размер файла
Описание
int filesize(string filename);
filetype
filetype -- тип файла
Описание
string filetype(string filename);
Возвращает тип файла. Возможные значения:
fifo, char, dir,
block, link, file, и
unknown.
fopen
fopen -- открыть файл или URL
Описание
int fopen(string filename, string mode);
mode также может содержать символ 'b'.
Используется в системах, различающих
бинарные и текстовые файлы (не используется
в Unix). Если данное значение не имеет смысла,
оно игногрируется.
$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w");
$fp = fopen("c:\\data\\info.txt", "r");
fpassthru
fpassthru -- вывод всех данных из указателя файла
Описание
int fpassthru(int fp);
fputs
fputs -- запись в файл
Описание
int fputs(int fp, string str, int [length]);
fread
fread -- бинарное чтение файла
Описание
string fread(int fp, int length);
// получить содержимое файла в строку
$filename = "/usr/local/something.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );
fseek
fseek -- поиск в файле
Описание
int fseek(int fp, int offset);
ftell
ftell -- текущая позиция указателя в файле
Описание
int ftell(int fp);
fwrite
fwrite -- бинарная запись в файл
Описание
int fwrite(int fp, string string, int [length]);
is_dir
is_dir -- filename - директория?
Описание
bool is_dir(string filename);
is_executable
is_executable -- фавйл относится к классу
исполнимых
Описание
bool is_executable(string filename);
is_file
is_file -- файл относится к классу обычных
файлов
Описание
bool is_file(string filename);
is_link
is_link -- файл относится к файлу символических
ссылок
Описание
bool is_link(string filename);
is_readable
is_readable -- файл относится к классу читаемых
Описание
bool is_readable(string filename);
is_writeable
is_writeable -- файл относится к классу
записываемых
Описание
bool is_readable(string filename);
link
link -- создать жесткую ссылку
Описание
int link(string target, string link);
linkinfo
linkinfo -- информация о ссылке
Описание
int linkinfo(string path);
mkdir
mkdir -- создать директорию
Описание
int mkdir(string pathname, int mode);
mkdir("/path/to/my/dir", 0700);
pclose
pclose -- закрывает процесс файлового
указателя
Описание
int pclose(int fp);
popen
popen -- открыть процесс файлофого указателя
Описание
int popen(string command, string mode);
$fp = popen( "/bin/ls", "r" );
readfile
readfile -- вывод файла
Описание
int readfile(string filename);
readlink
readlink -- цель символической ссылки
Описание
string readlink(string path);
rename
rename -- переименовать файл
Описание
int rename(string oldname, string newname);
rewind
rewind -- rewind the position of a file pointer
Описание
int rewind(int fp);
rmdir
rmdir -- удалить директорию
Описание
int rmdir(string dirname);
stat
stat -- информация о файле
Описание
array stat(string filename);
* - тоьлко для систем, поддерживающих тип
st_blksize -- в других системах (i.e. Windows)
возвращается -1
lstat
lstat -- информация о файле или символической
ссылке
Описание
array lstat(string filename);
* - тоьлко для систем, поддерживающих тип
st_blksize -- в других системах (i.e. Windows)
возвращается -1
symlink
symlink -- создать символическую ссылку
Описание
int symlink(string target, string link);
tempnam
tempnam -- создать уникальное имя файла
Описание
string tempnam(string dir, string prefix);
$tmpfname = tempnam( "/tmp", "FOO" );
touch
touch -- установить время модификации файла
Описание
int touch(string filename, int time);
umask
umask -- изменить текущую umask
Описание
int umask(int mask);
unlink
unlink -- удалить файл
Описание
int unlink(string filename);
Функции, связанные с HTTP
header
header -- послать необработанный заголовок HTTP
Описание
int header(string string);
Замечание: Помните, что функция Header()
должна быть вызвана перед любыми другими
операциями вывода, описанными стандартными
тэгами HTML или PHP. Наиболее общие ошибки в
коде - применение include()
с auto_prepend и пробелами или пустыми строками,
которые инициируеют вывод до вызова header().
Header("Location: http://www.php.net"); /* Редирект браузера на сайт PHP */
exit; /* Код, следующий ниже, не будет исполняться после редиректа. */
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("TestCookie","Test Value");
SetCookie("TestCookie",$value,time()+3600); /* истекает через час */
SetCookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);
echo $TestCookie;
Функции работы с Hyperwave
Вступление
Интеграция с Apache
RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]
RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]
RewriteEngine on
Замечания
hw_Changeobject
Описание
int hw_changeobject(int connection, int
object_to_change, string commands);
<addcmd> |
<remcmd> "\" <addcmd>
<remcmd> ::= "rem " <attribute> "=" <value>
<addcmd> ::= "add " <attribute> "=" <value>
Заметим, что в запросе на удаление или
перемещение атрибута, его старое значение
также поддерживается (некоторые атрибуты
могут иметь одновременно несколько
значений). Команда, подобная rem
attr=value\add attr=value позводяет модифицировать
атрибуты за одну операцию.
hw_Children
Описание
array hw_children(int connection, int
objectID);
hw_ChildrenObj
Описание
array hw_childrenobj(int connection, int
objectID);
hw_Close
Описание
int hw_close(int connection);
hw_Connect
Описание
int hw_connect(string host, int port, string
username, string password);
hw_Cp
Описание
int hw_cp(int connection, array
object_id_array, int destination id);
hw_Deleteobject
Описание
int hw_deleteobject(int connection, int
object_to_delete);
hw_DocByAnchor
Описание
int hw_docbyanchor(int connection, int
anchorID);
hw_DocByAnchorObj
Описание
string hw_docbyanchorobj(int connection, int
anchorID);
hw_DocumentAttributes
Описание
string hw_documentattributes(int
hw_document);
hw_DocumentBodyTag
Описание
string hw_documentbodytag(int hw_document);
hw_DocumentSize
Описание
int hw_documentsize(int hw_document);
hw_ErrorMsg
Описание
string hw_errormsg(int connection);
hw_EditText
Описание
int hw_edittext(int connection, int
hw_document);
hw_Error
Описание
int hw_error(int connection);
hw_Free_Document
Описание
int hw_free_document(int hw_document);
hw_GetParents
Описание
array hw_getparentsobj(int connection, int
objectID);
hw_GetParentsObj
Описание
array hw_getparentsobj(int connection, int
objectID);
hw_GetChildColl
Описание
array hw_getchildcoll(int connection, int
objectID);
hw_GetChildCollObj
Описание
array hw_getchildcollobj(int connection, int
objectID);
hw_GetSrcByDestObj
Описание
array hw_getsrcbydestobj(int connection, int
objectID);
hw_GetObject
Описание
array hw_getobject(int connection, int
objectID);
hw_GetAndLock
Описание
string hw_getandlock(int connection, int
objectID);
hw_GetText
Описание
int hw_gettext(int connection, int objectID,
int rootID);
hw_GetObjectByQuery
Описание
array hw_getobjectbyquery(int connection,
string query, int max_hits);
hw_GetObjectByQueryObj
Описание
array hw_getobjectbyqueryobj(int connection,
string query, int max_hits);
hw_GetObjectByQueryColl
Описание
array hw_getobjectbyquerycoll(int
connection, int objectID, string query, int max_hits);
hw_GetObjectByQueryCollObj
Описание
array hw_getobjectbyquerycollobj(int
connection, int objectID, string query, int max_hits);
hw_GetChildDocColl
Описание
array hw_getchilddoccoll(int connection, int
objectID);
hw_GetChildDocCollObj
Описание
array hw_getchilddoccollobj(int connection,
int objectID);
hw_GetAnchors
Описание
array hw_getanchors(int connection, int
objectID);
hw_GetAnchorsObj
Описание
array hw_getanchorsobj(int connection, int
objectID);
hw_Mv
Описание
int hw_mv(int connection, array object id
array, int source id, int destination id);
hw_Identify
Описание
int hw_identify(string username, string
password);
hw_InCollections
Описание
array hw_incollections(int connection, array
object_id_array, array collection_id array, int return_collections);
hw_Info
Описание
string hw_info(int connection);
hw_InsColl
Описание
int hw_inscoll(int connection, int objectID,
array object_array);
hw_InsDoc
Описание
int hw_insdoc(int connection, int parentID,
string object_record, string text);
hw_InsertDocument
Описание
int hw_putdocument(int connection, int
parent_id, int hw_document);
hw_New_Document
Описание
int hw_new_document(string document_data,
string object_record, int document_size);
hw_Objrec2Array
Описание
array hw_objrec2array(string object_record);
hw_OutputDocument
Описание
int hw_outputdocument(int hw_document);
hw_pConnect
Описание
int hw_pconnect(string host, int port,
string username, string password);
hw_PipeDocument
Описание
int hw_pipedocument(int connection, int
objectID);
hw_Root
Описание
int hw_root();
hw_Unlock
Описание
int hw_unlock(int connection, int objectID);
hw_Username
Описание
string hw_getusername(int connection);
Функции работы с изображениями
GetImageSize
GetImageSize -- получение размеров GIF, JPG или PNG
изображений
Описание
array getimagesize(string filename, array [imageinfo]);
<?php $size = GetImageSize("img/flag.jpg"); ?>
<IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>>
<?php
$size = GetImageSize("testimg.jpg",&$info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>
ImageArc
ImageArc -- рисует часть эллипса
Описание
int imagearc(int im, int cx, int cy, int w, int h, int s, int e,
int col);
ImageChar
ImageChar -- рисует символы горизонтально
Описание
int imagechar(int im, int font, int x, int y, string c, int col);
ImageCharUp
ImageCharUp -- рисует символы вертикально
Описание
int imagecharup(int im, int font, int x, int y, string c, int col);
ImageColorAllocate
ImageColorAllocate -- определяет цвет изображения
Описание
int imagecolorallocate(int im, int red, int green, int blue);
$white = ImageColorAllocate($im, 255,255,255);
$black = ImageColorAllocate($im, 0,0,0);
ImageColorTransparent
ImageColorTransparent -- определить цвет как
прозрачный
Описание
int imagecolortransparent(int im, int [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);
ImageCreate
ImageCreate -- создать новое изображение
Описание
int imagecreate(int x_size, int y_size);
ImageCreateFromGif
ImageCreateFromGif -- создать новое изображение из
файла или URL
Описание
int imagecreatefromgif(string filename);
ImageDashedLine
ImageDashedLine -- нарисовать пунктирную линию
Описание
int imagedashedline(int im, int x1, int y1, int x2, int y2, int
col);
ImageDestroy
ImageDestroy -- уничтожить изображение
Описание
int imagedestroy(int im);
ImageFill
ImageFill -- заливка
Описание
int imagefill(int im, int x, int y, int col);
ImageFilledPolygon
ImageFilledPolygon -- нарисовать закрашенный
многоугольник
Описание
int imagefilledpolygon(int im, array points, int num_points, int
col);
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);
ImageFillToBorder
ImageFillToBorder -- заливка до указанного цвета
Описание
int imagefilltoborder(int im, int x, int y, int border, int col);
ImageFontHeight
ImageFontHeight -- узнать высоту шрифта
Описание
int imagefontheight(int font);
ImageFontWidth
ImageFontWidth -- узнать ширину шрифта
Описание
int imagefontwidth(int font);
ImageGif
ImageGif -- вывести изображение на браузер или в
файл
Описание
int imagegif(int im, string filename);
ImageInterlace
ImageInterlace -- включение/выключение чередования
(interlace)
Описание
int imageinterlace(int im, int [interlace]);
ImageLine
ImageLine -- нарисовать линию
Описание
int imageline(int im, int x1, int y1, int x2, int y2, int col);
ImageLoadFont
ImageLoadFont -- загрузить новый шрифт
Описание
int imageloadfont(string file);
позиция байта
тип данных C
Описание
байты 0-3
int
число символов в шрифте
байты 4-7
int
значение первого
символа в шрифте (часто 32 для пробела)
байты 8-11
int
ширина символов в
пикселах
байты 12-15
int
высота символов в
пикселах
байты 16-
char
массив с данными на
символы, один байт на пиксел, для
каждого символа - nchars*width*height.
ImagePolygon
ImagePolygon -- нарисовать многоугольник
Описание
int imagepolygon(int im, array points, int num_points, int col);
ImageRectangle
ImageRectangle -- нарисовать прямоугольник
Описание
int imagerectangle(int im, int x1, int y1, int x2, int y2, int
col);
ImageSetPixel
ImageSetPixel -- установить один пиксел
Описание
int imagesetpixel(int im, int x, int y, int col);
ImageString
ImageString -- нарисовать строку горизонтально
Описание
int imagestring(int im, int font, int x, int y, string s, int col);
ImageStringUp
ImageStringUp -- нарисовать строку вертикально
Описание
int imagestringup(int im, int font, int x, int y, string s, int
col);
ImageSX
ImageSX -- get image width
Описание
int imagesx(int im);
ImageSY
ImageSY -- узнать высоту изображения
Описание
int imagesy(int im);
ImageTTFBBox
ImageTTFBBox -- установить границы области для
текста, где используются шрифты TypeType
Описание
array ImageTTFBBox(int size, int angle, string fontfile, string
text);
ImageTTFBBox() возвращает
массив из 8-и элементов, представляющих
четыре точки границы области текста:
0
нижний левый угол,
позиция X
1
нижний левый угол,
позиция Y
2
нижний правый угол,
позиция X
3
нижний правый угол,
позиция Y
4
верхний правый угол,
позиция X
5
верхний правый угол,
позиция Y
6
верхний левый угол,
позиция X
7
верхний левый угол,
позиция Y
ImageTTFText
ImageTTFText -- впсать текст в изображение,
используя TrueType шрифт
Описание
array ImageTTFText(int im, int size, int angle, int x, int y, int
col, string fontfile, string text);
<?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: Ω");
ImageGif($im);
ImageDestroy($im);
?>
ImageColorAt
ImageColorAt -- узнать индекс цвета пиксела
Описание
int imagecolorat(int im, int x, int y);
ImageColorClosest
ImageColorClosest -- узнать индекс цвета, ближайшего
заданному
Описание
int imagecolorclosest(int im, int red, int green, int blue);
ImageColorExact
ImageColorExact -- узнать индекс указанного цвета
Описание
int imagecolorexact(int im, int red, int green, int blue);
ImageColorResolve
ImageColorResolve -- узнать индекс указанного цвета
или его ближайшую возможную альтернативу
Описание
int imagecolorresolve(int im, int red, int green, int blue);
ImageColorSet
ImageColorSet -- установить цвет для указанного
индекса в палитре
Описание
bool imagecolorset(int im, int index, int red, int green, int
blue);
ImageColorsForIndex
ImageColorsForIndex -- узнать цвет по индексу
Описание
array imagecolorsforindex(int im, int index);
ImageColorsTotal
ImageColorsTotal -- количество цветов в палитре
изображения
Описание
int imagecolorstotal(int im);
Функции IMAP
imap_append
Описание
int imap_append(int imap_stream, string mbox, string message, stringflags);
imap_base64
Описание
string imap_base64(string text);
imap_body
Описание
string imap_body(int imap_stream, int msg_number, int flags);
FT_PEEK - Не устанавливать флаг \Seen если он еще
не установлен.
FT_INTERNAL - Возвращаемая строка записана во
внутреннем формате и не может быть
приведена к канонической форме с CRLF.
imap_check
Описание
array imap_check(int imap_stream);
Driver : драйвер
Mailbox : название почтового ящика
Nmsgs : количество сообщений
Recent : количество недавно пришедших
сообщений
imap_close
Описание
int imap_close(int imap_stream, int flags);
imap_createmailbox
Описание
int imap_createmailbox(int imap_stream, string mbox);
imap_delete
Описание
int imap_delete(int imap_stream, int msg_number);
Функция imap_delete() помечает сообщение,
указанное через msg_number на удаление.
Настоящее удаление сообщений
осуществляется функцией imap_expunge().
imap_deletemailbox
Описание
int imap_deletemailbox(int imap_stream, string mbox);
imap_expunge
Описание
int imap_expunge(int imap_stream);
imap_fetchbody
Описание
string imap_fetchbody(int imap_stream, int msg_number, int part_number, flags flags);
FT_UID - msgono является UID'ом
FT_PEEK - не устанавливать флаг \Seen если он не
установлен
FT_UID - возвращаемая строка записана во
внутреннем формате, которое не может быть
канонизированна с помощью CRLF
imap_fetchstructure
Описание
array imap_fetchstructure(int imap_stream, int msg_number);
type
encoding
ifsubtype
subtype
ifdescription
description
ifid
id
lines
bytes
ifparameters
тип
кодировка
подтип интерфейса
подтип
описание интерфейса
описание
идентификатор интерфейса
идентификатор
строки
байты
параметры интерфейса
attribute
value
атрибут
величина
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
Описание
array imap_headers(int imap_stream);
imap_listmailbox
Описание
array imap_listmailbox(int imap_stream, string ref, string pat);
imap_listsubscribed
Описание
array imap_listsubscribed(int imap_stream, string ref, string pattern);
imap_mail_copy
Описание
int imap_mail_copy(int imap_stream, string msglist, string mbox, int flags);
CP_UID - номера в последовательности содержат
UID'ы
CP_MOVE - после копирования удалить сообщения
из текущего почтового ящика
imap_mail_move
Описание
int imap_mail_move(int imap_stream, string msglist, string mbox);
imap_num_msg
Описание
int imap_num_msg(void);
imap_num_recent
Описание
int imap_num_recent(int imap_stream);
imap_open
Описание
int imap_open(string mailbox, string username, string password, int flags);
$mbox = imap_open("{localhost:143}INBOX","user_id","password");
$mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password");
$nntp = imap_open("{localhost/nntp:119}comp.test","","");
OP_READONLY - Открыть почтовый ящик в режим "только
чтение"
OP_ANONYMOUS - Не использовать или не обновлять
.newsrc при использовании новостей
OP_HALFOPEN - Для IMAP и NNTP устанавливает
соединение, но не открывает почтовый ящик
CL_EXPUNGE - Автоматически очищать почтовый
ящик при закрытии
imap_ping
Описание
int imap_ping(int imap_stream);
imap_renamemailbox
Описание
int imap_renamemailbox(int imap_stream, string old_mbox, string new_mbox);
imap_reopen
Описание
int imap_reopen(string imap_stream, string mailbox, string [flags]);
OP_READONLY - Открыть почтовый ящик в режиме
только чтение
OP_ANONYMOUS - Не использовать или не обновлять
.newsrc при работе с новостями
OP_HALFOPEN - Для IMAP и NNTP устанавливает связь но
не открывает почтовый ящик
CL_EXPUNGE - Очищает почтовый ящик при закрытии
imap_subscribe
Описание
int imap_subscribe(int imap_stream, string mbox);
imap_undelete
Описание
int imap_undelete(int imap_stream, int msg_number);
imap_unsubscribe
Описание
int imap_unsubscribe(int imap_stream, string mbox);
imap_qprint
Описание
string imap_qprint(string string);
imap_8bit
Описание
string imap_8bit(string string);
imap_binary
Описание
string imap_binary(string string);
imap_scanmailbox
Описание
array imap_scanmailbox(int imap_stream, string string);
imap_mailboxmsginfo
Описание
array imap_mailboxmsginfo(int imap_stream);
Date : дата сообщения
Driver : драйвер
Mailbox : название почтового ящика
Nmsgs : количество сообщений
Recent : количество недавно пришедших
сообщений
Unread : количество непрочитанных сообщений
Size : размер почтового ящика
imap_rfc822_write_address
Описание
string imap_rfc822_write_address(string mailbox, string host, string personal);
imap_rfc822_parse_adrlist
Описание
string imap_rfc822_parse_adrlist(string address, string default_host);
mailbox - название почтового ящика (имя
пользователя)
host - название хоста
personal - личное имя
adl - путь к домену-источнику
imap_setflag_full
Описание
string imap_setflag_full(int stream, string sequence, string flag, string options);
ST_UID Аргументы последовательности
содержат UIDы вместо номеров
imap_clearflag_full
Описание
string imap_clearflag_full(int stream, string sequence, string flag, string options);
ST_UID Аргументы последовательности
содержат UIDы вместо номеров
imap_sort
Описание
string imap_sort(int stream, int criteria, int reverse, int options);
SORTDATE по дате сообщения
SORTARRIVAL по дате поступления
SORTFROM по полю From
SORTSUBJECT по теме сообщения
SORTTO по полю To
SORTCC по полю cc
SORTSIZE по размеру
опции - битовая маска из
SE_UID Возвратить UIDы вместо номеров
последовательности
SE_NOPREFETCH Не извелекать заранее найденные
сообщения
imap_fetchheader
Описание
stringimap_fetchheader(int imap_stream, int msgno, int flags);
FT_UID msgno является UID'ом
FT_INTERNAL Возвращаемая строка записана во
внутреннем формате без каких-либо попыток
канонизировать ее с помощью CRLF
FT_PREFETCHTEXT RFC822. Текст должен быть
предварительно разобран. Это поможет
избежать эстренных задержек если
требуется извлечь полный текст сообщения (например,
в операции "сохранить в локальном файле")
imap_uid
Описание
string imap_uid(string mailbox, int msgno);
PHP опции и информация
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.
// Послать сообщение в системный лог, если не получено соединение с базой данных
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
Описание
значение
внутреннее имя
1
E_ERROR
2
E_WARNING
4
E_PARSE
8
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
getenv
Описание
$ip = getenv("REMOTE_ADDR"); // получить ip номер пользователя
get_cfg_var
Описание
get_current_user
Описание
get_magic_quotes_gpc
Описание
get_magic_quotes_runtime
Описание
getlastmod
Описание
// выводит что-то вроде этого 'Последнее изменение: March 04 1998 20:43:59.'
echo "Последнее изменение: ".date( "F d Y H:i:s.", getlastmod() );
getmyinode
Описание
getmypid
Описание
getmyuid
Описание
phpinfo
Описание
phpversion
Описание
// Печатает что-то вроде этого 'Текущая версия PHP: 3.0rel-dev'
echo "Текущая версия PHP: ".phpversion();
putenv
Описание
putenv("UNIQID=$uniqid");
set_magic_quotes_runtime
Описание
set_time_limit
Описание
Функции работы с Informix
ifx_connect
Описание
int ifx_connect(string [database],
string [userid], string [password]);
$conn_id = ifx_pconnect (mydb@ol_srv1, "imyself", "mypassword");
ifx_pconnect
Описание
int ifx_pconnect(string [database],
string [userid], string [password]);
ifx_close
Описание
int ifx_close(int [link_identifier]);
$conn_id = ifx_connect (mydb@ol_srv, "itsme", "mypassword");
... несколько запросов и др. ...
ifx_close($conn_id);
ifx_query
Описание
int ifx_query(string query, int [link_identifier],
int [cursor_type], mixed [blobidarray]);
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);
// создание идентификаторов 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
Описание
int ifx_prepare(string query, int conn_id,
int [cursor_def], mixed blobidarray);
ifx_do
Описание
int ifx_do(int result_id);
ifx_error
Описание
string ifx_error(void);
ifx_errormsg
Описание
string ifx_errormsg(int [errorcode]);
printf("%s\n<br>", ifx_errormsg(-201));
ifx_affected_rows
Описание
int ifx_affected_rows(int result_id);
$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
Описание
array ifx_fetch_row(int result_id, mixed [position]);
$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
Описание
int ifx_htmltbl_result(int result_id, string
[html_table_options]);
$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
Описание
array ifx_fieldtypes(int result_id);
$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);
}
Описание
array ifx_fieldproperties(int result_id);
$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
Описание
int ifx_num_fields(int result_id);
ifx_num_rows
Описание
int ifx_num_rows(int result_id);
ifx_free_result
Описание
int ifx_free_result(int result_id);
ifx_create_char
Описание
int ifx_create_char(string param);
ifx_free_char
Описание
int ifx_free_char(int bid);
ifx_update_char
Описание
int ifx_update_char(int bid, string
content);
ifx_get_char
Описание
int ifx_get_char(int bid);
ifx_create_blob
Описание
int ifx_create_blob(int type, int mode,
string param);
ifx_copy_blob
Описание
int ifx_copy_blob(int bid);
ifx_free_blob
Описание
int ifx_free_blob(int bid);
ifx_get_blob
Описание
int ifx_get_blob(int bid);
ifx_update_blob
Описание
ifx_update_blob(int bid, string content);
ifx_blobinfile_mode
Описание
void ifx_blobinfile_mode(int mode);
ifx_textasvarchar
Описание
void ifx_textasvarchar(int mode);
ifx_byteasvarchar
Описание
void ifx_byteasvarchar(int mode);
ifx_nullformat
Описание
void ifx_nullformat(int mode);
ifxus_create_slob
Описание
int ifxus_create_slob(int mode);
ifx_free_slob
Описание
int ifxus_free_slob(int bid);
ifxus_close_slob
Описание
int ifxus_close_slob(int bid);
ifxus_open_slob
Описание
int ifxus_open_slob(long bid, int mode);
ifxus_tell_slob
Описание
int ifxus_tell_slob(long bid);
ifxus_seek_slob
Описание
int ifxus_seek_blob(long bid, int mode, long
offset);
ifxus_read_slob
Описание
int ifxus_read_slob(long bid, long nbytes);
ifxus_write_slob
Описание
int ifxus_write_slob(long bid, string
content);
Функции работы с InterBase
ibase_connect
Описание
ibase_connect( );
ibase_pconnect
Описание
ibase_pconnect( );
ibase_close
Описание
ibase_close( );
ibase_query
Описание
ibase_query( );
ibase_fetch_row
Описание
ibase_fetch_row( );
ibase_free_result
Описание
ibase_free_result( );
ibase_prepare
Описание
ibase_prepare( );
ibase_bind
Описание
ibase_bind( );
ibase_execute
Описание
ibase_execute( );
ibase_free_query
Описание
ibase_free_query( );
ibase_timefmt
Описание
ibase_timefmt( );
LDAP функции
Введение в LDAP
organization = My Company
organizationalUnit = Accounts
commonName = John Smith
<?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_bind() // анонимный
или идентифицируемый "вход"
|
действия подобные поиску или
обновлению каталога
с выводом результата
|
ldap_close() // "выход"
Дополнительная информация
ldap_add
Описание
(целочисленный link_identifier,
строковое dn, массив записи);
запись["атрибут2"][0] = значение1
запись["атрибут2"][1] = значение2
<?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
Описание
(целое link_identifier, строковое
bind_rdn, строковое bind_password);
ldap_close
Описание
(целое link_identifier);
ldap_connect
Описание
(строковое hostname, целое port);
ldap_count_entries
Описание
(целое link_identifier, целое
result_identifier);
ldap_delete
Описание
(целое link_identifier, строковое
dn);
ldap_dn2ufn
Описание
(строковое dn);
ldap_explode_dn
Описание
(строковое dn, целое
with_attrib);
ldap_first_attribute
Описание
(целое link_identifier, целое
result_entry_identifier, целое ber_identifier);
ldap_first_entry
Описание
(целое link_identifier, целое
result_identifier);
ldap_free_result
Описание
(целое result_identifier);
ldap_get_attributes
Описание
(целое link_identifier, целое
result_entry_identifier);
return_value[0] = первый атрибут
return_value[n] = n-ый атрибут
return_value["attribute"]["count"] = количество
значений атрибута
return_value["attribute"][0] = первое
значение атрибута
return_value["attribute"][i] = i-тое значение
атрибута
// $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_get_dn
Описание
(целое link_identifier, целое
result_entry_identifier);
ldap_get_entries
Описание
(целое link_identifier, целое
result_identifier);
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_get_values
Описание
(целое link_identifier, целое
result_entry_identifier, строковое attribute);
return_value[0] = первое значение атрибута
return_value[i] = i-тое значение атрибута
// $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
Описание
(целое link_identifier, строковое
base_dn, строковое filter);
// $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
Описание
(целое link_identifier, строковое dn,
массив entry);
ldap_next_attribute
Описание
(целое link_identifier, целое
result_entry_identifier, целое ber_identifier);
ldap_next_entry
Описание
(целое link_identifier, целое
result_entry_identifier);
ldap_read
Описание
(целое link_identifier, строка base_dn,
строка filter, массив [attributes]);
ldap_search
Описание
(целое link_identifier, строковое
base_dn, строковое filter, массив [attributes]);
// $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>";
error_reporting (0); // выключает
предупреждение!
$sr = ldap_search ($ds, $dn, $searchfor);
$normerr = error_reporting ($normerr);
if (!$sr) {
print "слишком много
записей!";
} else .....
ldap_unbind
Описание
(целое link_identifier);
Почтовые функции
mail
mail -- шлет почту
Описание
bool mail(string to, string subject, string message, string
additional_headers);
Mail() автоматически посылает сообщение,
содержащееся в message адресату, указанному в
to.
Несколько получателей могут быть указаны в
поле to в виде строки с адресами,
разделенными пробелами.
Пример 1. Посылка почты.
mail("rasmus@lerdorf.on.ca", "Моя тема", "Строка
1\nСтрока 2\nСтрока 3");
mail("ssb@guardian.no", "the subject", $message,
"From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer:
PHP/" . phpversion());
Математические функции
Введение
Математические константы
Константа
Величина
Описание
M_PI
3.14159265358979323846
Значение ¶ (pi)
Abs
Описание
mixed abs(mixed number);
Acos
Описание
float acos(float arg);
Asin
Atan
Описание
float atan(float arg);
Atan2
Описание
float atan2(float y, float x);
base_convert
Описание
strin base_convert(string number, int
frombase, int tobase);
$binary = base_convert($hexadecimal, 16, 2);
BinDec
Описание
int bindec(string binary_string);
Ceil
Описание
int ceil(float number);
Cos
DecBin
Описание
string decbin(int number);
DecHex
Описание
string dechex(int number);
DecOct
Описание
string decoct(int number);
Exp
Floor
Описание
int floor(float number);
getrandmax
Описание
int getrandmax(void );
HexDec
Описание
int hexdec(string hex_string);
Log
Описание
float log(float arg);
Log10
Описание
float log10(float arg);
max
Описание
mixed max(mixed arg1, mixed arg2, mixed
argn);
min
Описание
mixed min(mixed arg1, mixed arg2, mixed
argn);