Parser 3.x test page

Если вы видите эту страницу, значит вы установили Parser3 и пытаетесь его протестировать :)

Для тестирования необходимо, чтобы этот документ был перекодирован в кодировку, которая указана у вас в $request:charset.

Чтобы увидеть полные пути к конфигурационным файлам и DOCUMENT_ROOT - закоментируйте метод postprocess[]

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


Глобальные переменные, заданные в конфигурационном auto.p

$CHARSETS:

koi8-r $charsetsdir/koi8-r.cfg (5104 байт)
windows-1251 $charsetsdir/windows-1251.cfg (5128 байт)

$SQL:

Неверная структура таблицы $SQL.drivers
Возможно Вы редактировали конфигурационный файл и у Вас символы табуляции заменились пробелами.
Содержимое таблицы:
строка protocWoldriverclient
1 mysql$sqldriversdir/libparser3mysql.so/usr/local/lib/mysql/libmysqlclient.so

DOCUMENT_ROOT: совпадает с директорией тестового скрипта (/закоментируйте postprocess чтобы увидеть/)
Путь к скрипту: закоментируйте postprocess чтобы увидеть
$response:charset: WINDOWS-1251
$request:charset: UTF-8
$request:uri: /_test.html
$request:query:
$SQL.connect-string: определена
$MAIL.SMTP: не определена
$CLASS_PATH:
/../data/classes/sql каталог существует
/../data/classes/auth каталог существует
/../data/classes/io каталог существует
/../data/classes/utils каталог существует
/../data/classes/engine каталог существует
/../data/classes каталог существует
Внимание, при поиске классов при подключении, каталоги просматриваются снизу вверх.

Демонстрация работы парсера

Демонстрация работы с cookie (класс $cookie)

Чтение $cookie:test: не определена
Запись в cookie значения ABC $cookie:test[ABC] (нажмите Reload для проверки)

Демонстрация работы математических операторов (класс $math)

^eval(3+3): 6
^math:random(1000): 482
^math:log(1000): 6.90775527898214
^math:log10(1000): 3
^math:uuid[]: AE6745AD-9483-48DB-819A-9CA20998923D
^math:uid64[]: B01812A19259D0DE
^math:md5[СтРоКа]: 7dbe3ec30a840d95ff5a7e92bc9ae516
^math:crypt[СтРоКа;$apr1$]: $apr1$FqFlzkXv$J2pNA34/zG/wzK8tWvS5a.
^math:crc32[СтРоКа]: -1893947471

Работа со строками (класс $string)

Задание $str[АбвГде]
Длина строки ^str.length[]: 6
Строка в верхнем регистре ^str.upper[]: АБВГДЕ
Строка в нижнем регистре ^str.lower[]: абвгде
Первые 2 символа строки ^str.left(2): Аб
Последние 3 символа строки ^str.right(3): Где
2-4 символы строки ^str.mid(1;3): бвГ
Поиск символа 'б' в строке ^str.pos[б]: 1
Поиск символа 'б' в строке начиная со 2 позиции ^str.pos[б](2): -1
Поиск символа 'X' в строке ^str.pos[X]: -1
Замена комбинации символов 'вГ' на XX с помощью ^str.match[вГ][]{XX}: АбXXде
Замена комбинации символов 'в' на 'Y', 'Г' на 'Z' с помощью ^str.replace[$repl]: АбYZде
^str.trim[both;е]: АбвГд
^str.trim[start;е]: АбвГде
^str.trim[end;е]: АбвГд
^str.trim[left;е]: АбвГде
^str.trim[right;е]: АбвГд
^str.base64[]: 0JDQsdCy0JPQtNC1
^str.js-escape[]: %u0410%u0431%u0432%u0413%u0434%u0435
^str:js-unescape[%u0410%u0431%u0432%u0413%u0434%u0435]: АбвГде

Работа с классом $inet

