САМОУЧИТЕЛЬ PHP 4

       

Другие функции


bool ftruncate(int $f, int $newsize)

Эта функция усекает открытый файл $f до размера $newsize. Разумеется, файл должен быть открыт в режиме, разрешающем запись. Например, следующий код просто очищает весь файл:

ftruncate($f,0);  // î÷èñòèòü ñîäåðæèìîå ôàéëà

void fflush(int $f)

Заставляет PHP немедленно записать на диск все изменения, которые производились до этого с открытым файлом $f. Что это за изменения? Дело в том, что для повышения производительности все операции записи в файл буферизируются: например, вызов fputs($f,"Это строка!") не приводит к непосредственной записи данных на диск — сначала они попадают во внутренний буфер (обычно размером 8K). Как только буфер заполняется, его содержимое отправляется на диск, а сам он очищается, и все повторяется вновь. Особенный выигрыш от буферизации чувствуется в сетевых операциях, когда просто глупо отправлять данные маленькими порциями. Конечно, функция fflush()

вызывается неявно и при закрытии файла.

int set_file_buffer(int $f, int $size)

Эта функция устанавливает размер буфера, о котором мы только что говорили, для указанного открытого файла $f. Чаще всего она используется так:

set_file_buffer($f,0);

Приведенный код отключает буферизацию для указанного файла, так что теперь все данные, записываемые в файл, немедленно отправляются на диск или в сеть.

Буферизированный ввод/вывод придуман не зря. Не отключайте его без крайней надобности — это может нанести серьезный ущерб производительности.

В крайнем случае используйте fflush().




void usleep(int $micro_seconds)

Вызов этой функции позволяет сценарию "замереть"

не указанное время

(в микросекундах). При этом затрачивается очень немного ресурсов процессора, так что функцию вполне можно вызывать, чтобы дождаться выполнения какой-нибудь операции другого процесса — например, закрытия им файла.

Существует также функция sleep(), которая принимает в параметрах не микросекунды, а секунды, на которые нужно задержать выполнение программы.

int uniqid(string $prefix)

Функция uniqid() возвращает строку, при каждом вызове отличающуюся от результата предыдущего вызова. Параметр $prefix задает префикс (до 114 символов длиной) этого идентификатора.

Зачем нужен префикс? Представьте себе, что сразу несколько интерпретаторов на разных хостах одновременно вызвали функцию uniqid(). В этом случае существует вероятность того, что результат работы функций совпадет, чего нам бы не хотелось. Задание в качестве префикса имени хоста решит проблему.

Чтобы добиться большей уникальности, можно использовать uniqid()

"в связке"

с функциями mt_rand()

и md5(), описанными в предыдущих главах.




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

bool session_is_registered(string $name)

Функция session_is_registered() возвращает значение true, если переменная с именем $name

была зарегистрирована в сессии, иначе возвращается false.

bool session_unregister(struing $name)

Эта функция отменяет регистрацию для переменной с именем $name

для текущей сессии. Иными словами, при завершении сценария все будет выглядеть так, словно переменная с именем $name

и не была никогда зарегистрирована. Возвращает true, если все прошло успешно, и false

— в противном случае.

После вызова функции session_unregister()

глобальная переменная, которая была "аннулирована", не уничтожается, а сохраняет свое значение.

void session_unset()

Функция session_unset(), в отличие от session_unregister(), не только отменяет регистрацию переменных (кстати говоря, всех

переменных сессии, а не какой-то одной), но и уничтожает глобальные переменные, которые были зарегистрированы в сессии.

string session_save_path([string $path])

Эта функция возвращает имя каталога, в котором будут помещаться фай­лы— временные хранилища данных сессии. В случае, если указан параметр, как обычно, активное имя каталога будет переустановлено на $path. При этом функция вернет предыдущий каталог.

К сожалению, функции, которая бы возвращала список всех зарегистрированных в сессии переменных, почему-то нет. Во всяком случае, в PHP версии 4.0.3.



Содержание раздела