Класс предназначен для работы с хешами, хранящимися на диске. В отличие от класса hash, объекты данного класса считаются всегда определенными (def) и не имеют числового значения.
Если класс hash хранит свои данные в оперативной памяти, hashfile хранит их на диске, причем можно отдельно задавать время хранения каждой пары «ключ / значение».
Для хранения данных hashfile используются два файла - с расширением .dir и .pag
Замечание: существует ограничение на длину строк ключа и значения, в сумме они не должны превышать 8000 байт.
Чтение и запись данных происходят очень быстро: идет работа только с необходимыми фрагментами файлов данных. На простых задачах hashfile работает значительно быстрее баз данных.
Замечание: в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы.
Пример
Допустим, желательно некоторую информацию получить от посетителя на одной странице сайта и иметь возможность отобразить ее на другой странице сайта. Причем необходимо, чтобы посетитель не мог ее ни увидеть, ни подделать.
Можно поместить информацию в hashfile, ассоциировав ее со случайной строкой - идентификатором «сеанса общения с посетителем». Идентификатор сеанса общения можно поместить в cookie, данные теперь хранятся на сервере, не видны посетителю и не могут быть им подделаны.
# создаем/открываем файл с информацией
$sessions[^hashfile::open[/sessions]]
^if(!def $cookie:sid){
$cookie:sid[^math:uuid[]]
}
# после этого…
$information_string[произвольное значение]
# …так запоминаем произвольную $information_string под ключом sid на 2 дня
$sid[$cookie:sid]
$sessions.$sid[$.value[$information_string] $.expires(2)]
# …а так можем считать сохраненное ранее значение
# если с момента сохранения прошло меньше 2 дней
$sid[$cookie:sid]
$information_string[$sessions.$sid]