^inet:aton[10.0.0.2]: 167772162
^inet:aton[192.168.1.5]: 3232235781
^inet:ntoa(167772162): 10.0.0.2
^inet:ntoa(3232235781): 192.168.1.5

Чтение значений из формы (класс $form)

$form:a: не определено
Safe преобразование $form:a в целое число: ^form:a.int(1): 1
$form:b не определено
$form:qtail: не определено
идем сюда чтобы проверить чтение значений формы

Задание и вывод значений у объекта-хэша (класс $hash)

$hash1[
   $.a[1]
   $.b[2]
   $.c[3]
]
^hash1.foreach[key;value]{
  $key=$value
}[<br />]
a=1
b=2
c=3

Проверка наличия в хеше элементов с ключём 'a' (^hash1.contains[a]): содержит элемент с ключем 'a'

Задание и вывод значений у объекта-таблицы (класс $table)

$tbl1[^table::create{name	col1	col2
Вася	3	5
Дима	4	14}]
Количество строк таблицы $tbl1: 2
Количество столбцов таблицы $tbl1: 3
Вывод названий столбцов таблицы:
строка column
1 name
2 col1
3 col2

Вывод значений таблицы $tbl1:
строка namecol1col2
1 Вася35
2 Дима414

$tbl2[^table::create{name	col1	col2
Вова	3	44}]
Количество строк таблицы $tbl2: 1

join таблицы $tbl1 к таблице $tbl2 [^tbl2.join[$tbl1]]
Количество строк таблицы $tbl2 ^tbl2.count[]: 3
Вывод полученой таблицы:
строка namecol1col2
1 Вова344
2 Вася35
3 Дима414

select и вывод строк таблицы у которых значения в столбце col1 равны 3: ^tbl2.select($tbl2.col1 == 3)
строка namecol1col2
1 Вова344
2 Вася35

Получение из таблицы - хеша таблиц, где в качестве ключа выступает значение col1: $hData[^tbl2.hash[col1][$.distinct[tables]]]

Вывод полученного хеша таблиц:
Ключ Значение
3
строка namecol1col2
1 Вова344
2 Вася35
4
строка namecol1col2
1 Дима414

Получение из таблицы - хеша строк, где в качестве ключа выступает значение столбца col2, а в качестве значения — name: $hData[^tbl2.hash[col2;name][$.type[string]]]

Вывод полученного хеша строк:
Ключ Значение
44 Вова
5 Вася
14 Дима

Работа с датами (класс $date)

$now[^date::now[]]
$now.day/$now.month/$now.year ${now.hour}:${now.minute}:$now.second: 18/1/2018 9:2:36
$now.week: 3
$now.weekyear: 2018
Вывод сегодняшней даты в sql формате ^now.sql-string[]: 2018-01-18 09:02:36
Вывод сегодняшней даты в виде UNIX timestamp ^now.unix-timestamp[]: 1516255356
Вывод сегодняшней даты в виде строки в формате GMT ^now.gmt-string[]: Thu, 18 Jan 2018 06:02:36 GMT
Номер последнего дня текущего месяца ^now.last-day[]: 31
Сдвиг даты на 5 дней назад ^now.roll[day](-5): 13/1/2018
Сдвиг полученой даты на 30 дней вперед ^now.roll[day](30): 12/2/2018

Работа с файлами (класс $file)

Запись таблицы $tbl1 в файл _test.cfg (^tbl1.save[_test.cfg]): файл успешно создан
^file:dirname[/_test.cfg]: /
^file:basename[/_test.cfg]: _test.cfg
^file:justname[/_test.cfg]: _test
^file:justext[/_test.cfg]: cfg

Получение параметров сохраненного файла $fstat[^file::stat[_test.cfg]]:
Размер файла, байт [$fstat.size]: 42
cdate: 18/1/2018
adate: 18/1/2018
mdate: 18/1/2018

Загрузка данных в таблицу $tbl3 из файла _test.cfg и вывод ($tbl3[^table::load[_test.cfg]]):
строка namecol1col2
1 Вася35
2 Дима414

