Справочник по PHP : Управляющие функции : Управление исполнением сценария PHP : Дополнительные функции
смотрим также
Материал из Справочник Web-языков
Содержание |
get_browser
Определение возможностей браузера.
Синтаксис:
object get_browser([string user_agent]);
Возвращаемая информация извлекается из файла browscap.ini. Для определения браузера используется значение переменной $HTTP_USER_AGENT или значение, содержащееся в аргументе user_agent.
Информация возвращается в виде свойств объекта и отражает возможности клиентского браузера (например, версию, поддерживает ли он javascript или cookies).
<?php function list_array($array) { while (list ($key, $val) == each ($array)) { $str .= "$key: $val
n"; } return $str; } echo "$HTTP_USER_AGENT
";$bouser = get_browser(); echo list_array ((array) $browser);
?>
Содержимое возможного вывода:
Mozilla/4.5 [en] (X11: Linux 2.2.9 i586)<hr> <b>browser_name_pattern:</b>Mozilla/4.5.*<br> <b>parent:</b>Netscape<br> <b>platform:</b>Unknown<br> <b>majorver:</b>4<br> <b>minorver:</b>5<br> <b>browser:</b>Netscape<br> <b>version:</b>4<br> <b>frames:</b>1<br> <b>tables:</b>1<br> <b>cookies:</b>1<br> <b>backgroundsounds:</b> <br> <b>vbscript:</b> <br> <b>javascript:</b>1<br> <b>javaapplets:</b>1<br> <b>activexcontrols:</b> <br> <b>beta:</b> <br> <b>crawler:</b> <br> <b>authenticodeupdate:</b> <br> <b>msn:</b> <br>
Для того чтобы функция могла функционировать, следует правильно указать месторасположение файла browscan.ini в файле конфигурации.
highlight_file
Вывод содержимого файла с цветовой разметкой.
Синтаксис:
boolean highlight_file(string filename);
Имя или путь файла указывается в аргументе. Цвета выделения синтаксиса определяются в файле конфигурации PHP. Возвращает true или false при ошибке.
Например, чтобы заставить сервер Apache при получении запроса с URL, содержащего значение вида "https://имя.сервера/source/путь/к/файлу.php", выводит листинг файла "https://имя.сервера/source/путь/к/файлу.php", сделайте следующее. Добавьте в файл httpd.conf следующий фрагмент:
# Используем директиву "ForceType" чтобы указать, # что значение source в URL - не каталог, а имя сценария PHP <Location /source> ForceType application/x-httpd-php </Location>
Создайте в корневом web-каталоге следующий файл с именем source:
Source Display <?php $script = getenv ("PATH_TRANSLATED"); if(!$script) { echo "
ERROR: Укажите имя сценария
"; } else { if(ereg("(.php|.inc)$",$script)) { echo "Листинг файла: $PATH_INFOn
n";if(!@highlight_file($script)) echo "Ошибка вывода файла"; } else {echo "ERROR: Показываются только листинги PHP файлов
";}}
echo "
Распечатано: ".date("Y/M/d H:i:s",time());?>
highlight_string
Выделение строки цветом.
Синтаксис:
void highlight_string(string str);
Функция действует подобно highlight_file(), но использует не содержимое файла, а указанной строки.
show_source
Синоним функции highlight_file.
Синтаксис:
boolean show_source(string str);
pack
Пакетирование данных в двоичную строку.
Синтаксис:
string pack(string format [,mixed $args, ...]);
Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования - наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a,A,h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находится в очередном параметре-строке при вызове функции (то есть, определяет размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные.
Вот полный список спецификаторов формата:
- a - строка, свободные места в поле заполняются символом с кодом 0;
- A - строка, свободные места заполняются пробелами;
- h - шестнадцатиричная строка, младшие разряды в начале;
- H - шестнадцатиричная строка, старшие разряды в начале;
- c - знаковый байт (символ);
- C - без знаковый байт;
- s - знаковое короткое целое (16 битов порядок байтов определяется архитектурой процессора);
- S - беззнаковое короткое число;
- n - беззнаковое целое (16 битов, старшие разряды в конце);
- v - беззнаковое целое (16 битов, младшие разряды в конце);
- i - знаковое целое (размер и порядок байтов определяется архитектурой);
- I - беззнаковое целое;
- l - знаковое длинное целое (32 бита, порядок знаков определяется архитектурой);
- L - беззнаковое длинное целое;
- N - беззнаковое длинное целое (32 бита, старшие разряды в конце);
- V - беззнаковое целое (32 бита, младшие разряды в конце);
- f - число с плавающей точкой (зависит от архитектуры);
- d - число с плавающей точкой двойной точности (зависит от архитектуры);
- x - символ с нулевым кодом;
- X - возврат назад на 1 байт;
- @ - заполнение нулевым кодом до заданной абсолютной позиции.
// Целое, целое, все остальное - сиволы $bindata = pack("nvc*", 0x1234, 0x5678, 65, 66);
После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности: 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатиричной системе счисления).
unpack
Распаковывает данные из двоичной строки.
Синтаксис:
array unpack(string format, string data);
Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий распакованные элементы.
$array = unpack("c2chars/nint", $binarydata);
Возникающий в результате массив будет содержать "chars1", "chars2" и "int".
iptcparse
Анализирует двоичный IPTC блок на одиночные тэги.
Синтаксис:
array iptcparse(string iptcblock);
Эта функция анализирует двоичный блок IPTC на одиночные теги. Возвращает массив, использующий tagmarker как индекс и значение как значение. Возвращает false при ошибке или если никаких IPTC данных не было найдено.
leak
Имитация утечки памяти.
Синтаксис:
void leak(int bytes);
leak() отсекает определенный объем памяти.
Это полезно при отладке диспетчера памяти, который автоматически очищает "отсеченную" память при выполнении запроса.
Размер блока памяти указывается в байтах аргументом bytes.
serialize
Генерирует удобохраниемое представление значения.
Синтаксис:
string serialize(mixed value);
serialize() возвращает строку состоящую из потока байтов при представлении значения value, которое может где-нибудь сохранено.
Это полезно для сохранения или передачи значений PHP без потери их типа и структуры.
Пример:
//$session_data содержит многомерный массив с информацией о сессии //текущего пользователя. Мы используем serialize() для сохранения //этого в базе данных в конце запроса. $conn = odbc_connect("webdb", "php", "chicken"); $stmt = odbc_prepare($conn, "UPDATE sessions SET data = ? WHERE id = ?"); $sqldata = array(serialize($session_data), $PHP_AUTH_USER); if (!odbc_execute($stmt, &$sqldata)) { $stmt = odbc_prepare($conn, INSERT INTO sessions (id, data) VALUES(?, ?)"); if (!odbc_execute($stmt, &$sqldata)) { /* Что-то сделано неправильно. */ } }
unserialize
Создает PHP значение из сохраненного представления.
Синтаксис:
mixed unserialize(string str);
unserialize() берет одно сохраненное значение и преобразует обратно в PHP значение. Возвращает преобразованное значение, и может иметь тип: integer, double, string, array или object. Если был преобразован object, то методы не востановятся.
Пример:
// Здесь мы используем unserialize() для загрузки данных о сессии из базы данных // в $session_data. Этот пример дополняет описанный в месте // с serialize() . $conn = odbc_connect("webdb", "php", "chicken"); $stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?"); $sqldata = array($PHP_AUTH_USER); if (!odbc_execute($stmt, &$sqldata) || !odbc_fetch_into($stmt, &$tmp)) { // Если сбой запуска или выборки , // то инициализируем массив $session_data = array(); } else { // Мы должны иметь представление в $tmp[0]. $session_data = unserialize($tmp[0]); if (!is_array($session_data)) { // Что-то неправильно, инициализируем массив $session_data = array(); } }
uniqid
Генерирует уникальный идентификатор.
Синтаксис:
int uniqid(string prefix [, boolean lcg]);
Функция uniqid() возвращает уникальный идентификатор, основанный на текущем времени в микросекундах и имеющий префикс prefix. Префикс может быть полезен, например, если Вы генерируете идентификаторы одновременно на отдельных хостах, которые, могли бы случилось, генерировали идентификатор в одной и той же микросекунде. Префикс может быть длиной до 114 символов. Если в качестве его значения передается пустая строка, то длина сгенерированного идентификатора будет 13 символов (при lcg=true - 23 символа).
Если указан необязательный аргумент lcg со значением true, к концу идентификатора будет добавляться "комбинированный хеш энтропии LCG", делающий его значение более уникальным.
Принято также дообрабатывать полученное значение криптографическими методами (например, это часто делается в идентификаторах сессий).
// без случайной части $token = md5(uniqid("")); // посложнее $better_token = md5(uniqid(rnad()));
Эти строки генерируют 32 байта (128-битное шестнадцатеричное число): они обладают максимальной унакальностью, которая только может потребоваться.