เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

Ad


OnWorks favicon

haserl - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เป€เบ›เบตเบ”เปƒเบŠเป‰ haserl เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ haserl เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


haserl - เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฝเบ™ cgi เบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบเบฑเบ‡เป„เบงเป‰

เบชเบฐเบซเบผเบธเบšเบชเบฑเบ‡เบฅเบงเบก


#!/usr/bin/haserl [--shell=เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡] [--upload-dir=dirspec] [--upload-handler=เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™]
[--upload-limit=เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”] [--เบเบญเบกเบฎเบฑเบš-เบ—เบฑเบ‡เปเบปเบ”] [--เบเบญเบกเบฎเบฑเบš-เบšเปเปˆ] [--เบ‡เบฝเบš] [--เบ”เบตเบšเบฑเบ]

[ text ] [ <% shell script %> ] [ text ] ...

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”


Haserl เป€เบ›เบฑเบ™ wrapper cgi เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ "PHP" เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก cgi เปเบšเบš, เปเบ•เปˆเปƒเบŠเป‰ UNIX.
bash-like shell เบซเบผเบท Lua เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก. เบกเบฑเบ™เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบผเบฒเบ, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰
เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฑเบ‡, เบซเบผเบทเบšเปˆเบญเบ™เบ—เบตเปˆเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™ PHP เปเบกเปˆเบ™เปƒเบซเบเปˆเป€เบเบตเบ™เป„เบ›.

เบกเบฑเบ™เบฅเบงเบกเบชเบฒเบกเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ cgi เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ:

เบกเบฑเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป POST เปเบฅเบฐ GET, เบงเบฒเบ‡ form-elements เป€เบ›เบฑเบ™ name=value pairs เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบชเปเบฒเบฅเบฑเบš CGI script เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบšเบฒเบ‡โ€‹ uncgi เบซเปเปˆ.

เบกเบฑเบ™เป€เบ›เบตเบ” shell, เปเบฅเบฐเปเบ›เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบžเบดเบกเป„เบ”เป‰. เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เปเบปเบ”
เบžเบฒเบเปƒเบ™ <%... %> เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™ verbatim เป„เบ›เบซเบฒ shell. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡
เบ„เบทเบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™ PHP เบญเบฑเบเบชเบญเบ™.

เบกเบฑเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เบเบฑเบšโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เบญเบ‡ script เป„เบ”เป‰โ€‹,
เปƒเบซเป‰เบกเบฑเบ™เบšเบฒเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡ suexec or cgiwrapper.

OPTIONS เบšเบปเบ”เบชเบฐเบซเบผเบธเบš


เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบซเบผเบธเบšเบ‚เบญเบ‡เบ•เบปเบงเป€เบฅเบทเบญเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡. เบเบฐเบฅเบธเบ™เบฒเป€เบšเบดเปˆเบ‡ OPTIONS เบžเบฒเบเบชเปˆเบงเบ™เบžเบฒเบเปƒเบ•เป‰
เบŠเบทเปˆเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบงเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™.

-a --เบเบญเบกเบฎเบฑเบš-เบ—เบฑเบ‡เปเบปเบ”
-n --เบเบญเบกเบฎเบฑเบš-เบšเปเปˆ
-d --debug
-s, --shell
-S, --silent
-U, --upload-dir
-u, --upload-limit
-H, --upload-handler

OPTIONS


--เบเบญเบกเบฎเบฑเบš-เบ—เบฑเบ‡เปเบปเบ”
เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเป‚เบ›เบฃเปเบเบฃเบกเบˆเบฐเบฎเบฑเบšเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™ POST เป€เบกเบทเปˆเบญ REQUEST_METHOD เปเบกเปˆเบ™ POST เปเบฅเบฐ
เบเบญเบกเบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ URL เป€เบกเบทเปˆเบญ REQUEST_METHOD เปเบกเปˆเบ™ GET. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰
เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เบฑเบ‡เบชเบญเบ‡ POST เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™ URL เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡ REQUEST_METHOD.
เป€เบกเบทเปˆเบญเบ•เบปเบงเป€เบฅเบทเบญเบเบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡, REQUEST_METHOD เบกเบตเบ„เบงเบฒเบกเบชเบณเบ„เบฑเบ™เบเบงเปˆเบฒ (เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™
เปเบกเปˆเบ™ POST, FORM_variables เปเบกเปˆเบ™เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™ COOKIE, เบ‚เปเป‰เบกเบนเบ™ GET, เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™ POST, เปƒเบ™
เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบงเบดเบ—เบตเบเบฒเบ™เปเบกเปˆเบ™ GET, FORM_variables เปเบกเปˆเบ™เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™ COOKIE, POST
เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹, เปเบฅเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹.) เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปเบกเปˆเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เป€เบญเบปเบฒโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ” - เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป„เบ”เป‰โ€‹
เบ‚เปเป‰เบกเบนเบ™ COOKIE เปเบฅเบฐ REQUEST_METHOD.

--เบเบญเบกเบฎเบฑเบš-เบšเปเปˆ
เบ–เป‰เบฒเบ–เบทเบเบกเบญเบšเปƒเบซเป‰, haserl เบˆเบฐเบšเปเปˆเบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบ›เบฑเบ™เป€เบ™เบทเป‰เบญเปƒเบ™ http เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™
เบชเบฐเบ„เบฃเบดเบš. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ–เป‰เบฒเป‚เบ—เบซเบฒ script haserl เบˆเบฒเบ script haserl เบญเบทเปˆเบ™.

--debug
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ” script, เบžเบดเบกเบญเบญเบ script เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบ–เป‰เบฒ
เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก 'REQUEST_METHOD' เบ–เบทเบเบ•เบฑเป‰เบ‡, เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบš
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเปƒเบ™/เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบณเบกเบฐเบ”เบฒ. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเบฐเบ„เบฃเบดเบšเปเบเบฐเบˆเบฐเบ–เบทเบเบžเบดเบกเป€เบ›เบฑเบ™เบ„เบณเป€เบงเบปเป‰เบฒ.

--shell=เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡
เบฅเบฐเบšเบธเป€เบ›เบฑเบ™เปเบเบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบท bash เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ "/ เบ–เบฑเบ‡ / sh"

