рдЕрдВрдЧреНрд░реЗрдЬрд╝реАрдлреНрд░реЗрдВрдЪрд╕реНрдкреЗрдирд┐рд╢

рдСрдирд╡рд░реНрдХреНрд╕ рдлрд╝реЗрд╡рд┐рдХреЙрди

рд╣реИрд╕рд░рд▓ - рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдСрдирд▓рд╛рдЗрди

рдЙрдмрдВрдЯреВ рдСрдирд▓рд╛рдЗрди, рдлреЗрдбреЛрд░рд╛ рдСрдирд▓рд╛рдЗрди, рд╡рд┐рдВрдбреЛрдЬ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдореИрдХ рдУрдПрд╕ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдСрдирд╡рд░реНрдХреНрд╕ рдореБрдлреНрдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд╣реИрд╕рд░рд▓ рдЪрд▓рд╛рдПрдВ

рдпрд╣ рдХрдорд╛рдВрдб рд╣реИрд╕рд░рд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдХрдИ рдореБрдлреНрдд рдСрдирд▓рд╛рдЗрди рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЬреИрд╕реЗ рдХрд┐ рдЙрдмрдВрдЯреВ рдСрдирд▓рд╛рдЗрди, рдлреЗрдбреЛрд░рд╛ рдСрдирд▓рд╛рдЗрди, рд╡рд┐рдВрдбреЛрдЬ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдореИрдХ рдУрдПрд╕ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд╡рд░реНрдХреНрд╕ рдлреНрд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо:

рдирд╛рдо


haserl - рдПрдореНрдмреЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЬреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо

SYNOPSIS


#!/usr/bin/haserl [--рдЦреЛрд▓=рдкрд╛рдерд╕реНрдкреЗрдХ] [--рдЕрдкрд▓реЛрдб-dir=рджрд┐рд░рд╕реНрдкреЗрдХ] [--рдЕрдкрд▓реЛрдб-рд╣реИрдВрдбрд▓рд░=рд╣реИрдВрдбрд▓рд░]
[--рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛=рд╕реАрдорд╛] [--рд╕рднреА рд╕реНрд╡реАрдХреГрдд] [--рд╕реНрд╡реАрдХрд╛рд░-рдХреЛрдИ рдирд╣реАрдВ] [--рдЪреБрдкрдЪрд╛рдк] [--рдбреАрдмрдЧ]

[ рдкрд╛рда ] [ <% рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ %> ] [ рдкрд╛рда ] ...

рд╡рд░реНрдгрди


рд╣реИрд╕рд░рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕реАрдЬреАрдЖрдИ рд░реИрдкрд░ рд╣реИ рдЬреЛ "рдкреАрдПрдЪрдкреА" рд╢реИрд▓реА рд╕реАрдЬреАрдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреИрд╢-рдЬреИрд╕рд╛ рд╢реЗрд▓ рдпрд╛ рд▓реБрдЖред рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдПрдореНрдмреЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдпрд╛ рдЬрд╣рд╛рдВ PHP рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред

рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реАрдЬреАрдЖрдИ рдЗрдВрдЬрди рдореЗрдВ рддреАрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

рдпрд╣ POST рдФрд░ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдлреЙрд░реНрдо-рддрддреНрд╡реЛрдВ рдХреЛ рдирд╛рдо = рдорд╛рди рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ
CGI рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдгред рдпреЗ рдХреБрдЫ-рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ ungi рдЖрд╡рд░рдгред

рдпрд╣ рдПрдХ рд╢реЗрд▓ рдЦреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдкрд╛рда
<% ... %> рдХреЗ рднреАрддрд░ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд╢рдмреНрджрд╢рдГ рд╢реЗрд▓ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдХреБрдЫ рд╣рдж рддрдХ рд╣реИ
рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рд╣реИ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯред

рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрд╡рд╛рдореА рдХреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
рдЗрд╕реЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗ рд░рд╣рд╛ рд╣реВрдБ suexec or cgiwrapper.

рд╡рд┐рдХрд▓реНрдк рд╕рд╛рд░рд╛рдВрд╢


рдпрд╣ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИред рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рд╡рд┐рдХрд▓реНрдк рдХреЗ рддрд╣рдд рдЕрдиреБрднрд╛рдЧ
рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╛рдоред

-рдП-рд╕рдм рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЛ
-n --рд╕реНрд╡реАрдХрд╛рд░-рдХреЛрдИ рдирд╣реАрдВ
-рдбреА --рдбреАрдмрдЧ
-рдПрд╕, --рд╢реИрд▓
-рдПрд╕, --рдЪреБрдк
-рдпреВ, --рдЕрдкрд▓реЛрдб-рдбреАрдЖрдИрдЖрд░
-рдпреВ, --рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛
-рдПрдЪ, --рдЕрдкрд▓реЛрдб-рд╣реИрдВрдбрд▓рд░