Копирование файла (^file:copy[_test.cfg;_copy.cfg]): выполнено

Удаление файла (^file:delete[_test.cfg]): выполнено

Работа с классом $hashfile

Создаем объект: $hf [$hf[^hashfile::open[_test]]]: объект успешно создан
Количество записей: 28
Добавление новой записи (FE0B1EF7-137C-40FA-9697-2AE38A5CE5CA) на 3 дня:

$hf.[FE0B1EF7-137C-40FA-9697-2AE38A5CE5CA][
   $.value[607897107]
   $.expires(3)
]
Очистка hashfile от устаревших записей (^hf.cleanup[]): выполнено

Вывод содержимого (максимум 5 записей):
3DF38E9B-D5A7-4501-B257-6981465C5E66=1
A89DE97E-8D1A-4690-B058-38B4685A0845=5
D5A78407-5723-4A4B-9E4C-97C73AC7C713=7
A76E2318-7AE1-488D-87FA-73BF4D0F2D4C=0
B3E9780A-299A-415C-A178-2CDB22C3DEB9=3

Закрытие файлов и снятие блокировок (^hf.release[]): выполнено

Работа с переменными окружения (класс $env)

Переменная Значение Комментарий
SERVER_NAME www.parser.ru DNS имя сервера
QUERY_STRING
Для получения параметров используйте класс $form
HTTP_REFERER
Откуда пришел посетитель (броузер может не передавать эту информацию)
HTTP_USER_AGENT CCBot/2.0 (http://commoncrawl.org/faq/) Строка USER_AGENT броузера посетителя
HTTP_X_FORWARDED_FOR
Обычно заполнена если пришли через прокси
REMOTE_HOST

REMOTE_ADDR 54.234.190.237 IP адрес посетителя
PARSER_VERSION 3.4.5 (compiled on x86_64-unknown-freebsd10.1) Версия парсера (если не определена, то до 3.1.5)

Работа с SQL

Выполнение простого SQL запроса ^int:sql{SELECT 2+2}:
4

SQL преобразование строки с русским алфавитом к верхнему регистру:
Преобразование регистра было произведено корректно.

Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:
Значение переменой CHARACTER_SET_CLIENT совпадает со значением $request:charset, следовательно в настоящий момент кодировки настроены верно.

Работа с XML

Создание объекта типа xdoc:

$xDoc[^xdoc::create{<?xml version="1.0" encoding="UTF-8"?>
<document>
	<t attr="привет" n="123"/>
	<t attr="пока" n="234" n2="xxx"/>
	<text>текст</text>
</document>}]
Объект xdoc успешно создан.
$xDoc.documentElement.nodeName: 'document'
Достаем все элементы <t /> с помощью XPath запроса $hNode[^xDoc.select[//t]] :
Количество найденых элементов (^hNode._count[]): 2
Вывод найденых элементов с помощью for:
nodeName: t, nodeType: 1, кол-во аттрибутов: 2, аттрибуты: attr='привет', n='123'
nodeName: t, nodeType: 1, кол-во аттрибутов: 3, аттрибуты: attr='пока', n='234', n2='xxx'

Работа с классами Status и Memory

Поле Описание Значения
на начало работы на текущий момент после ^memory:compact[]
$status:rusage.utime (сек) чистое время, затраченное текущим процессом 0.017076 0.018003 0.02032
$status:rusage.stime (сек) время, сколько система читала ваши файлы 0 0.009001 0.01016
$status:rusage.maxrss (блоков) память, занимаемая процессом 6052 7368 7368
$status:memory.used (КБ) занято 2212 2656 2420
$status:memory.free (КБ) свободно (скорее всего фрагментирована) 512 68 304
$status:memory.ever_allocated_since_compact (КБ) выделено с момента последней сборки мусора 2757.3125 3297 1.0625
$status:memory.ever_allocated_since_start (КБ) выделено за все время обработки запроса 2757.3125 3297 3299.1875