Руководство по РНР 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
Описание
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), то рекомендуется, чтобы Вы использовали что -
нибудь со строками
Это создаст 32 символьный идентификатор (128 бит hex число) который чрезвычайно
трудно предсказать.
usleep
usleep -- Задержка выполнения в микросекундах
Описание
void usleep(int micro_seconds);
Задержка выполнения программы в микросекундах(
micro_seconds).
См. также sleep().
Содержание