ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

ແລ່ນເຊີບເວີ | Ubuntu > | Fedora > |


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" )
%>
<input type=text name=textfield
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]", "")
%>
<input type=text name=textfield
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


Ad


Ad