рд╡рд┐рдХрд▓реНрдк


--рд╕рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЛ
рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд╛рдорд╛рдиреНрдпрддрдГ POST рдбреЗрдЯрд╛ рддрднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм REQUEST_METHOD POST рд╣реЛ
URL рдбреЗрдЯрд╛ рдкрд░ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рддрднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм REQUEST_METHOD GET рд╣реЛред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк
REQUEST_METHOD рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ POST рдФрд░ URL рдбреЗрдЯрд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬрдм рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ REQUEST_METHOD рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рд╡рд┐рдзрд┐
POST рд╣реИ, FORM_variables COOKIE рдбреЗрдЯрд╛, GET рдбреЗрдЯрд╛ рдФрд░ POST рдбреЗрдЯрд╛ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВ
рд╡рд╣ рдЖрджреЗрд╢. рдпрджрд┐ рд╡рд┐рдзрд┐ GET рд╣реИ, рддреЛ FORM_variables COOKIE рдбреЗрдЯрд╛, POST рд╕реЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
рдбреЗрдЯрд╛, рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рднреА рдЗрдирдкреБрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ - рдмрд╕
рдХреБрдХреА рдбреЗрдЯрд╛ рдФрд░ REQUEST_METHOD.

--рд╕реНрд╡реАрдХрд╛рд░-рдХреЛрдИ рдирд╣реАрдВ
рдпрджрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ haserl рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдХреЛ http рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рд▓рд┐рдкрд┐ред рдпрджрд┐ рдХрд┐рд╕реА рд╣реЗрд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реИрд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред

- рджрд╛рдврд╝
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рд▓реЗрдВ рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдЧрд░
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ 'REQUEST_METHOD' рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╕рд╛рджрд╛/рдкрд╛рдареНрдп рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░. рдЕрдиреНрдпрдерд╛, рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рдмреНрджрд╢рдГ рдореБрджреНрд░рд┐рдд рд╣реЛрддреА рд╣реИред

--рд╢реЗрд▓=рдкрд╛рдерд╕реНрдкреЗрдХ
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрд╢-рдЬреИрд╕реЗ рд╢реЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ "/ рдмрд┐рди / рд╢"

рд╢реЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --shell= рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ/ рдмрд┐рди / рд╢ рдкреНрд░рд╛рд░реВрдкред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
"=" рдХреЗ рдмрд┐рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╛рд░реВрдк, рдЬреИрд╕рд╛ --рд╢реЗрд▓ рдореЗрдВ рд╣реИ "/ рдмрд┐рди / рдмреИрд╢ --norc"ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ
рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░реЗрдВред

рдпрджрд┐ рд▓реБрдЖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХреАрдХреГрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ "рд▓реБрдЖ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд▓реБрдЖ рд╡реА.рдПрдо. рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗрд╕ рд╕рдВрд╡реЗрджреА рд╣реИ. рдЙрджрд╛рд╣рд░рдг: --рд╢реЗрд▓=рдЪрдВрджреНрд░рдорд╛

рдПрдХ рд╡рд┐рдХрд▓реНрдк "рд▓реБрдЖрдХ" рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг рд╣реИрд╕рд░рд▓ рдФрд░ рд▓реБрдЖ рдкрд╛рд░реНрд╕рд░ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ,
рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреВрд░реНрд╡ рд╕рдВрдХрд▓рд┐рдд рд▓реБрдЖ рдЦрдВрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЗрдЦрдирд╛ рдПрд▓рдпреВрдПрд╕реА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ
рдЬрд╛рдирдХрд╛рд░реА.

--рдЪреБрдк
рд╣реЗрд╕рд░рд▓ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рджрдмрд╛ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣реИрд╕рд░рд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рди рд╣реЛред

--рдЕрдкрд▓реЛрдб-dir=рджрд┐рд░рд╕реНрдкреЗрдХ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ "/ Tmp". рдЗрд╕рдореЗрдВ рд╕рднреА рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА HASERL_xxx_рдкрде рдЗрд╕рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ. FORM_xxx_рдирд╛рдо
рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдореВрд▓ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИред

--рдЕрдкрд▓реЛрдб-рд╣реИрдВрдбрд▓рд░=рдкрд╛рдерд╕реНрдкреЗрдХ
рдЬрдм рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЗрдВред рдкреВрд░реНрдг рдкрд╛рдерд╕реНрдкреЗрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (PATH рдЦреЛрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ), рдФрд░
рдЕрдкрд▓реЛрдб-рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: FIFO рдХрд╛ рдирд╛рдо
рдЬрд┐рд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдлрд╛рдЗрд▓ рднреЗрдЬреА рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реИрдВрдбрд▓рд░ рдХреЛ 3 рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░: рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рддрдерд╛ рдирд╛рдо. рдпреЗ MIME рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА-рд╕реНрд╡рднрд╛рд╡ рд╢реАрд░реНрд╖рд▓реЗрдЦред рд╣реЗрд╕рд░рд▓ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рдлреЛрд░реНрдХ рдХрд░реЗрдЧрд╛
рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдЕрдкрд▓реЛрдб рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ FIFO рдХреЛ рднреЗрдЬ рджреА рдЬрд╛рдПрдЧреАред
рд╣реЗрд╕рд░рд▓ рддрдм рддрдХ рдмреНрд▓реЙрдХ рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рд╣реИрдВрдбрд▓рд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдпрд╣ рддрд░реАрдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ
рдХреЗрд╡рд▓.

--рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛=рд╕реАрдорд╛
рдорд╛рдЗрдо-рдПрдиреНрдХреЛрдбреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рдХрддрдо рддрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рд╕реАрдорд╛ KB рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ 0KB (рдирд╣реАрдВ
рдЕрдкрд▓реЛрдб рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рдЗрдо-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ 33% рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЕрд╡рд▓реЛрдХрди OF рд╕рдВрдЪрд╛рд▓рди


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрдИ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд╛рдВрдЯрд╛ or
рд╕реАрдЬреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рджреВрд╕рд░реА рд╡рд┐рдзрд┐ред рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ haserl рджреБрднрд╛рд╖рд┐рдпрд╛,
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

If haserl suid рд░реВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ uid/gid рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрд╡рд╛рдореА рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ HTTP_рдХреБрдХреА, рдЬреЛ рд╕рдВрднрд╡рддрдГ рд╡реЗрдм рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕рд░реНрд╡рд░. рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдкрд╛рд░реНрд╕ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ REQUEST_METHOD, рдЬрд┐рд╕реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛
рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЯреЛрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ haserl рдХрдЪреНрдЪреЗ рдкрд╛рда рд╕реЗ рдХреЛрдб рдмреНрд▓реЙрдХред рдХрдЪреНрдЪрд╛ рдкрд╛рда рд╣реИ
"рдЗрдХреЛ" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рднреА рдЯреЛрдХрди рдЙрдк-рд╢реЗрд▓ рдореЗрдВ рднреЗрдЬ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

haserl рдХрд╛рдВрдЯреЗ рдФрд░ рдПрдХ рдЙрдк-рдЦреЛрд▓ (рдЖрдорддреМрд░ рдкрд░)ред / рдмрд┐рди / рд╢) рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ред

рд╕рднреА рдЯреЛрдХрди рдЕрдиреБрдЧрд╛рдореА рдХреЗ рд╕рд╛рде рдЙрдк-рд╢реЗрд▓ рдХреЗ рдПрд╕рдЯреАрдбреАрдЖрдИрдПрди рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдирд┐рдХрд╛рд╕ рдЖрджреЗрд╢ред

рдЬрдм рдЙрдк-рдХреЛрд╢ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ haserl рджреБрднрд╛рд╖рд┐рдпрд╛ рдЕрдВрддрд┐рдо рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реИ рдФрд░
рдлрд┐рд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ.

рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЗрдб рдЗрдирдкреБрдЯ


RSI haserl рджреБрднрд╛рд╖рд┐рдпрд╛ HTTP_COOKIE рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдЧрд╛, рдФрд░
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ GET рдпрд╛ POST рд╡рд┐рдзрд┐, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ рдЬреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
haserl рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо рд╕реНрд░реЛрдд рдореЗрдВ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ,
рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдПрдХ рдЙрдкрд╕рд░реНрдЧ ( FORM_) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ "foo=bar" рднреЗрдЬрддрд╛ рд╣реИ,
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИ FORM_foo=рдмрд╛рд░.

HTTP_COOKIE рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЪрд░ рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдХреБрдХреА_) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛.
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ HTTP_COOKIE рдореЗрдВ "foo=bar" рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИ
рдХреБрдХреА_рдлреВ=рдмрд╛рд░.

GET рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, %xx рдлреЙрд░реНрдо рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЪрд░ рднреА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ ( GET_) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐
QUERY_STRING рдореЗрдВ "foo=bar" рд╢рд╛рдорд┐рд▓ рд╣реИ, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИ GET_foo=рдмрд╛рд░.

POST рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЪрд░ рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдкреЛрд╕реНрдЯ_) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛. рдХреЗ рд▓рд┐рдП
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреЛрд╕реНрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ "foo=bar" рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИ POST_foo=рдмрд╛рд░.

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, POST рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрд╣реБрдЦрдгреНрдбреАрдп / рдлрд╛рд░реНрдо-рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ,
рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рддреМрд░ рдкрд░ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрд┐рд╕реА рд╡реЗрдм рд╕реЗ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ
рдЧреНрд░рд╛рд╣рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ .

рдзреНрдпрд╛рди рджреЗрдВ рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдкрд▓реЛрдб-dir
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛. FORM_variable_name= рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐)
рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ.) HASERL_variable_path= рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ
рдЕрдкрд▓реЛрдб-dir рдЬреЛ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░рдЦрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП
рднрд░рдирд╛ рдЕрдкрд▓реЛрдб-dir рдЖрдкрдХреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА рдЕрдиреБрдорддрд┐ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм
--рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╣рд╕рд░реНрд▓
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП
рдлрд╝рд╛рдЗрд▓, рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╣реАрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ HASERL_рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓_рдкрде рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ FORM_,
GET_, рдФрд░ POST_ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреНрд▓рд╛рдЗрдВрдЯ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдирд╛рдо рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓_рдкрде=/ Etc / рдкрд╛рд╕рд╡рд░реНрдб. рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг
рдкрд╛рдерд╕реНрдкреЗрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ HASERL рдирд╛рдо рд╕реНрдерд╛рдиред рд╕реЗрд╡рд╛ рдореЗрд░реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдкрд┐рдЫрдбрд╝рд╛
рд╕рдВрдХрд▓рдиреАрдпрддрд╛, la рдирд╛рдо of la рдЕрд╕реНрдерд╛рдпреА рдкрдЯреНрдЯрд┐рдХрд╛ is рднреА рд╕рдВрдЧреНрд░рд╣рд┐рдд in рдлрд╛рд░реНрдо_рд╡реИрд░рд┐рдПрдмрд▓ = рдФрд░
рдкреЛрд╕реНрдЯ_рд╡реИрд░рд┐рдПрдмрд▓ =ред рдЗрд╕ is рдорд╛рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЪрд╛рд╣рд┐рдП рдирд╣реАрдВ be рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдлрд┐рд░, POST рдФрд░ GET рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ haserl рдХреЗрд╡рд▓ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛
рдбреЗрдЯрд╛ рдЬреЛ рдЗрд╕рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ REQUEST_METHOD рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ, рдЬрдм рддрдХ рдХрд┐
рд╕рднреА рд╕реНрд╡реАрдХреГрдд рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлреЙрд░реНрдо рдЬрд┐рд╕реЗ POST рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ a
some.cgi?foo=bar&otherdata=something рдХреЗ URI рдореЗрдВ POST рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ foo
рдФрд░ рдЕрдиреНрдп рдЖрдВрдХрдбрд╝рд╛ рдЪрд░реЛрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ HTTP_рдХреБрдХреА рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░, рдХреБрдХреА рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрдХреА рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╛ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рджреЛ рдЪрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ
рд╕рдорд╛рди рдирд╛рдо, GET рдпрд╛ POST рдбреЗрдЯрд╛ рдХреБрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЬрдм рдПрдХ рд╣реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ
FORM_variable рдХреЛ рдЙрд╕ рдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
HTTP_COOKIE рдХреЛ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж REQUEST_METHOD рдХреЛред рдпрджрд┐ рд╕реНрд╡реАрдХрд╛рд░-рд╕рдм рдХреБрдЫ
рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ HTTP_COOKIE рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ
REQUEST_METHOD рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ, рдЙрд╕рдХреЗ рдмрд╛рдж REQUEST_METHOD рджреНрд╡рд╛рд░рд╛ред рдХрд╛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг
рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ FORM_variable рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрд░ рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ
COOKIE_variable, GET_variable рдФрд░ POST_variable рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд рд╕реЗ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдирд╛рдоред

рдЬрдм рдПрдХ рд╣реА рд╕реНрд░реЛрдд рд╕реЗ рдПрдХ рд╣реА рдЪрд░ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо
рдПрдХ рдХреЛ рдмрдЪрд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╕рднреА рдкреНрд░рддрд┐рдпрд╛рдБ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣реБ-рдЪрдпрди рдХреЗ рд▓рд┐рдП), рдЕрдВрдд рдореЗрдВ "[]" рдЬреЛрдбрд╝реЗрдВ
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо рдХрд╛. рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд░рдХреЗ рд▓реМрдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╣реЛрд╕реНрдЯ=рд╣рдиреЛрдХ&рд╣реЛрд╕реНрдЯ=рдПрд╕реНрддреЗрд░&рд╣реЛрд╕реНрдЯ=рдЬреЛрд╢реБрдЖ рдХрд╛ рдкрд░рд┐рдгрд╛рдо "FORM_host=рдЬреЛрд╢реБрдЖ" рд╣реИред
рд╣реЛрд╕реНрдЯ[]=рд╣рдиреЛрдХ&рд╣реЛрд╕реНрдЯ[]рдПрд╕реНрддреЗрд░&рд╣реЛрд╕реНрдЯ[]=рдЬреЛрд╢реБрдЖ рдХрд╛ рдкрд░рд┐рдгрд╛рдо "FORM_host=рд╣рдиреЛрдХ\nрдПрд╕реНрдерд░\nрдЬреЛрд╢реБрдЖ"