เป€เบžเบทเปˆเบญเบฅเบงเบกเป€เบญเบปเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡ shell เบขเปˆเบฒเปƒเบŠเป‰ --shell=/ เบ–เบฑเบ‡ / sh เบฎเบนเบšเปเบšเบš. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เปƒเบŠเป‰
เบฎเบนเบšเปเบšเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเบกเบต "=", เบ„เบทเบเบฑเบš --shell"/ bin / bash --norc" เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ
เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบžเบทเปˆเบญเบ›เบปเบเบ›เป‰เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”เปƒเบ”เป†.

เบ–เป‰เบฒเบฅเบงเบšเบฅเบงเบกเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Lua, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, string "lua" เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™
เบฅเบนเบงเบฒ เบก. เบชเบฐเบ•เบฃเบดเบ‡เบ™เบตเป‰เบกเบตเบ„เบงเบฒเบกเบญเปˆเบญเบ™เป„เบซเบงเบ•เบปเบงเบžเบดเบกเบ™เป‰เบญเบเปƒเบซเบเปˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡: --shell=lua

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบกเปˆเบ™ "luac". เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐ haserl เปเบฅเบฐ lua เบ–เบทเบเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™,
เปเบฅเบฐ script เปเบกเปˆเบ™เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™ chunk lua precompiled. เป€เบšเบดเปˆเบ‡ LUAC เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก
เบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™.

--เบ‡เบฝเบš
เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง Haserl เบžเบดเบกเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบ™เบตเป‰
เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เปƒเบŠเป‰ haserl เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป‚เบ„เบชเบฐเบ™เบฒ.

--upload-dir=dirspec
เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ "/ tmp". เป„เบŸเบฅเปŒเบ—เบตเปˆเบญเบฑเบšเป‚เบซเบฅเบ”เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ”เป‰เบงเบเบŠเบทเปˆเป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบงเปƒเบ™เบญเบฑเบ™เบ™เบตเป‰
เบฅเบฐเบšเบปเบš HASERL_xxx_path เบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบง. FORM_xxx_name
เบกเบตเบŠเบทเปˆเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒ, เบ•เบฒเบกเบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเบฅเบฐเบšเบธเป„เบงเป‰.

--upload-handler=เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡
เป€เบกเบทเปˆเบญเบฅเบฐเบšเบธเป„เบงเป‰, เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบเบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ™เบตเป‰, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป€เบ–เบดเบ‡
เป„เบŸเบฅโ€‹เปŒโ€‹เบŠเบปเปˆเบงโ€‹เบ„เบฒเบงโ€‹. เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบ•เบฑเบก (เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบšเปเปˆเป„เบ”เป‰เบŠเบญเบเบซเบฒ), เปเบฅเบฐ
เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เปเบกเปˆเบ™เปƒเบซเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบ–เบงเบ„เบณเบชเบฑเปˆเบ‡เบญเบฑเบ™เปœเบถเปˆเบ‡: เบŠเบทเปˆเบ‚เบญเบ‡ FIFO on
เป€เบŠเบดเปˆเบ‡เป„เบŸเบฅเปŒเบญเบฑเบšเป‚เบซเบฅเบ”เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, handler เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบš 3
เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก: CONTENT_TYPE, เบŠเบทเปˆโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™, เปเบฅเบฐ NAME. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฐเบ—เป‰เบญเบ™เป€เบ–เบดเบ‡ MIME
เบชเปˆเบงเบ™เบซเบปเบงเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบชเบณเบฅเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ. Haserl เบˆเบฐ fork handler เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
เป„เบŸเบฅเปŒเบญเบฑเบšเป‚เบซเบฅเบ”, เปเบฅเบฐเบˆเบฐเบชเบปเปˆเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ›เบเบฑเบ‡ FIFO เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰.
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, Haserl เบˆเบฐเบ›เบดเบ”เบเบฑเป‰เบ™เบˆเบปเบ™เบเปˆเบงเบฒเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™
เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

--upload-limit=เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”
เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” mime เบชเบนเบ‡เบชเบธเบ” เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ” KB เบˆเบฐเบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™ 0KB (no
เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบญเบฑเบšเป‚เบซเบฅเบ”). เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” mime เป€เบžเบตเปˆเบก 33% เบเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™.

เบžเบฒเบšเบฅเบงเบก OF OPERATION


เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบซเบผเบฒเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เปเบฒเปƒเบŠเป‰ fork or
เบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เป€เบžเบทเปˆเบญเปเบฅเปˆเบ™เบชเบฐเบ„เบดเบš CGI. เบ–เป‰เบฒ script เปƒเบŠเป‰ haserl เบ™เบฒเบเบžเบฒเบชเบฒ, เป„เบ”เป‰
เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™:

If haserl เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ suid root, เบˆเบฒเบเบ™เบฑเป‰เบ™ uid/gid เบ–เบทเบเบ•เบฑเป‰เบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบชเบฐเบ„เบฃเบดเบš.

เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป„เบ”เป‰เบ–เบทเบเบชเบฐเปเบเบ™เบชเปเบฒเบฅเบฑเบš HTTP_COOKIE, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเป€เบงเบฑเบš
เป€เบŠเบตเบšเป€เบงเบต. เบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบขเบนเปˆ, เป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบตเปˆเบงเบดเป€เบ„เบฒเบฐเปเบฅเป‰เบงเบˆเบฐเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป„เบ”เป‰เบ–เบทเบเบชเบฐเปเบเบ™เบชเปเบฒเบฅเบฑเบš REQUEST_METHOD, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ.
เบญเบตเบ‡เบ•เบฒเบกเบงเบดเบ—เบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบˆเบฐเบ–เบทเบเบญเปˆเบฒเบ™ เปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐ. pared
เป€เบ™เบทเป‰เบญเปƒเบ™เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

script เปเบกเปˆเบ™ tokenized, parsing haserl เบšเบฅเบฑเบญเบเบฅเบฐเบซเบฑเบ”เบˆเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ”เบดเบš. เบ‚เปเป‰เบ„เบงเบฒเบกเบ”เบดเบšเปเบกเปˆเบ™
เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบก "echo", เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ tokens เบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ sub-shell.

haserl เบชเป‰เบญเบก เปเบฅเบฐเปเบเบฐเบเปˆเบญเบ (เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด / เบ–เบฑเบ‡ / sh) เปเบกเปˆเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹.

