Приглашаем посетить
Бестужев-Марлинский (bestuzhev-marlinskiy.lit-info.ru)

Учебник по PHP : Управление исполнением сценария PHP : Дополнительные функции

Управление исполнением сценария PHP : Дополнительные функции

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 .= "<b>$key:</b> $val<br>\n";
  }
  return $str;
}

echo "$HTTP_USER_AGENT<hr>";
$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, содержащего значение вида "http://имя.сервера/source/путь/к/файлу.php", выводит листинг файла "http://имя.сервера/source/путь/к/файлу.php", сделайте следующее.
  • Добавьте в файл httpd.conf следующий фрагмент:
    # Используем директиву "ForceType" чтобы указать,
    # что значение source в URL - не каталог, а имя сценария PHP
    <Location /source>
      ForceType application/x-httpd-php
    </Location>
    
  • Создайте в корневом web-каталоге следующий файл с именем source:
    <HTML><HEAD>
    <TITLE>Source Display</TITLE>
    </HEAD>
    <BODY bgcolor=#FFEEDD>
    <?php
    $script = getenv ("PATH_TRANSLATED");
    if(!$script) {
      echo "<BR><B>ERROR: Укажите имя сценария</B><BR>";
    } else {
      if(ereg("(\.php|\.inc)$",$script)) {
        echo "<H!>Листинг файла: $PATH_INFO</H1>\n<hr>\n";
        if(!@highlight_file($script))
          echo "Ошибка вывода файла";
      } else {
        echo "<H1>ERROR: Показываются только листинги PHP файлов </H1>";
      }
    }
    echo "<HR>Распечатано: ".date("Y/M/d H:i:s",time());
    ?>
    </BODY>
    </HTML>
    

  • 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-битное шестнадцатеричное число): они обладают максимальной унакальностью, которая только может потребоваться.

    Назад Содержание Вперед