Руководство по РНР 3.0 - Дополнительные функции

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

eval

eval -- Производит выполнение строки содержащей PHP код
Описание
void eval(string code_str);
 
eval() производит выполнение строки, данной в code_str содержащей PHP код. Кстати, это может пригодиться для сохранения кода в текстовом поле базы данных для более позднего выполнения.

Имеются некоторые условия, которые надо иметь в виду при использовании eval(). Не забудьте, что переданная строка должна иметь допустимый PHP код, при включении чего-нибудь подобного завершению кода с точкой с запятой дальнейшее выполнение  не прервется  на строке после eval(), поэтому пропускайте это в code_str.

Также не забудьте, что при изменении переменных значений в eval() эти переменные будут изменены и в основных данных.
 
Пример 1. eval()  - простое объединение текста
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
      

При выполнении вышеприведенного примера будет выведено следующее:

This is a $string with my $name in it.
This is a cup with my coffee in it.

die

die -- Вывод сообщения и завершение текущего скрипта
Описание
void die(string message);
 
Эта функция выводит сообщение и прекращает выполнение текущего скрипта. Не возвращает значение.
 
Пример 1. die 
<?php
$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
  or die "unable to open file ($filename)";
?>
      

exit

exit -- Завершает текущий скрипт
Описание
void exit(void);
 
Эта функция завершает текущий скрипт.  Не возвращает значение.

iptcparse

iptcparse -- Анализирует двоичный IPTC http://www.xe.net/iptc/ блок на одиночные тэги.
Описание
array iptcparse(string iptcblock);
 
Эта функция анализирует двоичный блок IPTC на одиночные теги.  Возвращает массив, использующий tagmarker как индекс и значение как значение. Возвращает false при ошибке или если никаких IPTC данных не было найдено. См. GetImageSize() для примера.

leak

leak -- Отсечение куска памяти
Описание
void leak(int bytes);
 
Leak() отсекает определенный объем памяти.

Это полезно при отладке диспетчера памяти, который автоматически очищает "отсеченную" память при выполнении запроса.


pack

pack -- упаковывает данные в двоичную строку
Описание
string pack(string format, mixed [ args ]...);
 
Упаковывает данные в двоичную строку согласно формату. Возвращает двоичную строку, содержащую данные.

Идея на эту функцию принималась из Perl и всей работы кодов форматирования также как там. Строка формата состоит из кодов формата, сопровождаемые факультативным параметром ретранслятора. Параметр ретранслятора может быть или целочисленное значение или * для повторение до конца входных данных. Для a, A, h, H количество повторов определяет, сколько принимается символов одного параметра данных, для @ это безусловная позиция, где поместить следующие данные, для всего остального количество повторов определяет сколько данных будет использовано и упаковано в возникающую в результате двоичную строку. В настоящее время выполнено:
 

    a строка NUL-заполнений

    A строка SPACE-заполнений

    h Hex строка, младший полубайт вначале

    H Hex строка, старший полубайт вначале

    c signed char

    C unsigned char

    s signed short (всегда 16 бит, machine byte order)

    S unsigned short (всегда 16 бит, machine byte order)

    n unsigned short (всегда 16 бит, big endian byte order)

    v unsigned short (всегда 16 бит, little endian byte order)

    i signed integer (machine dependant размер и byte order)

    I unsigned integer (machine dependant размер и byte order)

    l signed long (всегда 32 бит, machine byte order)

    L unsigned long (всегда 32 бит, machine byte order)

    N unsigned long (всегда 32 бит, big endian byte order)

    V unsigned long (всегда 32 бит, little endian byte order)

    f float (machine dependent размер и representation)

    d double (machine dependent размер и representation)

    x NUL байт

    X Копирует один байт

    @ NUL-Заполнение до конкретной позиции

Пример 1. pack форматируем строку
$binarydata = pack(" nvc* ", 0x1234, 0x5678, 65, 66);
Возникающая в результате двоичная строка будет длиной 6 байтов и содержать последовательность байтов 0x12, 0x34, 0x78, 0x56, 0x41, 0x42. 