рднрд╛рд╖рд╛


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ haserl.

рднрд╛рдЧреЛ
<% [рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ] %>

<% %> рдЯреИрдЧ рд╕реЗ рдЬреБрдбрд╝реА рдХреЛрдИ рднреА рдЪреАрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдк-рд╢реЗрд▓ рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдЯреЗрдХреНрд╕реНрдЯ
рд╢рдмреНрджрд╢рдГ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рд╢рд╛рдорд┐рд▓
<%рдкрд╛рдерд╕реНрдкреЗрдХ рдореЗрдВ %>

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╢рдмреНрджрд╢рдГ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХреЛ рддрдм рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдИрд╡рд▓
<%= рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ %>

рд╢реЗрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ. "рдЗрдХреЛ рдПрдХреНрд╕рдкреАрдЖрд░" рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ред

рдХреИрд╕реЗ
<%# рдЯрд┐рдкреНрдкрдгреА %>

рдЯрд┐рдкреНрдкрдгреА рдмреНрд▓реЙрдХ. рдЯрд┐рдкреНрдкрдгреА рдмреНрд▓реЙрдХ рдореЗрдВ рдХреБрдЫ рднреА рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдиреЗрд╕реНрдЯреЗрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ
рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рд╣реЗрд╕рд░рд▓ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг


рдЪреЗрддрд╛рд╡рдиреА
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓реАрдХреГрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ haserl. рдЖрдкрдХреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреБрдирд┐рдпрд╛рджреА рд╡реЗрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВ haserl (рдпрд╛ рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ
рднрд╛рд╖рд╛) рдПрдХ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВред

рд╕рд░рд▓ рдЖрджреЗрд╢
#!/usr/local/bin/haserl
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда/рд╕рд╛рджрд╛

<%# рдпрд╣ рдПрдХ рдирдореВрдирд╛ "env" рд╕реНрдХреНрд░рд┐рдкреНрдЯ %> рд╣реИ
<% env %>

рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ env рдорд╛рдЗрдо-рдкреНрд░рдХрд╛рд░ рдХреЗ "рдЯреЗрдХреНрд╕реНрдЯ/рдкреНрд▓реЗрди" рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдбред рдпрд╣ рд╣реИ
la haserl рд╕рд╛рдорд╛рдиреНрдп рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд┐рдВрдЯреЗрдВрд╡ рд╕реА.рдЬреА.рдЖрдИ.

рдкрд╛рд╢ рд╕рд╛рде рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдЙрддреНрдкрд╛рджрди
#!/usr/local/bin/haserl
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/рдПрдЪрдЯреАрдПрдордПрд▓




<% рд▓рд╛рд▓ рдиреАрд▓реЗ рдкреАрд▓реЗ рд╕рд┐рдпрд╛рди рдореЗрдВ рдПрдХ рдХреЗ рд▓рд┐рдП; %> рдХрд░реЗрдВ
"><% рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ -n "$a" %>
<% рд╣реЛ рдЧрдпрд╛ %>




рдХреА HTML рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдорд╛рдЗрдо-рдкреНрд░рдХрд╛рд░ рдХрд╛ "рдЯреЗрдХреНрд╕реНрдЯ/html" рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреЗрдЬрддрд╛ рд╣реИ
рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рддрддреНрд╡ред

рдЙрдкрдпреЛрдЧ рдЦреЛрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ.
#!/usr/local/bin/haserl
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/рдПрдЪрдЯреАрдПрдордПрд▓

<% # рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
рддрд╛рд▓рд┐рдХрд╛_рддрддреНрд╡() {
рдкреНрд░рддрд┐рдзреНрд╡рдирд┐" $1 "
}
%>



<% рд▓рд╛рд▓ рдиреАрд▓реЗ рдкреАрд▓реЗ рд╕рд┐рдпрд╛рди рдореЗрдВ рдПрдХ рдХреЗ рд▓рд┐рдП; %> рдХрд░реЗрдВ
<% рддрд╛рд▓рд┐рдХрд╛_рддрддреНрд╡ $a %>
<% рд╣реЛ рдЧрдпрд╛ %>




рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдореНрдмреЗрдбреЗрдб HTML рдХреЗ рдмрдЬрд╛рдп рд╢реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕реНрд╡рдпрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╕реАрдЬреАрдЖрдИ рд╕рд╛рде рдореЗрдВ a рдкреНрд░рдкрддреНрд░
#!/usr/local/bin/haserl
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/рдПрдЪрдЯреАрдПрдордПрд▓