tokens เบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ STDIN เบ‚เบญเบ‡ sub-shell, เบ—เบตเปˆเบกเบตเบ•เปเปˆเบซเบ™เป‰เบฒ เบเบฒเบ™เบ—เปˆเบญเบ‡เบ—เปˆเบฝเบง เบ„เปเบฒเบชเบฑเปˆเบ‡.

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ sub-shell เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡, เป„เบ”เป‰ haserl เบ™เบฒเบเบžเบฒเบชเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบชเบธเบ”เบ—เป‰เบฒเบเปเบฅเบฐ
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡.

CUSTOMER SIDE เบ›เบฑเบ”เป„เบˆเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ


เป„เบ”เป‰ haserl เบ™เบฒเบเบžเบฒเบชเบฒเบˆเบฐเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก HTTP_COOKIE, เปเบฅเบฐ
เบงเบดเบ—เบตเบเบฒเบ™ GET เบซเบผเบท POST เบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบงเบเบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบ haserl. เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบงโ€‹เปเบ›โ€‹เบ•เบฒเบกโ€‹เบŠเบทเปˆโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เปƒเบ™โ€‹เปเบซเบผเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹,
เบเบปเบเป€เบงเบฑเป‰เบ™เบ„เบณเบ™เบณเปœเป‰เบฒ ( FORM_) เปเบกเปˆเบ™ prepended. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡ "foo=bar",
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบ•เบปเบงเปเบ› FORM_foo=เบžเบฒเบ—เบฐเบ™เบฒเบเบ„เบงเบฒเบก.

เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ HTTP_COOKIE, เบ•เบปเบงเปเบ›เบเบฑเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบ”เป‰เบงเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ ( เบ„เบธเบเบเบต_) เป€เบžเบตเปˆเบก.
เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒ HTTP_COOKIE เบ›เบฐเบเบญเบšเบกเบต "foo=bar", เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™
COOKIE_foo=เบžเบฒเบ—เบฐเบ™เบฒเบเบ„เบงเบฒเบก.

เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ GET, เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบš %xx เบ–เบทเบเปเบ›เป€เบ›เบฑเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ
เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™, เปเบฅเบฐเบ•เบปเบงเปเบ›เบเบฑเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบ”เป‰เบงเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ ( GET_) เป€เบžเบตเปˆเบก. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒ
QUERY_STRING เบ›เบฐเบเบญเบšเบกเบต "foo=bar", เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™ GET_foo=เบžเบฒเบ—เบฐเบ™เบฒเบเบ„เบงเบฒเบก.

เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ POST, เบ•เบปเบงเปเบ›เบเบฑเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบ”เป‰เบงเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ ( POST_) เป€เบžเบตเปˆเบก. เบชเปเบฒเบฅเบฑเบš
เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒ post stream เบ›เบฐเบเบญเบšเบกเบต "foo=bar", เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™ POST_foo=เบžเบฒเบ—เบฐเบ™เบฒเบเบ„เบงเบฒเบก.

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ POST, เบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป‚เบ”เบเปƒเบŠเป‰ multipart/form-data เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เป„เบ”เป‰
เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบญเบฑเบ™เบ™เบตเป‰เบ–เบทเบเปƒเบŠเป‰เป€เบกเบทเปˆเบญเป„เบŸเบฅเปŒเบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”เบˆเบฒเบเป€เบงเบฑเบš
เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเปƒเบŠเป‰ .

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹ เป€เบกเบทเปˆเบญเป„เบŸเบฅเปŒเบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ›เบเบฑเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ, เบกเบฑเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ upload-dir
เบฅเบฐเบšเบปเบš. FORM_variable_name= เบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบญเบฑเบšเป‚เบซเบฅเบ” (เป€เบ›เบฑเบ™
เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เป‚เบ”เบโ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹.) HASERL_variable_path= เบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™
upload-dir เบ—เบตเปˆเบ–เบทเป€เบ™เบทเป‰เบญเบซเบฒเบ—เบตเปˆเบญเบฑเบšเป‚เบซเบฅเบ”. เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบˆเบฒเบ
เบเบฒเบ™เบ•เบทเปˆเบก upload-dir เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเป€เบงเบฑเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ
--upload-limit เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบฅเบฐเบšเบธเบ‚เบฐเปœเบฒเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ”เป‰. Haserl
เบฅเบถเบšเป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบงเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญเบชเบฐเบ„เบฃเบดเบšเบชเบณเป€เบฅเบฑเบ”. เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒ
เป„เบŸเบฅเปŒ, เบเป‰เบฒเบเบกเบฑเบ™เบซเบผเบทเบ›เปˆเบฝเบ™เบŠเบทเปˆเบกเบฑเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เปƒเบ™เบชเบฐเบ„เบดเบš.

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบŠเบทเปˆเป„เบŸเบฅเปŒเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ HASERL_variable_path เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒ FORM_,
GET_, เปเบฅเบฐเบ•เบปเบงเปเบ› POST_ เปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เป‚เบ”เบเบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบชเบฒเบกเบฒเบ”
เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบกเบตเบŠเบทเปˆ variable_path=/ etc / passwd. เบฎเบธเปˆเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒ
เบšเปเปˆเป„เบ”เป‰เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ pathspec เปƒเบ™ HASERL namespace. To เบฎเบฑเบเบชเบฒ เบ–เบญเบเบซเบฅเบฑเบ‡
เบ„เบงเบฒเบกโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบเบฑเบ™โ€‹เป„เบ”เป‰โ€‹, เป„เบ”เป‰ เบŠเบทเปˆ of เป„เบ”เป‰ เบŠเบปเปˆเบงเบ„เบฒเบง เป€เบญเบเบฐเบชเบฒเบ™ is เบเบฑเบ‡ เป€เบเบฑเบšเป„เบงเป‰ in FORM_variable= เปเบฅเบฐ
POST_variable=. เบ™เบตเป‰ is เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ เบšเปเปˆเบ›เบญเบ”เป„เบž เปเบฅเบฐ เบ„เบงเบ™ เบšเปเปˆ be เปƒเบŠเป‰เปเบฅเป‰เบง.

เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ เบ—เบฑเบ‡เบชเบญเบ‡ เป‚เบ”เบเบงเบดเบ—เบตเบเบฒเบ™ POST เปเบฅเบฐ GET, เบˆเบฒเบเบ™เบฑเป‰เบ™ haserl เบˆเบฐเบงเบดเป€เบ„เบฒเบฐเบžเบฝเบ‡เปเบ•เปˆ
เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹ REQUEST_METHOD เบ•เบปเบงเปเบ›เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ, เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ
เบเบญเบกเบฎเบฑเบšเบ—เบฑเบ‡เปเบปเบ” เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ•เบฑเป‰เบ‡โ€‹เป„เบงเป‰โ€‹. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบšเบšเบŸเบญเบกเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบœเปˆเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™ POST, เปเบ•เปˆเบกเบต a
URI เบ‚เบญเบ‡ some.cgi?foo=bar&otherdata=เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบˆเบฐเบกเบตเบเบฒเบ™เปเบเบเบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™ POST, เปเบฅเบฐ เบŸเบน
เปเบฅเบฐ เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™ เบ•เบปเบงเปเบ›เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบเปเบฒเบ™เบปเบ” a HTTP_COOKIE เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰, เบ‚เปเป‰เบกเบนเบ™เบ„เบธเบเบเบตเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ.
เบ‚เปเป‰เบกเบนเบ™เบ„เบธเบเบเบตเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ เบ‚เปเป‰เบกเบนเบ™ GET เบซเบผเบท POST, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบชเบญเบ‡เบ•เบปเบงเปเบ›เบ‚เบญเบ‡
เบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™, เบ‚เปเป‰เบกเบนเบ™ GET เบซเบผเบท POST เบˆเบฐเบ‚เบฝเบ™เบ—เบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ„เบธเบเบเบต.

เป€เบกเบทเปˆเบญเบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบกเบฒเบˆเบฒเบเปเบซเบผเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, the
FORM_variable เบˆเบฐเบ–เบทเบเบ•เบฑเป‰เบ‡เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบ•เบปเบงเปเบ›เบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™.
HTTP_COOKIE เบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเปˆเบญเบ™เบชเบฐเป€เปเบต, เบ•เบฒเบกเบ”เป‰เบงเบ REQUEST_METHOD. เบ–เป‰เบฒเบเบญเบกเบฎเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”
เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ•เบฑเป‰เบ‡โ€‹เป„เบงเป‰โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™ HTTP_COOKIE เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบธเบ‡โ€‹เปเบ•เปˆเบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹, เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ•เบฒเบกโ€‹เป‚เบ”เบโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹
เบเบณเบ™เบปเบ”เป‚เบ”เบ REQUEST_METHOD, เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบ REQUEST_METHOD. เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡
เบ•เบปเบงเปเบ›เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” FORM_variable. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ•เบปเบงเปเบ›เปเบกเปˆเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ
เบชเป‰เบฒเบ‡เป€เบ›เบฑเบ™ COOKIE_variable, GET_variable เปเบฅเบฐ POST_variable. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡
เบŠเบทเปˆเบ—เบฑเบšเบŠเป‰เบญเบ™เบเบฑเบ™เบˆเบฒเบเปเบ•เปˆเบฅเบฐเปเบซเบผเปˆเบ‡.

เป€เบกเบทเปˆเบญเบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบกเบฒเบˆเบฒเบเปเบซเบผเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เบžเบฝเบ‡เปเบ•เปˆเบชเบธเบ”เบ—เป‰เบฒเบ
เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰. เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบชเปเบฒเป€เบ™เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ” (เบชเปเบฒเบฅเบฑเบšเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡), เปƒเบซเป‰เป€เบžเบตเปˆเบก "[]" เปƒเบชเปˆเบ—เป‰เบฒเบ
เบ‚เบญเบ‡เบŠเบทเปˆเบ•เบปเบงเปเบ›. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™, เปเบเบเบญเบญเบเป‚เบ”เบเปเบ–เบงเปƒเบซเบกเปˆ. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,
host=Enoch&host=Esther&host=เป‚เบขเบŠเบงเบ เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ "FORM_host=Joshua".
host[]=Enoch&host[]Esther&host[]= Joshua เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ "FORM_host=Enoch\nEsther\nJoshua"

LANGUAGE


เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบชเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰เป‚เบ”เบ haserl.

RUN
<% [เบชเบฐเบ„เบฃเบดเบšเปเบเบฐ] %>

เบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบ•เบดเบ”เบขเบนเปˆเป‚เบ”เบ <% %> tags เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ sub-shell เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ‚เปเป‰เบ„เบงเบฒเบก
เบ–เบทเบโ€‹เบชเบปเปˆเบ‡โ€‹เบ„เปเบฒโ€‹เป€เบงเบปเป‰เบฒโ€‹.

INCLUDE
<% เปƒเบ™ pathspec %>

เบฎเบงเบกเป€เบญเบปเบฒเบ„เบณเป€เบงเบปเป‰เบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบญเบทเปˆเบ™เบขเบนเปˆเปƒเบ™เบชเบฐเบ„เบฃเบดเบšเบ™เบตเป‰. เป„เบŸเบฅเปŒเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบ„เบดเบš
เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™.

EVAL
<%= เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ %>

เบžเบดเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡เปเบเบฐ. เป‰เปเบฒเบ•เบฒเบ™ Syntactic เบชเปเบฒเบฅเบฑเบš "echo expr".

COMMENT
<%# เบ„เบณเป€เบซเบฑเบ™ %>

เบšเบฅเบฑเบญเบเบ„เบณเป€เบซเบฑเบ™. เบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเปƒเบ™เบšเบฅเบฑเบญเบเบ„เบณเป€เบซเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ. เบ„เบณเป€เบซเบฑเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบเบฑเบ™เป„เบ”เป‰
เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบˆเบธเบญเบปเบ‡เบ›เบฐเบเบญเบš haserl เบญเบทเปˆเบ™เป†.

เบ•เบปเบงเบขเปˆเบฒเบ‡


เบ„เปเบฒเป€เบ•เบทเบญเบ™
เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ haserl. เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™
เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เป€เบงเบฑเบš scripting เบžเบทเป‰เบ™เบ–เบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ haserl (เบซเบผเบท scripting เปƒเบ”
เบžเบฒเบชเบฒ) เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เบ‡เปˆเบฒเบเบ”เบฒเบ เบ„เปเบฒเบชเบฑเปˆเบ‡
#!/usr/local/bin/haserl
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: เบ‚เปเป‰เบ„เบงเบฒเบก/เบ—เบณเบกเบฐเบ”เบฒ

<%# เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ "env" script %>
<% env %>

เบžเบดเบกเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ เบ›เบฐเบกเบฒเบ™ เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบฑเบ™ mime เบ›เบฐเป€เบžเบ” "เบ‚เปเป‰เบ„เบงเบฒเบก / เบ—เปเบฒเบกเบฐเบ”เบฒ" เป€เบญเบเบฐเบชเบฒเบ™. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™
เป„เบ”เป‰ haserl เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบ—เบปเปˆเบงเป„เบ› เบชเบดเปˆเบ‡เบžเบดเบก cgi.