Обратите внимание, что различие между знаковыми и без знаковыми значениями эффективно только для функции unpack(), так как  функция pack() дает тот же самый результат для знаковых и без знаковых кодов форматирования.

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


register_shutdown_function

register_shutdown_function -- Устанавливает функцию, которая будет выполнена при завершении.
Описание
int register_shutdown_function(string func);
 
Устанавливает функцию с именем func, которая будет выполнена при завершении.

serialize

serialize -- Генерирует удобохраниемое представление значения
Описание
string serialize(mixed value);
 
serialize() возвращает строку состоящую из потока байтов при представлениизначения value, которое может где-нибудь сохранено.

Это полезно для сохранения или передачи значений PHP  без потери их типа и структуры..

Чтобы преобразовать строку обратно в PHP значение, используйте unserialize(). serialize() обрабатывает следующие типы:  integer double string array (многомерный) и  object (объект будет преобразован в последовательную форму, но методы при этом будут утеряны).
 
Пример 1. serialize 
// $session_data содержит многомерный массив с информацией о сессии 
// текущего пользователя.  Мы используем serialize() для сохранения
// этого в базе данных в конце запроса.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
                     "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array(serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata)) {
    $stmt = odbc_prepare($conn,
                         "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, &$sqldata)) {
        /* Что-то сделано неправильно. */
    }
}


sleep

sleep -- Задержка выполнения
Описание
void sleep(int seconds);
 
Sleep фукция выполняет задержку выполненя программы в секундах (seconds).

См. также usleep().


unpack

unpack -- Распаковывает данные из двоичной строки
Описание
array unpack(string format, string data);
 
Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий распакованные элементы.

Unpack работает не так как в Perl поскольку распакованные данные сохранены в ассоциативном массиве. Чтобы сделать это, Вы должны установить различные коды формата, и отделить их наклонной чертой вправо /.
 
Пример 1. Распаковываем строку
$array = unpack("c2chars/nint", $binarydata);
Возникающий в результате массив будет содержать "chars1", "chars2" и "int". 

Для объяснения кодов формата см. также: pack()

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


unserialize

unserialize -- создает PHP значение из сохраненного представления
Описание
mixed unserialize(string str);
 
unserialize() берет одно сохраненное значение  (см. serialize()) и преобразует обратно в PHP значение. Возвращает преобразованное значение, и может иметь тип:  integer double string array или  object . Если был преобразован object, то методы не востановятся.
 
Пример 1. unserialize 
// Здесь мы используем unserialize() для загрузки данных о сессии из базы данных
// в $session_data.  Этот пример дополняет описанный в месте
// с serialize().

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($PHP_AUTH_USER);
if (!odbc_execute($stmt, &$sqldata) || !odbc_fetch_into($stmt, &$tmp)) {
    // Если сбой запуска или выборки , то инициализируем массив
    $session_data = array();
} else {
    // Мы должны иметь представление в $tmp[0].
    $session_data = unserialize($tmp[0]);
    if (!is_array($session_data)) {
        // Что-то неправильно, инициализируем массив
        $session_data = array();
    }
}

uniqid

uniqid -- генерирует уникальный идентификатор
Описание
int uniqid(string prefix);
 
uniqid() возвращает уникальный идентификатор, основанный на текущем времени в микросекундах. Префикс может быть полезен, например, если Вы генерируете идентификаторы одновременно на отдельных хостах, которые, могли бы случилось,  генерировали идентификатор в одной и той же микросекунде. Префикс может быть длиной до 114 символов.

Если Вы нуждаетесь в уникальном идентификаторе или лексеме(маркере), и Вы предполагаете раздавать эту лексему(маркер) пользователю через сеть (то есть сеанс cookies), то рекомендуется, чтобы Вы использовали что - нибудь со строками

$token = md5(uniqid("")); // Не произвольно
$better_token = md5(uniqid(random())); // Намного лучше, труднее подобрать
Это создаст 32 символьный идентификатор (128 бит hex число) который чрезвычайно трудно предсказать.

usleep

usleep -- Задержка выполнения в микросекундах
Описание
void usleep(int micro_seconds);
 
Задержка выполнения программы в микросекундах(micro_seconds).

См. также sleep().

Назад, к содержанию