рдирдореВрдирд╛ рдкреНрд░рдкрддреНрд░
" method="GET">
<% # FORM_textfield рдХрд╛ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдВ
# рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП
FORM_textfield=$( echo "$FORM_textfield" | sed "s/[^A-Za-z0-9 ]//g")
%>
<рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░=рдЯреЗрдХреНрд╕реНрдЯ рдирд╛рдо=рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб
рд╡реИрд▓реНрдпреВ='<% рдЗрдХреЛ -рдПрди '$FORM_textfield' | tr az AZ %>' cols=20>




рдПрдХ рдлреЙрд░реНрдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ. рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдлреЙрд░реНрдо рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реАрдЬреАрдЖрдИ рдкреБрдирдГ рд▓реЛрдб (рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
by $SCRIPT_NAME) рдФрд░ рд╡реЗрдм рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЗ рд╕рд╛рде рдкреНрд░рдкрддреНрд░ рдкреБрдирдГ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкрд╛рда рдЕрдкрд░рдХреЗрд╕ рд╣реИ.

рдЕрдкрд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ a рдкрдЯреНрдЯрд┐рдХрд╛
#!/usr/рд╕реНрдерд╛рдиреАрдп/рдмрд┐рди/haserl --upload-limit=4096 --upload-dir=/ Tmp
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/рдПрдЪрдЯреАрдПрдордПрд▓


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



<% рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг -n "$HASERL_uploadfile_path"; рдлрд┐рд░ %>

рдЖрдкрдиреЗ <% echo -n $FORM_uploadfile_name %> рдирд╛рдо рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА, рдФрд░ рд╡рд╣ рд╣реЛ рдЧрдИ
. рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ <% cat $HASERL_uploadfile_path | рдереА wc -c %> рдмрд╛рдЗрдЯреНрд╕ рд▓рдВрдмрд╛ред
<% rm -f $HASERL_uploadfile_path %> рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдлрд╝рд╛рдЗрд▓ рдЕрднреА рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИ
рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ.
<% рдЕрдиреНрдп %>
рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХреА рд╣реИ.
<% fi %>



рдПрдХ рдкреНрд░рдкрддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
--рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛ рдФрд░ рдлреЙрд░реНрдо рд╕реЗрдЯ рдХрд░рдХреЗ рдПрдирдХреНрдЯрд╛рдЗрдк рд╕реЗрд╡рд╛ рдореЗрд░реЗ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ/рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ред рдЕрдЧрд░
рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрддрд╛ рд╣реИ, рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдореБрджреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛. рдЕрдиреНрдпрдерд╛, рдлреЙрд░реНрдо рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХреА рд╣реИред

рдЖрд░рдПрдлрд╕реА-2616 рдЕрдиреБрд░реВрдкрддрд╛
#!/usr/local/bin/haserl
<% рдЗрдХреЛ -рдПрди "рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/html\r\n\r\n" %>

...


HTTP рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕реАрдЖрд░+рдПрд▓рдПрдл, рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдпреВрдирд┐рдХреНрд╕ рдПрд▓рдПрдл рд▓рд╛рдЗрди рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрдЬрд╛рдпред рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
RFC 2616 рдЕрдиреБрд░реВрдк рд╣реЗрдбрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд╛рддрд╛рд╡рд░рдг


рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣рдореЗрд╢рд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

рд╣реЗрд╕рд░рд▓реНрд╡рд░
haserl рд╕рдВрд╕реНрдХрд░рдг - рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рдЯреИрдЧ.

рд╕рддреНрд░ рдЖрдИрдбреА
рдПрдХ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЯреИрдЧ рдЬреЛ рд╕реАрдЬреАрдЖрдИ рдХреЗ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ (рдпрд╣ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрдм
рд╕реАрдЬреАрдЖрдИ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ; рдФрд░ рддрдм рддрдХ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рдЬрдм рддрдХ рдХреЛрдИ рдЕрдиреНрдп POST рдпрд╛ GET рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рди рд╣реЛ рдЬрд╛рдПред)

HASERL_ACCEPT_ALL
рдЕрдЧрд░ --рд╕рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЛ рдЭрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, -1, рдЕрдиреНрдпрдерд╛ 0.

HASERL_SHELL
рд╢реЗрд▓ рд╣реИрд╕рд░рд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдЙрдк-рд╢реЗрд▓ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╢реБрд░реВ рд╣реБрдЖред

HASERL_UPLOAD_DIR
рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ haserl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