เบฅเบญเบ เบเบฑเบš เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง output
#!/usr/local/bin/haserl
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html




<% เบชเปเบฒเบฅเบฑเบš a เปƒเบ™เบชเบตเปเบ”เบ‡เบชเบตเบŸเป‰เบฒเบชเบตเป€เบซเบผเบทเบญเบ‡ Cyan; เป€เบฎเบฑเบ” %>
"><% echo -n "$a" %>
<% เปเบฅเป‰เบงเป† %>




เบชเบปเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™ "text/html" เบ›เบฐเป€เบžเบ” mime เป„เบ›เบซเบฒเบฅเบนเบเบ„เป‰เบฒ, เบ”เป‰เบงเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ html เบเบฑเบš
เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปƒเบชเปˆเบ›เป‰เบฒเบเบ”เป‰เบงเบเบชเบตเบžเบทเป‰เบ™เบซเบผเบฑเบ‡.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Shell เบเปเบฒเบ™เบปเบ”เป„เบงเป‰ เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒ.
#!/usr/local/bin/haserl
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html

<% # เบเบณเบ™เบปเบ”เบŸเบฑเบ‡เบŠเบฑเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰
table_element() {
เบชเบฝเบ‡เบชเบฐเบ—เป‰เบญเบ™ " $1 "
}
%>



<% เบชเปเบฒเบฅเบฑเบš a เปƒเบ™เบชเบตเปเบ”เบ‡เบชเบตเบŸเป‰เบฒเบชเบตเป€เบซเบผเบทเบญเบ‡ Cyan; เป€เบฎเบฑเบ” %>
<% table_element $a %>
<% เปเบฅเป‰เบงเป† %>




เบ„เบทเบเบฑเบ™เบเบฑเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เปเบ•เปˆเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ shell เปเบ—เบ™ html เบเบฑเบ‡.

เบ•เบปเบ™เป€เบญเบ‡ เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡ CGI เบเบฑเบš a เบฎเบนเบšเปเบšเบš
#!/usr/local/bin/haserl
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html


เปเบšเบšเบŸเบญเบกเบ•เบปเบงเบขเปˆเบฒเบ‡
" method="GET">
<% # เป€เบฎเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ‚เบญเบ‡ FORM_textfield
# เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเป€เบงเบฑเบšเบ—เบปเปˆเบงเป„เบ›
FORM_textfield=$(เบชเบฐเบ—เป‰เบญเบ™ "$FORM_textfield" | sed "s/[^A-Za-z0-9 ]//g" )
%>
<เบ›เบฐเป€เบžเบ”เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™=เบŠเบทเปˆเบ•เบปเบงเปœเบฑเบ‡เบชเบท=เบ•เบปเบงเปœเบฑเบ‡เบชเบท
Value="<% echo -n "$FORM_textfield" | tr az AZ %>" cols=20>




เบžเบดเบกเปเบšเบšเบŸเบญเบก. เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเปƒเบชเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เปเบšเบšเบŸเบญเบก, CGI เบˆเบฐเบ–เบทเบเป‚เบซเบผเบ”เปƒเบซเบกเปˆ (เบเปเบฒเบ™เบปเบ”
by $SCRIPT_NAME) เปเบฅเบฐ textfield เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบฒเป„เบกเป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเป€เบงเบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เปเบšเบšเบŸเบญเบกเบ–เบทเบเบชเบฐเปเบ”เบ‡เบ„เบทเบ™เปƒเปเปˆเบ”เป‰เบงเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒ. เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ.

เบญเบฑเบšเป‚เบซเบฅเบ” a เป€เบญเบเบฐเบชเบฒเบ™
#!/usr/local/bin/haserl --upload-limit=4096 --upload-dir=/ tmp
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html


" method=POST enctype="multipart/form-data" >



<% if test -n "$HASERL_uploadfile_path"; เบˆเบฒเบเบ™เบฑเป‰เบ™ %>

เบ—เปˆเบฒเบ™เป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบงเปˆเบฒ <%echo -n $FORM_uploadfile_name %> , เปเบฅเบฐเบกเบฑเบ™เปเบกเปˆเบ™
. เป€เบเบฑเบšเป„เบงเป‰เบŠเบปเปˆเบงเบ„เบฒเบงเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเป€เบ›เบฑเบ™ . เป„เบ”เป‰
เป„เบŸเบฅเปŒเปเบกเปˆเบ™ <% cat $HASERL_uploadfile_path | wc -c %> เป„เบšเบ•เปŒเบเบฒเบง.
<%rm -f $HASERL_uploadfile_path %> เบšเปเปˆเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบซเปˆเบงเบ‡, เป„เบŸเบฅเปŒเป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเบ–เบดเป‰เบกเปเบฅเป‰เบง
เบˆเบฒเบเป€เบงเบฑเบšเป€เบŠเบตเบšเป€เบงเบต.
<% else %>
เบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเป€เบ—เบทเปˆเบญ.
<%fi %>



เบชเบฐเปเบ”เบ‡เปเบšเบšเบŸเบญเบกเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹
--upload-limit เปเบฅเบฐเป‚เบ”เบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เปเบšเบšเบŸเบญเบก enctype to multipart/form-data. เบ–เป‰เบฒ
เบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡เป„เบŸเบฅเปŒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเป„เบ”เป‰เบ–เบทเบเบžเบดเบก, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เบฅเบถเบšเปเบฅเป‰เบง. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปเบšเบšเบŸเบญเบกเบฅเบฐเบšเบธเบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ.

RFC-2616 เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡
#!/usr/local/bin/haserl
<% echo -en "เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html\r\n\r\n" %>

...


เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ‚เปเป‰เบเปเบฒเบ™เบปเบ” HTTP เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, headers เบ„เบงเบ™เบ–เบทเบเบขเบธเบ”เป‚เบ”เบเปƒเบŠเป‰
CR+LF, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบดเบ”เบชเบฒเบ unix LF เบ›เบปเบเบเบฐเบ•เบดเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. syntax เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”
เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเบฐเบฅเบดเบ”เบชเปˆเบงเบ™เบซเบปเบงเบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบš RFC 2616.

ENVIRONMENT


เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบชเบทเบšเบ—เบญเบ”เบกเบฒเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ, เบ•เปเปˆเป„เบ›เบ™เบตเป‰
เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบชเบฐเป€เบซเบกเบตเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

HASRLVER
haserl เบชเบฐเบšเบฑเบš - เป‚เบ„เบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™.

SESSIONID
เปเบ—เบฑเบเป€เบฅเบเบ–เบฒเบ™เบชเบดเบšเบซเบปเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบชเปเบฒเบฅเบฑเบšเบŠเบตเบงเบดเบ”เบ‚เบญเบ‡ CGI (เบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบกเบทเปˆเบญ
cgi เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™; เปเบฅเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเบปเบ™เบเบงเปˆเบฒเบˆเบฐเบชเป‰เบฒเบ‡ POST เบซเบผเบท GET query เบญเบทเปˆเบ™.)

HASERL_ACCEPT_ALL
เบ–เป‰เบฒ --เบเบญเบกเบฎเบฑเบš-เบ—เบฑเบ‡เปเบปเบ” เป„เบ”เป‰โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ—เบธเบ‡โ€‹เบŠเบฒเบ”โ€‹, -1, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ 0.

HASERL_SHELL
เบŠเบทเปˆเบ‚เบญเบ‡ shell haserl เป€เบฅเบตเปˆเบกเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบเปˆเบญเบเบ‚เบญเบ‡ shell เปƒเบ™.

HASERL_UPLOAD_DIR
haserl เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบˆเบฐเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบญเบฑเบšเป‚เบซเบฅเบ”.

HASERL_UPLOAD_LIMIT
เบˆเปเบฒเบ™เบงเบ™ KB เบ—เบตเปˆเบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบชเบปเปˆเบ‡เบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบ•เบปเบงเปเบ›เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ”เบฑเบ”เปเบเป‰เบซเบผเบทเบ‚เบฝเบ™เบ—เบฑเบšเบžเบฒเบเปƒเบ™เบชเบฐเบ„เบดเบš, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ•เบปเบงเปเบ›
เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "HASERL_" เป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบšเปเปˆเบกเบตเบœเบปเบ™เบ•เปเปˆเบชเบฐเบ„เบฃเบดเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ.

เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž เบ„เบธเบ™โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐ


เบกเบตเบงเบฑเบ™เบ™เบฐเบ„เบฐเบ”เบตเบซเบผเบฒเบเป€เบฅเบทเปˆเบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ shell เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก CGI.
haserl เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ เบšเบฒเบ‡ เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ™เบตเป‰.

เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Variables
เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเบšเบฑเบ™เบˆเบธเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบเปˆเบญเบ.
เปเบเบฐ. เบกเบฑเบ™เบงเบดเป€เบ„เบฒเบฐเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเบญเบฑเบเบชเบญเบ™? เปเบฅเบฐ &, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”
เบเบฒเบ™เป‚เบˆเบกเบ•เบต "เบชเบฑเบเบขเบฒ". เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, foo.cgi?a=test;cat / etc / passwd เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบ™
เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบกเบนเบ™เบ„เปˆเบฒ เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เปเบฅเปˆเบ™ cat
/ etc / passwd เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบฅเบนเบเบ„เป‰เบฒ. Haserl เบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™
เบกเบนเบ™เบ„เปˆเบฒ: เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš; cat / etc / passwd

เบกเบฑเบ™เบ›เบญเบ”เป„เบžเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ•เบปเบงเปเบ› "เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ" เปƒเบ™ Shell scripts เป‚เบ”เบเบเบฒเบ™เบ›เบดเบ”เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒ
เบงเบปเบ‡เบขเบทเบก; เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบฎเบฑเบ”เบขเบนเปˆเปƒเบ™เบ—เบธเบเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™.

เบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ” เบซเบผเบธเบ”เบฅเบปเบ‡
เบ–เป‰เบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบชเบฐเบ„เบดเบš suid, haserl เบˆเบฐเบ•เบฑเป‰เบ‡ uid/gid เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡
เบชเบฐเบ„เบฃเบดเบš. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเบŠเบธเบ”เบ‚เบญเบ‡ CGI scripts เบ—เบตเปˆเบกเบตเบ•เปˆเบฒเบ‡เป†
เบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”. เบ–เป‰เบฒ haserl binary เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ suid, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ scripts CGI เบˆเบฐ
เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบฑเบš uid / gid เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒ.

เบ›เบฐเบ•เบดเป€เบชเบ” เบ„เปเบฒเบชเบฑเปˆเบ‡ เบญเบญเบ™เป„เบฅเบ™เปŒ เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต เป„เบ”เป‰เบฎเบฑเบš on เป„เบ”เป‰ URL
เบ–เป‰เบฒ URL เบšเปเปˆเบกเบต "=" เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ CGI spec เบฅเบฐเบšเบธเบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบˆเบฐเบ–เบทเบเปƒเบŠเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบตเบ‡เบ•เบฒเบก
เบเบฑเบš CGI spec: http://192.168.0.1/test.cgi?--upload-limit%3d2000&foo%3dbar
เบ„เบงเบ™เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป€เบ›เบฑเบ™ 2000KB เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ "Foo=bar". เบ›เบปเบโ€‹เบ›เป‰เบญเบ‡
เบ•เปเปˆโ€‹เบเบฑเบšโ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบญเบฑเบšโ€‹เป‚เบซเบฅเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹, haserl เบ›เบฐเบ•เบดเป€เบชเบ”เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡
เป€เบเบตเบ™ argv[2]. เบ–เป‰เบฒเป€เบญเบตเป‰เบ™เป€เบ›เบฑเบ™ #! script, เบ™เบฒเบเบžเบฒเบชเบฒเปเบกเปˆเบ™ argv[0], เบ—เบฑเบ‡เบซเบกเบปเบ”
เบ•เบปเบงเป€เบฅเบทเบญเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ #! เป€เบชเบฑเป‰เบ™เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป€เบ›เบฑเบ™ argv[1], เปเบฅเบฐ
เบŠเบทเปˆเบชเบฐเบ„เบฃเบดเบšเปเบกเปˆเบ™ argv[2].

LUA