HASERL_UPLOAD_LIMIT
рдХреЗрдмреА рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдЗрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднреАрддрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐
"HASERL_" рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдХреЗрд╡рд▓ рд╕реВрдЪрдирд╛рддреНрдордХ рд╣реИ, рдФрд░ рдЪрд▓ рд░рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рд╕реАрдЬреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рд╕рд╛рд╣рд┐рддреНрдп рдореМрдЬреВрдж рд╣реИред
haserl рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХреБрдЫ рдЗрд╕ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ред

рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рдЙрдк-рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ
рд╢рдВрдЦред рдпрд╣ рдкрд╛рддреНрд░реЛрдВ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ? рдФрд░ &, рдЗрд╕рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ
"рдЗрдВрдЬреЗрдХреНрд╢рди" рд╣рдорд▓реЗ. рдЙрджрд╣рд╛рд░рдг рдХреЗ рд▓рд┐рдП, foo.cgi?a=рдкрд░реАрдХреНрд╖рдг;рдмрд┐рд▓реНрд▓реА / Etc / рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рдХрддрд╛ рд╣реИ
рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдлрд┐рд░ рджреМрдбрд╝рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдмрд┐рд▓реНрд▓реА
/ Etc / рдкрд╛рд╕рд╡рд░реНрдб рдЧреНрд░рд╛рд╣рдХ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ. рд╣рд╕рд░рд▓реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧрд╛
рдореВрд▓реНрдп: рдкрд░реАрдХреНрд╖рдг;рдмрд┐рд▓реНрд▓реА / Etc / рдкрд╛рд╕рд╡рд░реНрдб

рдЗрд╕ "рдЦрддрд░рдирд╛рдХ" рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ
рдЙрджреНрдзрд░рдг; рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕рддреНрдпрд╛рдкрди рд╕рднреА рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЫреЛрдбрд╝рдиреЗ
рдпрджрд┐ рдПрдХ suid рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, haserl рдХреЗ рд╕реНрд╡рд╛рдореА рдХреЗ рдпреВрдЖрдИрдбреА/рдЬреАрдЖрдИрдбреА тАЛтАЛрдХреЛ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛
рд▓рд┐рдкрд┐ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдЬреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╣реИрдВ
рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ред рдпрджрд┐ haserl рдмрд╛рдЗрдирд░реА рд╕реБрдЗрдб рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реАрдЬреАрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧреА
рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдпреВрдЖрдИрдбреА/рдЬреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВред

рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЖрджреЗрд╢ line рдкреИрд░рд╛рдореАрдЯрд░ рджреА on la рдпреВрдЖрд░рдПрд▓
рдпрджрд┐ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдЕрдирдПрдиреНрдХреЛрдбреЗрдб "=" рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реАрдЬреАрдЖрдИ рд╕реНрдкреЗрдХ рд╡рд┐рдХрд▓реНрдк рдмрддрд╛рддрд╛ рд╣реИ
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗ рдЕрдиреБрд╕рд╛рд░
рд╕реАрдЬреАрдЖрдИ рд╕реНрдкреЗрдХ рдХреЗ рд▓рд┐рдП: http://192.168.0.1/test.cgi?--рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛%3рдбреА2000&рдлреВ%3рдбреАрдмрд╛рд░
"Foo=bar" рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрд▓реЛрдб-рд╕реАрдорд╛ рдХреЛ 2000KB рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдкрд▓реЛрдб рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз, haserl рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ
argv рд╕реЗ рдкрд░реЗ[2]ред рдпрджрд┐ # рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рджреБрднрд╛рд╖рд┐рдпрд╛ argv[0] рд╣реИ, рд╕рднреА
# рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк! рд▓рд╛рдЗрди рдХреЛ argv[1], рдФрд░ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд╛рдо argv[2] рд╣реИред

LUA


рдпрджрд┐ lua рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, --рд╢реЗрд▓=рд▓реБрдЖ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп lua рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛
рдмреИрд╢ рд╢реЗрд▓ рдХрд╛. рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (SCRIPT_NAME, SERVER_NAME, рдЖрджрд┐) рд░рдЦреЗ рдЧрдП рд╣реИрдВ
ENV рддрд╛рд▓рд┐рдХрд╛, рдФрд░ рдкреНрд░рдкрддреНрд░ рдЪрд░ рдХреЛ FORM рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдЙрдкрд░реЛрдХреНрдд рд╕реНрд╡-рд╕рдВрджрд░реНрднрд┐рдд рдлреЙрд░реНрдо рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

#!/usr/local/bin/haserl --shell=lua
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдЯреЗрдХреНрд╕реНрдЯ/рдПрдЪрдЯреАрдПрдордПрд▓


рдирдореВрдирд╛ рдкреНрд░рдкрддреНрд░
"рд╡рд┐рдзрд┐='рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ'>
<% # FORM_textfield рдХрд╛ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдВ
# рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░=рдЯреЗрдХреНрд╕реНрдЯ рдирд╛рдо=рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб
рд╡реИрд▓реНрдпреВ = "<% io.write (string.upper(FORM.textfield)) %>" cols=20>




<%= рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИ io.рд▓рд┐рдЦреЛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ( ... )) рддреЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдорд╛рди = рдЙрдкрд░реЛрдХреНрдд рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ: рдорд╛рди='<%= string.upper (FORM.textfield) %>" рдХреЛрд▓реНрд╕=20>

haserl lua рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Haserl.loadfile (рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо) рдХрд┐рд╕реА рд▓рдХреНрд╖реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╣реЗрд╕рд░рд▓ (рд▓реБрдЖ) рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рдлрд╝рдВрдХреНрд╢рди" рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

рдмрд╛рд░.рдПрд▓рдПрд╕рдкреА
<% io.write ("рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб") %>

рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ <%= gvar %> рд╣реИ

-- рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд --

foo.haserl
#!/usr/local/bin/haserl --shell=lua
<% m = haserl.loadfile("bar.lsp")
gvar = "m() рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ"
рдо()

gvar = "рдПрдХ рдЪрд░рдг рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ"
haserl.loadfile("bar.lsp")()
%>

рд░рдирд┐рдВрдЧ foo рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ:

рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡
рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ m() рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ рд╣реИ
-- рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд --
рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡
рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ рдПрдХ рдЪрд░рдг рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ рд╣реИ
-- рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд --

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдиреЗрд╕реНрдЯреЗрдб рд╣реИрд╕рд░рд▓ рд╕рд░реНрд╡рд░ рдкреЗрдЬ - рдкреЗрдЬ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ
рдЬреЛ рдХрд┐ haserl рдЯреЛрдХрдирдирд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдПрд▓рдпреВрдПрд╕реА


RSI рд▓реБрдЖрд╕реА "рд╢реЗрд▓" рдПрдХ рдкреВрд░реНрд╡ рд╕рдВрдХрд▓рд┐рдд рд▓реБрдЖ рдЦрдВрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рдВрдкрд╛рджрди рдФрд░ рдкрд░реАрдХреНрд╖рдг
рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, haserl рдХреЛ рдХреЗрд╡рд▓ luac рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЫреЛрдЯреЗ рдореЗрдореЛрд░реА рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рднреА lua рд╕рдорд░реНрдердиред рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА haserl lua рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ
рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдзред (рдпрджрд┐ luac рд╣реА haserl рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдПрдХрдорд╛рддреНрд░ рд╢реЗрд▓ рд╣реИ, рддреЛ haserl.loadfile рд╣реИ
рдЕрдХреНрд╖рдо, рдХреНрдпреЛрдВрдХрд┐ рд╣реИрд╕рд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред)

рдпрд╣рд╛рдВ рдПрдХ рддреБрдЪреНрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ luac cgi рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдлрд╝рд╛рдЗрд▓ test.lua рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ("рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: text/plain0)
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ("рдЗрд╕ рд░рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдпреВрдпреВрдЖрдИрдбреА рд╣реИ: " .. ENV.SESSIONID)

рдЗрд╕реЗ luac рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
luac -o test.luac -s test.lua

рдФрд░ рдлрд┐рд░ рдЗрд╕рдореЗрдВ haserl рд╣реЗрдбрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:
рдЗрдХреЛ '#!/usr/bin/haserl --shell=luac' | рдмрд┐рд▓реНрд▓реА - test.luac >luac.cgi

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рдирдХ рд▓реБрдЖ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ,
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж haserl рдиреЗ рд╕реНрд╡рдпрдВ luac рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛
рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛. рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, --shell=lua рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВред рдЬрдм рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ
рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг, рдЕрдкрдиреА рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ --рдбреАрдмрдЧ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдЪрд▓рд╛рдПрдВ
.lua рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

haserl рд╕реНрдХреНрд░рд┐рдкреНрдЯ test.cgi рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
#!/usr/bin/haserl --shell=lua --debug
рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда/рд╕рд╛рджрд╛

рдЗрд╕ рд░рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ UUID <%= ENV.SESSIONID %> рд╣реИ

рдкреНрд░реАрдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ, рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╣реИрд╕рд░рд▓ рд▓реВрдХ рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗрдВ:
./test.cgi > test.lua
luac -s -o test.luac test.lua
рдЗрдХреЛ '#!/usr/bin/haserl --shell=luac' | рдмрд┐рд▓реНрд▓реА - test.luac >luac.cgi

onworks.net рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд▓рд╛рдЗрди haserl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдлреНрд░реА рд╕рд░реНрд╡рд░ рдФрд░ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди

рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд╛рдЗрдиреЗрдХреНрд╕ рдПрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рд▓рд┐рдирдХреНрд╕ рдХрдорд╛рдВрдб

Ad