เบ–เป‰เบฒเบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ lua, --shell=lua เบˆเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰ lua เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบชเบฐเบ„เบฃเบดเบšเปเบ—เบ™
เบ‚เบญเบ‡ bash shell. เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก (SCRIPT_NAME, SERVER_NAME, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ENV, เปเบฅเบฐเบ•เบปเบงเปเบ›เปเบšเบšเบŸเบญเบกเปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ FORM. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เป„เบ”เป‰
เปเบšเบšเบŸเบญเบกเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เบ”เบฑเปˆเบ‡เบ™เบตเป‰:

#!/usr/local/bin/haserl --shell=lua
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: text/html


เปเบšเบšเบŸเบญเบกเบ•เบปเบงเบขเปˆเบฒเบ‡
" method="GET">
<% # เป€เบฎเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ‚เบญเบ‡ FORM_textfield
# เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเป€เบงเบฑเบšเบ—เบปเปˆเบงเป„เบ›
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<เบ›เบฐเป€เบžเบ”เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™=เบŠเบทเปˆเบ•เบปเบงเปœเบฑเบ‡เบชเบท=เบ•เบปเบงเปœเบฑเบ‡เบชเบท
Value="<% io.write (string.upper(FORM.textfield)) %>" cols=20>




เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ <%= เปเบกเปˆเบ™เบ™เป‰เปเบฒเบ•เบฒเบ™ syntactic เบชเปเบฒเบฅเบฑเบš io.เบ‚เบฝเบ™ (เป€เบŠเบทเบญเบเบœเบนเบ( ... )) เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป„เบ”เป‰
เบ„เปˆเบฒ = เป€เบชเบฑเป‰เบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰: เบกเบนเบ™เบ„เปˆเบฒ = "<%= string.upper(FORM.textfield) %>" cols=20>

haserl lua scripts เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ haserl.loadfile(เบŠเบทเปˆโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™) เป€เบžเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ
script เป€เบ›เบฑเบ™ haserl (lua) script. เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ "เบŸเบฑเบ‡เบŠเบฑเบ™".

เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

bar.lsp
<%io.write("เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ") %>

เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™ <%= gvar %>

-- เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบฅเบงเบกเป„เบŸเบฅเปŒ --

foo.haserl
#!/usr/local/bin/haserl --shell=lua
<%m = haserl.loadfile("bar.lsp")
gvar = "เปเบฅเปˆเบ™เป€เบ›เบฑเบ™ m()"
m ()

gvar = "เป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ”เบฝเบง"
haserl.loadfile("bar.lsp")()
%>

เป€เบฎเบฑเบ”เบงเบฝเบ เบŸเบน เบˆเบฐโ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹:

เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ
เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™ Run as m()
-- เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบฅเบงเบกเป„เบŸเบฅเปŒ --
เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ
เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™ Load เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ”เบฝเบง
-- เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบฅเบงเบกเป„เบŸเบฅเปŒ --

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบกเบตเบซเบ™เป‰เบฒเป€เบŠเบตเบŸเป€เบงเบต haserl nested - page snippets
เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบ haserl tokenizer.

LUAC


เป„เบ”เป‰ เบฅเบทเบ "shell" เป€เบ›เบฑเบ™ chunk lua precompiled, เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡ scripts
เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, haserl เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ luac เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰
lua เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ. เบฅเบฑเบเบชเบฐเบ™เบฐ haserl lua เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™
เบเบฑเบ‡เบกเบตเบขเบนเปˆ. (เบ–เป‰เบฒ luac เป€เบ›เบฑเบ™เปเบเบฐเบ”เบฝเบงเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ haserl, haserl.loadfile เปเบกเปˆเบ™
เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ haserl parser เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™.)

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบฐเบ„เบฃเบดเบšเบšเปเปˆเปœเป‰เบญเบ, เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบชเบฐเบ„เบฃเบดเบš luac cgi:

เปƒเบซเป‰เป„เบŸเบฅเปŒ test.lua:
เบžเบดเบก ("เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: เบ‚เปเป‰เบ„เบงเบฒเบก/เบ—เบปเปˆเบ‡เบžเบฝเบ‡0)
เบžเบดเบก ("UUID เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเปˆเบ™เบ™เบตเป‰เปเบกเปˆเบ™: " .. ENV.SESSIONID)

เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบ luac:
luac -o test.luac -s test.lua

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ header haserl เป€เบžเบตเปˆเบกเปƒเบชเปˆเบกเบฑเบ™:
echo '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi

เบญเบตเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ lua shell,
เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ haserl เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡ preprocess scripts เบชเปเบฒเบฅเบฑเบš luac compiler เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ a
เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบŠเป‰ --shell=lua, เปเบฅเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบงเบฑเบšเป„เบŠเบ—เปŒ. เป€เบกเบทเปˆเบญเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบเปเปˆเบชเป‰เบฒเบ‡
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก runtime, เป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™ --debug เบเบฑเบš lua scripts เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ outputting
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป„เบ›เบซเบฒเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡ .lua. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

เบกเบญเบšเปƒเบซเป‰ haserl script test.cgi:
#!/usr/bin/haserl --shell=lua --debug
เบ›เบฐเป€เบžเบ”เป€เบ™เบทเป‰เบญเบซเบฒ: เบ‚เปเป‰เบ„เบงเบฒเบก/เบ—เบณเบกเบฐเบ”เบฒ

UUID เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบชเบณเบฅเบฑเบšเบเบฒเบ™เปเบฅเปˆเบ™เบ™เบตเป‰เปเบกเปˆเบ™ <%= ENV.SESSIONID %>

precompile, เบฅเบงเบšเบฅเบงเบก, เปเบฅเบฐเป€เบžเบตเปˆเบก header haserl luac:
./test.cgi > test.lua
luac -s -o test.luac test.lua
echo '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi

เปƒเบŠเป‰ haserl เบญเบญเบ™เป„เบฅเบ™เปŒเป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

  • 1
    JXplorer - เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš Java Ldap
    JXplorer - เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš Java Ldap
    java LDAP client เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ LDIF,
    เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž (inc SSL, SASL & GSSAPI),
    เปเบ›เป€เบ›เบฑเบ™เบซเบผเบฒเบเบžเบฒเบชเบฒ (inc.
    เบˆเบตเบ™), เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบญเบญเบ™เป„เบฅเบ™เปŒ, เบฎเบนเบšเปเบšเบšเบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐ
    เบญเบทเปˆเบ™เป†เบญเบตเบ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” JXplorer - A Java Ldap Browser
  • 2
    PosteRazor - เบชเป‰เบฒเบ‡เป‚เบ›เบชเป€เบ•เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡!
    PosteRazor - เบชเป‰เบฒเบ‡เป‚เบ›เบชเป€เบ•เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡!
    เบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบดเบกเป‚เบ›เบชเป€เบ•เบตเบšเป? เบเบฒเบ™เบ•เบฑเบ” PosteRazor
    เป„เบŸเบฅเปŒเบฎเบนเบšเบžเบฒเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เปˆเบญเบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
    เบžเบดเบกเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบžเบดเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบเบฒเบงเบžเบงเบเบกเบฑเบ™
    เบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบšเป‚เบ›เบชเป€เบ•เบต. FLTK เบ‡เปˆเบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ
    เปƒเบŠเป‰...
    เบ”เบฒเบงโ€‹เป‚เบซเบผเบ” PosteRazor - เบชเป‰เบฒเบ‡โ€‹เป‚เบ›โ€‹เบชโ€‹เป€เบ•เบตโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡โ€‹!
  • 3
    เป€เบŸเบ”
    เป€เบŸเบ”
    Phaser เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบ›เบตเบ”เป„เบง, เบŸเบฃเบต, เปเบฅเบฐเบกเปˆเบงเบ™เบŠเบทเปˆเบ™
    เปเบซเบผเปˆเบ‡ HTML5 เบเบญเบšเป€เบเบกเบ—เบตเปˆเบชเบฐเป€เบซเบ™เบต
    WebGL เปเบฅเบฐ Canvas rendering เบ—เบปเปˆเบง
    desktop เปเบฅเบฐเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบกเบทเบ–เบท. เป€เบเบก
    เบชเบฒเบกเบฒเบ”เบฎเปˆเบงเบก...
    เบ”เบฒเบงเป‚เบซเบฅเบ” Phaser
  • 4
    เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ VASSAL
    เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ VASSAL
    VASSAL เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป€เบเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡
    เบชเบฐเบšเบฑเบšเป€เบญเป€เบฅเบฑเบเป‚เบ•เบฃเบ™เบดเบเบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡
    เปเบฅเบฐเป€เบเบกเบšเบฑเบ”. เบกเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš
    เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เป€เบเบกเปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš,
    เปเบฅเบฐ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” VASSAL Engine
  • 5
    OpenPDF - เบชเป‰เบญเบกเบ‚เบญเบ‡ iText
    OpenPDF - เบชเป‰เบญเบกเบ‚เบญเบ‡ iText
    OpenPDF เปเบกเปˆเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Java เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡
    เปเบฅเบฐเปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒ PDF เบ”เป‰เบงเบ LGPL เปเบฅเบฐ
    เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ” MPL. OpenPDF เปเบกเปˆเบ™โ€‹
    LGPL/MPL open source เบœเบนเป‰เบชเบทเบšเบ—เบญเบ” iText,
    a
    เบ”เบฒเบงเป‚เบซเบฅเบ” OpenPDF - Fork เบ‚เบญเบ‡ iText
  • 6
    SAGA GIS
    SAGA GIS
    SAGA - เบฅเบฐเบšเบปเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”
    Geoscientific Analyzes - เปเบกเปˆเบ™เบžเบนเบกเบชเบฒเบ”
    เบŠเบญเบšเปเบงเบฅเบฐเบšเบปเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™ (GIS) เบเบฑเบš
    เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบญเบฑเบ™เบเบดเปˆเบ‡เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบš geodata
    เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡ เปเบฅเบฐ ana...
    เบ”เบฒเบงเป‚เบซเบฅเบ” SAGA GIS
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Linux เบ„เบณ เบชเบฑเปˆเบ‡

  • 1
    aarch64-linux-gnu-gnatbind
    aarch64-linux-gnu-gnatbind
    gnat, gnatbind, gnatbl, gnatchop,
    gnatfind, gnathtml, gnatkr, gnatlink,
    gnatls, gnatmake, gnatprep, gnatpsta,
    gnatpsys, gnatxref - เบเปˆเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท GNAT
    เบฅเบฒเบเบฅเบฐเบญเบฝเบ”: เบ—...
    เปเบฅเปˆเบ™ aarch64-linux-gnu-gnatbind
  • 2
    aarch64-linux-gnu-gnatchop-5
    aarch64-linux-gnu-gnatchop-5
    gnat, gnatbind, gnatbl, gnatchop,
    gnatfind, gnathtml, gnatkr, gnatlink,
    gnatls, gnatmake, gnatprep, gnatpsta,
    gnatpsys, gnatxref - เบเปˆเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท GNAT
    เบฅเบฒเบเบฅเบฐเบญเบฝเบ”: เบ—...
    เปเบฅเปˆเบ™ aarch64-linux-gnu-gnatchop-5
  • 3
    cpupower-idle-info
    cpupower-idle-info
    cpupower idle-info - Utility to
    เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™ CPU kernel idle
    SYNTAX: cpupower [ -c cpulist ]
    idle-info [เบ•เบปเบงเป€เบฅเบทเบญเบ] DESCRIPTION: เป€เบ„เบทเปˆเบญเบ‡เบกเบท
    เป€เบŠเบดเปˆเบ‡เบžเบดเบกเบญเบญเบ p...
    เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ cpupower-idle-info
  • 4
    cpupower-idle-set
    cpupower-idle-set
    cpupower idle-set - เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡ cpu
    เบ•เบปเบงเป€เบฅเบทเบญเบ kernel เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบฅเบฑเบ” idle
    SYNTAX: cpupower [ -c cpulist ]
    idle-info [เบ—เบฒเบ‡เป€เบฅเบทเบญเบ] DESCRIPTION: The
    cpupower idle-se...
    เปเบฅเปˆเบ™ cpupower-idle-set
  • 5
    g.mapsetsgrass
    g.mapsetsgrass
    g.mapsets - เบ”เบฑเบ”เปเบเป‰/เบžเบดเบกเบœเบนเป‰เปƒเบŠเป‰
    เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเปเบœเบ™เบ—เบตเปˆเบ›เบฐเบˆเบธเบšเบฑเบ™. เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆ
    เบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰
    เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบญเบทเปˆเบ™เป†โ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹. ...
    เปเบฅเปˆเบ™ g.mapsetsgrass
  • 6
    g.messagegrass
    g.messagegrass
    g.message - เบžเบดเบกเบ‚เปเป‰เบ„เบงเบฒเบก, เป€เบ•เบทเบญเบ™,
    เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบ„เบทเบšโ€‹เบซเบ™เป‰เบฒโ€‹, เบซเบผเบทโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ•เบฒเบโ€‹เปƒเบ™โ€‹
    เบงเบดเบ—เบตเบเบฒเบ™เบซเบเป‰เบฒ. เป‚เบกเบ”เบนเบ™เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™
    scripts เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰.
    เบเบฐเปเบˆ...
    เปเบฅเปˆเบ™ g.messagegrass
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Ad