cgi พาณิชย์ไม่จำกัด อีคอมเมิร์ซที่ชัดเจน กลยุทธ์การเขียนโปรแกรมทั่วไป

อีคอมเมิร์ซในภาษารัสเซียที่ชัดเจน ธุรกิจออนไลน์ทำงานอย่างไร?

ช่วงนี้มีโครงการที่เกี่ยวข้องกับการซื้อขายออนไลน์เพิ่มมากขึ้น ในขณะที่ศึกษาพื้นที่นี้ ฉันไม่พบคำอธิบายทั่วไปและเข้าใจได้ของกระบวนการนี้ ดังนั้นฉันจึงตัดสินใจทำบางอย่างเช่นเอกสารโกงที่คุณสามารถอ้างอิงได้ตลอดเวลาเพื่อทำความเข้าใจขั้นตอนในพื้นที่เช่นอีคอมเมิร์ซ

ฉันจะจองทันทีโดยเน้นที่กระบวนการและช่องทางที่ช่วยดึงดูดลูกค้า

อีคอมเมิร์ซ: มันเกี่ยวกับอะไร?

คำจำกัดความบน แหล่งที่มาที่แตกต่างกันพูดบางอย่างเกี่ยวกับการขายสินค้าหรือบริการผ่านอินเทอร์เน็ต พูดง่ายๆ ก็คือ อีคอมเมิร์ซคือกิจกรรมออนไลน์ใดๆ ก็ตามที่มีเงินปรากฏขึ้น

ชอปปิ้ง ขาย ประกันภัย ธนาคาร เงินอิเล็กทรอนิกส์ ทุกอย่างอยู่ที่นี่ เอาไปลงนามได้เลย

จากเป้าหมาย

เพื่อให้เข้าใจปัญหา ฉันขอแนะนำให้เริ่มต้นเส้นทางจากจุดสิ้นสุด เป้าหมายของธุรกิจใด ๆ คืออะไร? ถูกต้องทำเงิน ลองจินตนาการถึงผลิตภัณฑ์ใดๆ ก็ตาม เช่น ถุงเท้าซิลิโคน ทำไมจะไม่ล่ะ!

ฉันนึกถึงสิ่งแรกที่นึกขึ้นได้ ปรากฎว่ามีบางอย่างเช่นนี้...

งานของเราคือการสร้างรายได้จากถุงเท้าเหล่านี้ เรากำลังคิดถึงอินเทอร์เน็ต อืม...ทำไมไม่สร้างเว็บไซต์แล้วยอดขายจะไปแบบนั้นล่ะ เก็บมัลดีฟส์ไว้ให้ฉันเถอะ! แต่มันไม่ง่ายขนาดนั้น

ฉันชอบวาดรูปมาก ช่วยให้เข้าใจกระบวนการต่างๆ มาวาดกันเถอะ!

จนถึงตอนนี้โมเดลของเรามีลักษณะเช่นนี้ เราเอาถุงเท้ามาใส่บนอินเทอร์เน็ตและรับเงิน นี่มันเยี่ยมมาก! ดวงตาของคุณร้อนผ่าว ฝ่ามือของคุณมีเหงื่อออก และคุณอยากจะลงมือทำธุรกิจแล้ว แต่คุณจำเป็นต้องสร้างเว็บไซต์หรือแพลตฟอร์มการขายหรือไม่?

เว็บไซต์หรือแพลตฟอร์มสำหรับการขาย

กิน โซลูชั่นต่างๆเพื่อวางผลิตภัณฑ์ของคุณบนเวิลด์ไวด์เว็บ คุณสามารถสร้างเว็บไซต์ของคุณเองหรือใช้แพลตฟอร์มของบุคคลที่สาม (กลุ่ม หน้าบนโซเชียลเน็ตเวิร์ก กระดานข้อความ ฯลฯ) มาหยุดที่ไซต์กัน

คุณสั่งซื้อเว็บไซต์ ใช้เทมเพลตสำเร็จรูป หรือสร้างเองโดยใช้เครื่องมือสร้างเว็บไซต์ (คุณสามารถใช้ Google CMS ได้) ก็ไม่สำคัญ ต่อไปเราวางถุงเท้าซิลิโคนจำนวนหนึ่ง ประเภทต่างๆและมีความสุข

ขออภัยที่ขัดจังหวะการอ่าน เข้าร่วมช่องโทรเลขของฉัน การประกาศบทความใหม่ๆ การพัฒนาผลิตภัณฑ์ดิจิทัล และแนวทางการเติบโต ทั้งหมดนี้รวมอยู่ที่นี่แล้ว กำลังคอยคุณอยู่! มาต่อกัน...

ระบบการชำระเงิน

แต่เพื่อให้คนซื้อจากคุณที่นี่และเดี๋ยวนี้จำเป็นต้องปรับเปลี่ยนระบบการชำระเงิน นี่คือบริการประเภทหนึ่งที่ให้คุณซื้อสินค้าออนไลน์ผ่าน: บัตรธนาคาร เงินอินเทอร์เน็ต โทรศัพท์มือถือและอีกมากมาย สำหรับสิ่งนี้คุณจะต้องแบ่งปันเปอร์เซ็นต์ของธุรกรรม แต่วิธีนี้คุณจะทำให้ชีวิตของคุณง่ายขึ้นมาก

เลือกบริการที่เหมาะกับคุณ เปอร์เซ็นต์จะสูงขึ้นและบางแห่งจะมีการสมัครสมาชิกหรืออย่างอื่น เพียงแค่ทำการวิจัยเล็กน้อย ใส่รหัสที่จำเป็นบนเว็บไซต์ของคุณ เชื่อมโยงธุรกรรมทั้งหมดเข้ากับบัญชีบัตรของคุณ แล้วว๊ะ!

นั่นดูเหมือนจะเป็นทั้งหมด มีเว็บไซต์ การ์ดผลิตภัณฑ์ด้วย และแม้แต่ปุ่ม "ซื้อ" ก็ใช้งานได้ แต่มีบางอย่างขาดหายไป... ไม่มีลูกค้าจะซื้อไหลเข้ามา

ลูกค้าหลั่งไหล

โดยที่ CAC = ต้นทุนในการหาลูกค้าใหม่ MCC (ต้นทุนแคมเปญการตลาด) = ต้นทุนรวมของค่าใช้จ่ายทางการตลาดที่มุ่งดึงดูดลูกค้า (แต่ไม่รักษาลูกค้าไว้) W (ค่าจ้าง) = เงินเดือนสำหรับนักการตลาดและผู้จัดการฝ่ายขาย S (ซอฟต์แวร์) = ต้นทุนของซอฟต์แวร์ที่ใช้ในการโฆษณาและการขาย (เช่น แพลตฟอร์มการขายที่ใช้ ระบบการตลาดอัตโนมัติ การทดสอบ A/B บริการการวิเคราะห์ ฯลฯ) PS (บริการระดับมืออาชีพ) = ต้นทุน บริการระดับมืออาชีพบริการที่มอบให้กับแผนกการตลาดและการขาย (การออกแบบ การให้คำปรึกษา ฯลฯ) O (อื่นๆ) = ต้นทุนค่าใช้จ่ายอื่นๆ ที่เกี่ยวข้องกับฝ่ายการตลาดและการขาย CA (ลูกค้าได้มา) = จำนวนลูกค้าที่ดึงดูดทั้งหมด

แต่เราต้องไม่ลืมเกี่ยวกับคุณภาพของลูกค้า LTV จะช่วยได้ที่นี่

ตัวชี้วัดที่สำคัญ: LTV

มูลค่าเวลาสดหรือวงจรชีวิตของลูกค้าเป็นอีกตัวบ่งชี้หนึ่งในอีคอมเมิร์ซที่ต้องนำมาพิจารณา มันแสดงให้เห็นว่าลูกค้ารายหนึ่งนำมาซึ่งรายได้โดยเฉลี่ยเท่าใด มีแนวทางการคำนวณที่แตกต่างกัน ฉันเลือกวิธีจริงตามผลกำไร ซึ่งเป็นหนึ่งในวิธีที่แม่นยำที่สุด

นี่เป็นเพียงผลรวมของรายได้รวมจากประวัติการซื้อทั้งหมดของลูกค้าแต่ละราย เพิ่มผลรวมของการซื้อของลูกค้าทั้งหมด (ธุรกรรม) ไปยังธุรกรรม N โดยที่ธุรกรรม N คือการซื้อครั้งสุดท้ายที่ลูกค้าทำกับบริษัทของคุณ หากคุณมีสิทธิ์เข้าถึงข้อมูลธุรกรรมของลูกค้าทั้งหมด คุณสามารถคำนวณได้อย่างง่ายดายโดยใช้ Excel

LTV = (ธุรกรรม 1 + ธุรกรรม 2 + ธุรกรรม 3... + ธุรกรรม N) x ส่วนแบ่งกำไรในรายได้

การคำนวณ LTV ตามกำไรสุทธิจะแสดงกำไรจริงที่ลูกค้านำมาสู่บริษัทของคุณในท้ายที่สุด โดยคำนึงถึงต้นทุนการบริการลูกค้า ต้นทุนการรักษา ต้นทุนการดึงดูด ฯลฯ ผลลัพธ์คือการคำนวณที่ซับซ้อนโดยอิงตามข้อมูลแต่ละบุคคล กำไรทั้งหมดที่เกิดขึ้นต่อลูกค้าหนึ่งรายในช่วงเวลาหนึ่งจะทำให้คุณมีความเข้าใจที่ถูกต้องเกี่ยวกับความสามารถในการทำกำไรของลูกค้าจนถึงปัจจุบัน

สามารถดูแนวทางอื่นๆ ได้ที่

ตัวชี้วัดที่สำคัญ: อัตราส่วน CAC และ LTV

เพื่อให้เข้าใจถึงความอยู่รอดของธุรกิจ สิ่งสำคัญคือต้องดูอัตราส่วนของอัตราส่วน CAC:LTV ทั้งสองที่กล่าวถึง

  • น้อยกว่า 1:1 - คุณกำลังเร่งรีบจนล้มละลาย
  • 1:1 – คุณสูญเสียเงินจากลูกค้าที่ดึงดูดทุกราย
  • 1:2 – ดูเหมือนจะดี แต่ดูเหมือนว่าคุณจะลงทุนไม่มากพอ และคุณสามารถพัฒนาได้เร็วขึ้น เปิดตัวแคมเปญการได้มาซึ่งลูกค้าเชิงรุกมากขึ้นและบรรลุอัตราใกล้เคียง 1:3
  • 1:3 – อัตราส่วนในอุดมคติ คุณมีธุรกิจที่เจริญรุ่งเรืองและมีรูปแบบธุรกิจที่แข็งแกร่ง

ตัวชี้วัดที่สำคัญ: อย่าลืม ROI

ดังที่เราได้กล่าวไว้ข้างต้น ในอีคอมเมิร์ซ คุณต้องเข้าใจอย่างชัดเจนว่าการใช้ช่องทางการซื้อกิจการนั้นได้ผลกำไรหรือไม่ นอกจาก LTV และ CAC แล้ว ยังมีตัวบ่งชี้ที่สำคัญอีกประการหนึ่ง: ROI มันแสดงให้เห็นว่าการลงทุนของคุณในกรณีของเราในด้านการโฆษณานั้นได้รับผลตอบแทนหรือไม่ นั่นคือ. ในที่สุดเงินลงทุน 1 รูเบิลก็พาเราไปได้

ใช้สูตรง่ายๆ ในการคำนวณ:

โดยที่ “รายได้จากแคมเปญ” คือความแตกต่างระหว่างรายได้จากช่องทางและราคาต้นทุนของผลิตภัณฑ์ของคุณ และคำนวณกำไรลบค่าโฆษณา

ดังนั้น สูตรที่มีรายละเอียดมากขึ้นจะมีลักษณะดังนี้:

ROI = (รายได้ของช่อง – ต้นทุน) – ค่าใช้จ่ายในการโฆษณา / ค่าใช้จ่ายในการโฆษณา x 100%

อ่านตัวอย่างโดยละเอียดเพิ่มเติมพร้อมการคำนวณ ในความเป็นจริง สูตรง่ายๆ นี้วางอยู่ในตาราง Excel เดียวกัน ซึ่งทุกอย่างจะถูกคำนวณโดยอัตโนมัติ

ตัวบ่งชี้ทั้งสามที่เราได้พูดคุยกันมีความสำคัญในอีคอมเมิร์ซ แต่ละข้อช่วยให้คุณพบปัญหาคอขวดในโฟลว์ของคุณและทำงานร่วมกับมันได้ นี่คือจุดที่ศักยภาพในการเติบโตของธุรกิจอยู่ ฉันเพิ่มอีกเล็กน้อยให้กับโมเดลของเราด้วยถุงเท้า

เป็นไปไม่ได้ที่จะรวมทุกอย่างไว้ในเนื้อหาเดียวแล้วใครจะอ่านได้นานขนาดนี้? หลังจากนั้นฉันจะจัดทำคำแนะนำแยกต่างหากเกี่ยวกับความแตกต่างของอีคอมเมิร์ซที่อาจรบกวนการขาย

ทั้งหมด

โดยรวมแล้ว ตอนนี้คุณมีความเข้าใจทั่วไปเกี่ยวกับการซื้อขายออนไลน์หรืออีคอมเมิร์ซแล้ว นอกจากนี้ตามที่พวกเขากล่าวว่า: “มารอยู่ในรายละเอียด” ศึกษาแต่ละช่องทางแยกกัน คำนวณตัวบ่งชี้ประสิทธิภาพ และค้นหาข้อมูลเชิงลึกใหม่ๆ ในเรื่องเล็กๆ น้อยๆ การขายทางอินเทอร์เน็ตสำหรับคุณและอีกมากมาย! และฉันมีอีกหนึ่งวัสดุ

ใช่ฉันเกือบลืม สวัสดีปีใหม่ผู้อ่านที่รัก! ฉันขอให้คุณมีชัยชนะและความสำเร็จที่ยิ่งใหญ่ในปีหน้า!

เจ้าของร้านค้าออนไลน์คุ้นเคยกับแนวคิด "พาณิชย์อิเล็กทรอนิกส์" โดยตรง พวกเขารู้คำตอบสำหรับคำถาม "อีคอมเมิร์ซ - คืออะไร" อยู่แล้ว แต่ถ้าคุณอ่านให้ละเอียด จะมีความแตกต่างมากมายเกิดขึ้น และคำนี้ก็จะมีความหมายที่กว้างกว่า

อีคอมเมิร์ซ: มันคืออะไร?

แนวคิดทั่วไปมีดังนี้ อีคอมเมิร์ซเข้าใจว่าเป็นแนวทางหนึ่งในการดำเนินธุรกิจ ซึ่งเกี่ยวข้องกับการรวมการดำเนินการจำนวนหนึ่งที่ใช้การถ่ายโอนข้อมูลดิจิทัลในการจัดหาสินค้าหรือการให้บริการ/งาน รวมถึงการใช้ อินเทอร์เน็ต.

ดังนั้นจึงเป็นธุรกรรมเชิงพาณิชย์ใดๆ ที่ดำเนินการโดยใช้วิธีการสื่อสารทางอิเล็กทรอนิกส์

รูปแบบการทำงานมีดังต่อไปนี้:

  • ทุกคนสามารถเป็นบล็อกเกอร์หรือเจ้าของหน้าอินเทอร์เน็ตของตนเอง) ลงทะเบียนในระบบนี้
  • รับลิงค์ของตัวเอง
  • วางรหัสพิเศษบนหน้าเว็บ - โฆษณาสำหรับพันธมิตรอย่างเป็นทางการที่เลือกของเครือข่ายพันธมิตรอีคอมเมิร์ซจะปรากฏขึ้น
  • ติดตามการแปลงเว็บไซต์
  • รับเปอร์เซ็นต์ที่แน่นอนสำหรับการซื้อแต่ละครั้งโดยผู้เยี่ยมชมเว็บไซต์ของคุณที่ติดตามลิงก์พันธมิตร

WP อีคอมเมิร์ซ

ปัจจุบันผู้คนจำนวนมากหลงใหลในอีคอมเมิร์ซ สาเหตุหลักมาจากความปรารถนาที่จะสร้างเว็บไซต์ของตนเอง ซึ่งเป็นร้านค้าออนไลน์ที่มีเอกลักษณ์เฉพาะสำหรับขายสินค้าของตนเอง เพื่อตอบสนองความต้องการที่เพิ่มขึ้นนี้ นักพัฒนาจึงมุ่งเน้นไปที่การสร้างเทมเพลตอีคอมเมิร์ซ มาดูกันว่านี่คืออะไรต่อไป

ตัวอย่างหนึ่งของเทมเพลตคือ WordPress e-commerce เป็นปลั๊กอินตะกร้าสินค้าสำหรับ WordPress (หนึ่งในระบบการจัดการทรัพยากรเว็บที่มีชื่อเสียงที่สุด) ซึ่งมีจุดประสงค์เพื่อสร้างและจัดระเบียบบล็อกเป็นหลัก) มีให้บริการฟรีโดยสมบูรณ์และอนุญาตให้ผู้เยี่ยมชมเว็บไซต์ทำการซื้อบนเว็บไซต์

กล่าวอีกนัยหนึ่งปลั๊กอินนี้ช่วยให้คุณสร้างร้านค้าออนไลน์ (อิงจาก WordPress) ปลั๊กอินอีคอมเมิร์ซนี้มีทุกสิ่ง เครื่องมือที่จำเป็นการตั้งค่าและตัวเลือกที่ตอบโจทย์ความต้องการยุคใหม่

แอนโดเวอร์ แมสซาชูเซตส์ 19 พฤศจิกายน 2546

เดอะ คอมเมิร์ซ กรุ๊ป อิงค์ (NYSE: CGI) นักเขียนประกันภัยรถยนต์ส่วนบุคคลรายใหญ่ที่สุดในแมสซาชูเซตส์และ CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;) ผู้นำด้านผู้ให้บริการเทคโนโลยีสารสนเทศและบริการประมวลผลทางธุรกิจ ประกาศในวันนี้ถึงการลงนามในสัญญาต่ออายุสัญญาจ้างกระบวนการธุรกิจภายนอก (BPO) เป็นระยะเวลา 6 ปี มูลค่า 35 ล้านดอลลาร์สหรัฐ CGI จะให้บริการประมวลผลนโยบายอย่างเต็มรูปแบบสำหรับกลุ่มผู้โดยสารส่วนบุคคลและรถยนต์เชิงพาณิชย์ในรัฐแมสซาชูเซตส์ ตลอดจนจัดหาเครื่องมืออินเทอร์เฟซตัวแทน CollaborativeEdge ของ CGI การสนับสนุนและบำรุงรักษาแอปพลิเคชัน การสนับสนุนด้านกฎระเบียบ การให้คำปรึกษาด้านระบบ และบริการการจัดการเอกสาร

Gerald Fels รองประธานบริหารและ CFO ของ Commerce Group กล่าวว่า "ในฐานะผู้ให้บริการรถยนต์ส่วนบุคคลชั้นนำในรัฐแมสซาชูเซตส์ เป้าหมายของเราคือมอบบริการแก่ตัวแทนและพนักงานของเราเพื่อช่วยให้พวกเขาปฏิบัติงานได้ในระดับสูงสุด ในช่วงหลายปีที่ผ่านมา เราได้รักษาความสัมพันธ์อันแน่นแฟ้นกับ CGI ระบบของพวกเขาแข็งแกร่งและแม่นยำ และทีมงานของพวกเขาคุ้นเคยกับระบบการประมวลผลภายในของเราเป็นอย่างดี นั่นเป็นสิ่งสำคัญสำหรับเรา”

Serge LaPalme ประธานฝ่ายบริการธุรกิจประกันภัยของ CGI กล่าวเสริมว่า "เรารู้สึกยินดีเป็นอย่างยิ่งที่ได้สานต่อความสัมพันธ์ของเรากับ Commerce Group ซึ่งยาวนานกว่า 30 ปี Commerce Group ยังคงเป็นหนึ่งในพันธมิตรทางธุรกิจที่มีคุณค่าของเราและเป็นกลยุทธ์ในการ ความสำเร็จของเรา ในการช่วยให้ลูกค้าของเรามุ่งเน้นไปที่ธุรกิจหลักของพวกเขามากขึ้น เรากำลังใช้ประโยชน์จากเทคโนโลยีใหม่ ๆ ในเวลาและสถานที่ที่เหมาะสม ทีมงานของเรารู้จักอุตสาหกรรมประกันภัยและสภาพแวดล้อมด้านกฎระเบียบที่เป็นเอกลักษณ์ของรัฐอย่างใกล้ชิดและเป็นผลให้รวดเร็ว เพื่อนำโซลูชั่นที่มีอยู่มาปรับใช้กับภาคส่วนที่มีการพัฒนาอย่างต่อเนื่องนี้"

เกี่ยวกับเดอะ คอมเมิร์ซ กรุ๊ป อิงค์

The Commerce Group, Inc. ซึ่งเป็นบริษัทโฮลดิ้งประกันภัย มีสำนักงานใหญ่ในเมืองเว็บสเตอร์ รัฐแมสซาชูเซตส์ บริษัทในเครือประกันทรัพย์สินและประกันวินาศภัยของ Commerce Group ได้แก่ The Commerce Insurance Company และ Citation Insurance Company ในแมสซาชูเซตส์, Commerce West Insurance Company ในแคลิฟอร์เนีย และ American Commerce Insurance Company ในโอไฮโอ โดยผ่านบริษัทในเครือ" กิจกรรมประกันภัยรวมกัน ทำให้ Commerce Group อยู่ในอันดับที่ 22 กลุ่มประกันภัยรถยนต์ส่วนบุคคลที่ใหญ่ที่สุดในประเทศ โดย A.M. ดีที่สุด อ้างอิงจากข้อมูลพรีเมียมที่เป็นลายลักษณ์อักษรโดยตรงในปี 2545

เกี่ยวกับซีจีไอ
CGI ก่อตั้งขึ้นในปี พ.ศ. 2519 โดยเป็นบริษัทอิสระที่ให้บริการด้านเทคโนโลยีสารสนเทศรายใหญ่เป็นอันดับห้าในอเมริกาเหนือเมื่อพิจารณาจากจำนวนพนักงาน CGI และบริษัทในเครือจ้างผู้เชี่ยวชาญ 20,000 คน อัตรารายได้ต่อปีของ CGI อยู่ที่ 2.8 พันล้านดอลลาร์ CDN (1.9 พันล้านดอลลาร์สหรัฐ) และ ณ วันที่ 30 กันยายน พ.ศ. 2546 คำสั่งซื้อที่ค้างอยู่ของ CGI อยู่ที่ 12.3 พันล้านดอลลาร์ CDN (9.1 พันล้านดอลลาร์สหรัฐ) CGI ให้บริการด้านไอทีและกระบวนการทางธุรกิจแบบ end-to-end แก่ลูกค้าทั่วโลกจากสำนักงานในแคนาดา สหรัฐอเมริกา และยุโรป หุ้นของ CGI จดทะเบียนใน TSX (GIB.A) และ NYSE (GIB) และรวมอยู่ในดัชนี TSX 100 Composite รวมถึง S&P/TSX Canadian Information Technology และ Canadian MidCap Indices เว็บไซต์:

ต้องขอบคุณเวิลด์ไวด์เว็บที่ทำให้เกือบทุกคนสามารถให้ข้อมูลออนไลน์ในรูปแบบที่ง่ายต่อการมองเห็นและสามารถเผยแพร่ในวงกว้างได้ คุณคงเคยท่องอินเทอร์เน็ตและเห็นเว็บไซต์อื่นๆ มาก่อน และตอนนี้คุณคงทราบแล้วว่าคำย่อที่น่ากลัว เช่น "HTTP" และ "HTML" เป็นเพียงการย่อคำว่า "เว็บ" และ "วิธีแสดงข้อมูลบนอินเทอร์เน็ต" คุณอาจมีประสบการณ์ในการนำเสนอข้อมูลทางอินเทอร์เน็ตมาบ้างแล้ว

อินเทอร์เน็ตได้รับการพิสูจน์แล้วว่าเป็นสื่อในอุดมคติสำหรับการกระจายข้อมูล ดังที่เห็นได้จากความนิยมอย่างมหาศาลและการพัฒนาอย่างกว้างขวาง แม้ว่าบางคนจะตั้งคำถามถึงประโยชน์ของอินเทอร์เน็ต และถือว่าการพัฒนาที่แพร่หลายและความนิยมส่วนใหญ่มาจากการโฆษณาที่ล่วงล้ำ แต่อินเทอร์เน็ตก็เป็นสื่อสำคัญในการนำเสนอข้อมูลทุกประเภทอย่างปฏิเสธไม่ได้ ไม่เพียงแต่มีบริการมากมายเพื่อให้ข้อมูลล่าสุด (ข่าว สภาพอากาศ การแข่งขันกีฬาสด) และเอกสารอ้างอิง ในรูปแบบอิเล็กทรอนิกส์นอกจากนี้ยังมีการเสนอข้อมูลประเภทอื่นๆ จำนวนมากอีกด้วย กรมสรรพากรซึ่งแจกจ่ายแบบฟอร์มการคืนภาษีและข้อมูลอื่นๆ ทั้งหมดในปี 1995 ผ่านทางเวิลด์ไวด์เว็บ เพิ่งยอมรับว่าได้รับจดหมายจากแฟนๆ สำหรับเว็บไซต์ของตน ใครจะคิดว่ากรมสรรพากรจะได้รับจดหมายจากแฟน ๆ บ้าง? ไม่ใช่เพราะเว็บไซต์ของเขาได้รับการออกแบบมาอย่างดี แต่เป็นเพราะได้รับการพิสูจน์แล้วว่าเป็นเครื่องมือที่มีประโยชน์อย่างแท้จริงสำหรับผู้คนหลายพันหรืออาจเป็นล้านคน

อะไรทำให้เว็บมีเอกลักษณ์เฉพาะตัวและเป็นบริการข้อมูลที่น่าสนใจ? ประการแรก จะให้อินเทอร์เฟซไฮเปอร์มีเดียกับข้อมูล ลองนึกถึงฮาร์ดไดรฟ์ของคอมพิวเตอร์ของคุณ โดยทั่วไปแล้ว ข้อมูลจะแสดงในรูปแบบเชิงเส้น คล้ายกับระบบไฟล์ ตัวอย่างเช่น คุณมีหลายโฟลเดอร์ และภายในแต่ละโฟลเดอร์ก็จะมีเอกสารหรือโฟลเดอร์อื่นๆ เว็บใช้กระบวนทัศน์ที่แตกต่างกันในการแสดงข้อมูลที่เรียกว่าไฮเปอร์มีเดีย อินเทอร์เฟซไฮเปอร์เท็กซ์ประกอบด้วยเอกสารและลิงก์ ลิงค์คือคำที่คลิกเพื่อดูเอกสารอื่นหรือค้นหาข้อมูลประเภทอื่น เว็บขยายแนวคิดของไฮเปอร์เท็กซ์ให้รวมถึงสื่อประเภทอื่นๆ เช่น กราฟิก เสียง วีดิทัศน์ (จึงเป็นที่มาของชื่อ "ไฮเปอร์มีเดีย") การเลือกข้อความหรือกราฟิกบนเอกสารจะทำให้คุณสามารถดูข้อมูลที่เกี่ยวข้องกับรายการที่เลือกในรูปแบบต่างๆ ได้

เกือบทุกคนสามารถได้รับประโยชน์จากวิธีการนำเสนอและเผยแพร่ข้อมูลที่เรียบง่ายและไม่เหมือนใคร ตั้งแต่นักวิชาการที่ต้องการใช้ข้อมูลกับเพื่อนร่วมงานทันที ไปจนถึงนักธุรกิจที่แบ่งปันข้อมูลเกี่ยวกับบริษัทของตนกับทุกคน อย่างไรก็ตาม แม้ว่าการให้ข้อมูลจะมีความสำคัญอย่างยิ่ง แต่ในช่วงไม่กี่ปีที่ผ่านมา หลายคนรู้สึกว่าการรับข้อมูลเป็นกระบวนการที่สำคัญไม่แพ้กัน

แม้ว่าเว็บจะมีอินเทอร์เฟซไฮเปอร์มีเดียที่เป็นเอกลักษณ์สำหรับข้อมูล แต่ก็มีอินเทอร์เฟซอื่นๆ อีกมากมาย วิธีที่มีประสิทธิภาพการกระจายข้อมูล ตัวอย่างเช่น บริการเครือข่าย เช่น File Transfer Protocol (FTP) และกลุ่มข่าวสาร Gopher มีมานานก่อนเวิลด์ไวด์เว็บ จดหมายอิเล็กทรอนิกส์เป็นสื่อหลักในการสื่อสารและการแลกเปลี่ยนข้อมูลบนอินเทอร์เน็ตและเครือข่ายอื่นๆ ส่วนใหญ่ตั้งแต่เริ่มต้นของเครือข่ายเหล่านี้ เหตุใดอินเทอร์เน็ตจึงกลายเป็นวิธียอดนิยมในการกระจายข้อมูล? ด้านมัลติมีเดียของอินเทอร์เน็ตมีส่วนสำคัญต่อความสำเร็จอย่างที่ไม่เคยมีมาก่อน แต่เพื่อให้อินเทอร์เน็ตมีประสิทธิภาพสูงสุด อินเทอร์เน็ตจะต้องเป็นแบบโต้ตอบ

หากไม่มีความสามารถในการรับข้อมูลจากผู้ใช้และให้ข้อมูล เว็บจะเป็นสภาพแวดล้อมแบบคงที่โดยสมบูรณ์ ข้อมูลจะมีเฉพาะในรูปแบบที่ผู้เขียนกำหนดเท่านั้น สิ่งนี้จะบ่อนทำลายความสามารถอย่างหนึ่งของการคำนวณโดยทั่วไป นั่นคือ ข้อมูลเชิงโต้ตอบ ตัวอย่างเช่น แทนที่จะบังคับให้ผู้ใช้ดูเอกสารหลายชุดเหมือนกับว่าเขาหรือเธอกำลังดูหนังสือหรือพจนานุกรม จะเป็นการดีกว่าถ้าให้ผู้ใช้สามารถระบุคำหลักในหัวข้อที่สนใจได้ ผู้ใช้สามารถปรับแต่งการนำเสนอข้อมูลแทนที่จะอาศัยโครงสร้างที่เข้มงวดซึ่งกำหนดโดยผู้ให้บริการเนื้อหา

คำว่า "เว็บเซิร์ฟเวอร์" อาจทำให้เข้าใจผิดได้เนื่องจากอาจหมายถึงทั้งเครื่องจริงและซอฟต์แวร์ที่ใช้ในการสื่อสารกับอินเทอร์เน็ตเบราว์เซอร์ เมื่อเบราว์เซอร์ร้องขอที่อยู่เว็บที่กำหนด ขั้นแรกเบราว์เซอร์จะเชื่อมต่อกับเครื่องผ่านทางอินเทอร์เน็ต จากนั้นจะส่งคำขอซอฟต์แวร์เซิร์ฟเวอร์เว็บสำหรับเอกสาร นี้ ซอฟต์แวร์ทำงานอย่างต่อเนื่องเพื่อรอคำขอดังกล่าวมาถึงและตอบสนองตามนั้น

แม้ว่าเซิร์ฟเวอร์จะสามารถส่งและรับข้อมูลได้แต่ตัวเซิร์ฟเวอร์เอง ฟังก์ชั่นถูก จำกัด. ตัวอย่างเช่น เซิร์ฟเวอร์ดั้งเดิมที่สุดสามารถส่งไฟล์ที่ต้องการไปยังเบราว์เซอร์เท่านั้น โดยปกติเซิร์ฟเวอร์จะไม่ทราบว่าต้องทำอย่างไรกับอินพุตนี้หรืออินพุตเพิ่มเติมนั้น หาก ISP ไม่บอกเซิร์ฟเวอร์ว่าจะจัดการข้อมูลเพิ่มเติมนี้อย่างไร เซิร์ฟเวอร์มักจะเพิกเฉยต่ออินพุต

เพื่อให้เซิร์ฟเวอร์สามารถดำเนินการอื่นๆ นอกเหนือจากการค้นหาและส่งไฟล์ไปยังอินเทอร์เน็ตเบราว์เซอร์ได้ คุณจำเป็นต้องทราบวิธีขยายฟังก์ชันการทำงานของเซิร์ฟเวอร์ ตัวอย่างเช่น เว็บเซิร์ฟเวอร์ไม่สามารถค้นหาฐานข้อมูลตามคำสำคัญที่ผู้ใช้ป้อน และส่งคืนเอกสารที่ตรงกันหลายรายการ เว้นแต่ว่าความสามารถดังกล่าวจะถูกตั้งโปรแกรมไว้ในเซิร์ฟเวอร์ในทางใดทางหนึ่ง

ซีจีไอคืออะไร?

Common Gateway Interface (CGI) เป็นอินเทอร์เฟซไปยังเซิร์ฟเวอร์ที่ช่วยให้คุณสามารถขยายฟังก์ชันการทำงานของเซิร์ฟเวอร์ได้ เมื่อใช้ CGI คุณสามารถโต้ตอบกับผู้ใช้ที่เข้าถึงไซต์ของคุณได้ ในระดับทฤษฎี CGI อนุญาตให้เซิร์ฟเวอร์สามารถแยกวิเคราะห์ (ตีความ) อินพุตจากเบราว์เซอร์และส่งคืนข้อมูลตามอินพุตของผู้ใช้ ในทางปฏิบัติ CGI เป็นอินเทอร์เฟซที่ช่วยให้โปรแกรมเมอร์สามารถเขียนโปรแกรมที่สื่อสารกับเซิร์ฟเวอร์ได้อย่างง่ายดาย

โดยทั่วไป หากต้องการขยายขีดความสามารถของเซิร์ฟเวอร์ คุณจะต้องแก้ไขเซิร์ฟเวอร์ด้วยตนเอง วิธีนี้ไม่เป็นที่พึงปรารถนาเนื่องจากต้องทำความเข้าใจชั้นล่างของการเขียนโปรแกรมเครือข่าย Internet Protocol นอกจากนี้ยังต้องมีการแก้ไขและคอมไพล์ซอร์สโค้ดเซิร์ฟเวอร์ใหม่หรือเขียนเซิร์ฟเวอร์แบบกำหนดเองสำหรับแต่ละงาน สมมติว่าคุณต้องการขยายขีดความสามารถของเซิร์ฟเวอร์เพื่อทำหน้าที่เป็นเกตเวย์ Web-to-e-mail โดยรับข้อมูลที่ผู้ใช้ป้อนจากเบราว์เซอร์และส่งผ่าน อีเมลให้กับผู้ใช้รายอื่น เซิร์ฟเวอร์จะต้องใส่โค้ดเพื่อแยกวิเคราะห์อินพุตจากเบราว์เซอร์ ส่งต่อทางอีเมลไปยังผู้ใช้รายอื่น และส่งต่อการตอบสนองกลับไปยังเบราว์เซอร์ผ่านการเชื่อมต่อเครือข่าย

ประการแรก งานดังกล่าวจำเป็นต้องเข้าถึงรหัสเซิร์ฟเวอร์ ซึ่งไม่สามารถทำได้เสมอไป

ประการที่สองเป็นเรื่องยากและต้องใช้ความรู้ด้านเทคนิคอย่างกว้างขวาง

ประการที่สาม สิ่งนี้ใช้ได้กับเซิร์ฟเวอร์เฉพาะเท่านั้น หากคุณต้องการย้ายเซิร์ฟเวอร์ของคุณไปยังแพลตฟอร์มอื่น คุณจะต้องรันหรืออย่างน้อยก็ใช้เวลาส่วนใหญ่ในการย้ายโค้ดไปยังแพลตฟอร์มนั้น

ทำไมต้องซีจีไอ?

CGI นำเสนอวิธีแก้ปัญหาแบบพกพาและเรียบง่ายสำหรับปัญหาเหล่านี้ โปรโตคอล CGI กำหนด วิธีมาตรฐานสำหรับโปรแกรมติดต่อกับเว็บเซิร์ฟเวอร์ หากไม่มีความรู้พิเศษใดๆ คุณสามารถเขียนโปรแกรมในภาษาเครื่องใดก็ได้ที่เชื่อมต่อและสื่อสารกับเว็บเซิร์ฟเวอร์ โปรแกรมนี้จะทำงานร่วมกับเว็บเซิร์ฟเวอร์ทั้งหมดที่เข้าใจโปรโตคอล CGI

การสื่อสาร CGI ดำเนินการโดยใช้อินพุตและเอาต์พุตมาตรฐาน ซึ่งหมายความว่าหากคุณรู้วิธีพิมพ์และอ่านข้อมูลโดยใช้ภาษาการเขียนโปรแกรมของคุณ คุณสามารถเขียนแอปพลิเคชันเว็บเซิร์ฟเวอร์ได้ นอกเหนือจากการแยกวิเคราะห์อินพุตและเอาต์พุตแล้ว การเขียนโปรแกรมแอปพลิเคชัน CGI นั้นแทบจะเทียบเท่ากับการเขียนโปรแกรมแอปพลิเคชันอื่นๆ ตัวอย่างเช่น ในการเขียนโปรแกรมโปรแกรม "Hello, World!" คุณใช้ฟังก์ชันการพิมพ์ของภาษาของคุณและรูปแบบที่กำหนดไว้สำหรับโปรแกรม CGI เพื่อพิมพ์ข้อความที่เกี่ยวข้อง

การเลือกภาษาการเขียนโปรแกรม

เนื่องจาก CGI เป็นอินเทอร์เฟซสากล คุณจึงไม่จำกัดเฉพาะภาษาเครื่องใดๆ คำถามสำคัญที่มักถูกถามบ่อยๆ คือ ภาษาโปรแกรมอะไรที่สามารถใช้ในการเขียนโปรแกรม CGI ได้? คุณสามารถใช้ภาษาใดก็ได้ที่อนุญาตให้คุณทำสิ่งต่อไปนี้:

  • พิมพ์ไปยังเอาต์พุตมาตรฐาน
  • อ่านจากอินพุตมาตรฐาน
  • อ่านจากโหมดตัวแปร

ภาษาโปรแกรมเกือบทั้งหมดและภาษาสคริปต์จำนวนมากทำสามสิ่งนี้และคุณสามารถใช้ภาษาใดก็ได้

ภาษาตกอยู่ในหนึ่งในสองคลาสต่อไปนี้: แปลและตีความ ภาษาที่แปล เช่น C หรือ C++ มักจะมีขนาดเล็กกว่าและเร็วกว่า ในขณะที่ภาษาที่แปล เช่น Perl หรือ Rexx บางครั้งต้องใช้ล่ามขนาดใหญ่เพื่อโหลดเมื่อเริ่มต้น นอกจากนี้ คุณยังสามารถแจกจ่ายรหัสไบนารี่ (รหัสที่แปลเป็นภาษาเครื่อง) โดยไม่ต้องใช้ซอร์สโค้ดหากภาษาของคุณสามารถแปลได้ การกระจายสคริปต์ที่ตีความได้มักจะหมายถึงการกระจายซอร์สโค้ด

ก่อนที่จะเลือกภาษา คุณต้องพิจารณาลำดับความสำคัญของคุณก่อน คุณต้องชั่งน้ำหนักข้อดีของความเร็วและประสิทธิภาพของภาษาการเขียนโปรแกรมหนึ่งเทียบกับความง่ายในการเขียนโปรแกรมของอีกภาษาหนึ่ง หากคุณมีความปรารถนาที่จะเรียนรู้ภาษาอื่น แทนที่จะใช้ภาษาที่คุณคุ้นเคยอยู่แล้ว ให้ชั่งน้ำหนักข้อดีและข้อเสียของทั้งสองภาษาอย่างรอบคอบ

ภาษาที่ใช้กันมากที่สุดสองภาษาสำหรับการเขียนโปรแกรม CGI คือ C และ Perl (ทั้งสองภาษาครอบคลุมอยู่ในหนังสือเล่มนี้) ทั้งสองมีข้อดีและข้อเสียที่ชัดเจน ภาษาเพิร์ลเป็นอย่างมาก ระดับสูงและในขณะเดียวกันก็เป็นภาษาที่ทรงพลังซึ่งเหมาะอย่างยิ่งสำหรับ การแยกวิเคราะห์ข้อความ. แม้ว่าความสะดวกในการใช้งาน ความยืดหยุ่น และประสิทธิภาพทำให้เป็นภาษาที่น่าดึงดูดสำหรับการเขียนโปรแกรม CGI แต่ขนาดที่ค่อนข้างใหญ่และการทำงานที่ช้ากว่าในบางครั้งทำให้ไม่เหมาะสมกับบางแอปพลิเคชัน โปรแกรม C มีขนาดเล็กกว่า มีประสิทธิภาพมากกว่า และมีการควบคุมระบบในระดับต่ำกว่า แต่มีความซับซ้อนในการเขียนโปรแกรมมากกว่า ไม่มีรูทีนการประมวลผลข้อความในตัวแบบน้ำหนักเบา และยากต่อการดีบั๊ก

ภาษาใดที่เหมาะกับการเขียนโปรแกรม CGI มากที่สุด? อันที่คุณคิดว่าสะดวกกว่าจากมุมมองของการเขียนโปรแกรม ทั้งสองมีประสิทธิภาพเท่าเทียมกันในการเขียนโปรแกรมแอปพลิเคชัน CGI และด้วยไลบรารีที่เหมาะสม ทั้งสองมีความสามารถที่คล้ายคลึงกัน อย่างไรก็ตาม หากคุณมีเซิร์ฟเวอร์ที่เข้าถึงยาก คุณสามารถใช้โปรแกรม C ที่แปลเล็กกว่าได้ หากคุณต้องการเขียนแอปพลิเคชันอย่างรวดเร็วซึ่งต้องใช้การประมวลผลข้อความจำนวนมาก คุณสามารถใช้ Perl แทนได้

ข้อควรระวัง

มีทางเลือกที่สำคัญบางประการนอกเหนือจากแอปพลิเคชัน CGI ปัจจุบันเซิร์ฟเวอร์จำนวนมากมีการเขียนโปรแกรม API ซึ่งทำให้ง่ายต่อการตั้งโปรแกรมส่วนขยายเซิร์ฟเวอร์โดยตรง เมื่อเทียบกับแอปพลิเคชัน CGI แบบสแตนด์อโลน โดยทั่วไปเซิร์ฟเวอร์ API จะมีประสิทธิภาพมากกว่าโปรแกรม CGI เซิร์ฟเวอร์อื่นๆ มีฟังก์ชันในตัวที่สามารถจัดการองค์ประกอบพิเศษที่ไม่ใช่ CGI ได้ เช่น การลิงก์ฐานข้อมูล สุดท้ายนี้ แอปพลิเคชันบางตัวสามารถจัดการได้โดยเทคโนโลยีฝั่งไคลเอ็นต์ใหม่ (แทนที่จะเป็นฝั่งเซิร์ฟเวอร์) เช่น Java ด้วยการเปลี่ยนแปลงทางเทคโนโลยีที่รวดเร็วเช่นนี้ CGI จะล้าสมัยอย่างรวดเร็วหรือไม่?

แทบจะไม่. CGI มีข้อได้เปรียบเหนือเทคโนโลยีใหม่หลายประการ

  • มันอเนกประสงค์และพกพาได้ คุณสามารถเขียนแอปพลิเคชัน CGI ได้โดยใช้ภาษาการเขียนโปรแกรมเกือบทุกภาษาบนแพลตฟอร์มใดก็ได้ ทางเลือกบางอย่าง เช่น API ของเซิร์ฟเวอร์ จำกัดให้คุณใช้บางภาษาและเรียนรู้ได้ยากกว่ามาก
  • ไม่น่าเป็นไปได้ที่เทคโนโลยีฝั่งไคลเอ็นต์เช่น Java จะมาแทนที่ CGI เนื่องจากมีแอปพลิเคชันบางตัวที่แอปพลิเคชันฝั่งเซิร์ฟเวอร์เหมาะสมกับการทำงานมากกว่ามาก
  • ข้อจำกัดหลายประการของ CGI คือข้อจำกัดของ HTML หรือ HTTP เนื่องจากมาตรฐานอินเทอร์เน็ตโดยรวมมีการพัฒนา ความสามารถของ CGI ก็เช่นกัน

สรุป

Common Gateway Interface เป็นโปรโตคอลที่โปรแกรมโต้ตอบกับเว็บเซิร์ฟเวอร์ ความอเนกประสงค์ของ CGI ช่วยให้โปรแกรมเมอร์สามารถเขียนโปรแกรมเกตเวย์ในเกือบทุกภาษาได้ แม้ว่าจะมีข้อด้อยหลายประการที่เกี่ยวข้องกับภาษาต่างๆ ก็ตาม หากไม่มีความสามารถนี้ การสร้างเว็บเพจเชิงโต้ตอบคงเป็นเรื่องยาก โดยต้องแก้ไขเซิร์ฟเวอร์อย่างดีที่สุด และการโต้ตอบจะไม่สามารถใช้งานได้สำหรับผู้ใช้ส่วนใหญ่ที่ไม่ใช่ผู้ดูแลไซต์

บทที่ 2: พื้นฐาน

เมื่อหลายปีก่อน ฉันได้สร้างเพจสำหรับวิทยาลัยแห่งหนึ่งที่ฮาร์วาร์ดซึ่งผู้คนสามารถส่งความคิดเห็นเกี่ยวกับพวกเขาได้ ในเวลานั้น อินเทอร์เน็ตยังใหม่และเอกสารยังไม่เพียงพอ เช่นเดียวกับคนอื่นๆ อีกหลายคน อาศัยเอกสารประกอบสั้นๆ และระบบการเขียนโปรแกรมที่ผู้อื่นสร้างขึ้นเพื่อสอนตัวเองเกี่ยวกับการเขียนโปรแกรม CGI แม้ว่าวิธีการศึกษานี้จะต้องอาศัยการค้นหา การทดลองมากมาย และสร้างคำถามมากมาย แต่ก็มีประสิทธิภาพมาก บทนี้เป็นผลจากการทำงานในช่วงแรกของฉันกับ CGI (แน่นอนว่ามีการปรับแต่งเล็กน้อย)

แม้ว่าจะใช้เวลาพอสมควรในการทำความเข้าใจและเชี่ยวชาญอินเทอร์เฟซเกตเวย์ทั่วไปอย่างถ่องแท้ แต่ตัวโปรโตคอลเองก็ค่อนข้างง่าย ใครก็ตามที่มีทักษะการเขียนโปรแกรมขั้นพื้นฐานและคุ้นเคยกับเว็บสามารถเรียนรู้การเขียนโปรแกรมแอปพลิเคชัน CGI ที่ค่อนข้างซับซ้อนได้อย่างรวดเร็ว เช่นเดียวกับที่ฉันและคนอื่นๆ เรียนรู้เมื่อหลายปีก่อน

วัตถุประสงค์ของบทนี้คือการนำเสนอพื้นฐานของ CGI ในรูปแบบที่ครอบคลุมแม้จะกระชับก็ตาม แต่ละแนวคิดที่กล่าวถึงในที่นี้จะนำเสนอโดยละเอียดในบทต่อๆ ไป อย่างไรก็ตาม หลังจากจบบทนี้แล้ว คุณสามารถเริ่มการเขียนโปรแกรมแอปพลิเคชัน CGI ได้ทันที เมื่อคุณไปถึงระดับนี้แล้ว คุณสามารถเรียนรู้ความซับซ้อนของ CGI ได้โดยการอ่านส่วนที่เหลือของหนังสือเล่มนี้หรือเพียงทดลองด้วยตัวเอง

คุณสามารถสรุปการเขียนโปรแกรม CGI ออกเป็นสองงาน: การรับข้อมูลจากเว็บเบราว์เซอร์และการส่งข้อมูลกลับไปยังเบราว์เซอร์ สิ่งนี้ทำได้ค่อนข้างง่ายเมื่อคุณคุ้นเคยกับการใช้งานแอปพลิเคชัน CGI ตามปกติ บ่อยครั้งที่ผู้ใช้ถูกขอให้กรอกแบบฟอร์ม เช่น ใส่ชื่อของเขา เมื่อผู้ใช้กรอกแบบฟอร์มแล้วกด Enter ข้อมูลนี้จะถูกส่งไปยังโปรแกรม CGI จากนั้นโปรแกรม CGI จะต้องแปลงข้อมูลนี้เป็นสิ่งที่เข้าใจ ประมวลผลตามนั้น แล้วส่งกลับไปยังเบราว์เซอร์ ไม่ว่าจะเป็นการยืนยันง่ายๆ หรือผลลัพธ์ของการค้นหาในฐานข้อมูลอเนกประสงค์

กล่าวอีกนัยหนึ่ง การเขียนโปรแกรม CGI จำเป็นต้องเข้าใจวิธีรับอินพุตจากอินเทอร์เน็ตเบราว์เซอร์ และวิธีการส่งเอาต์พุตกลับ สิ่งที่เกิดขึ้นระหว่างระยะอินพุตและเอาท์พุตของโปรแกรม CGI ขึ้นอยู่กับเป้าหมายของนักพัฒนา คุณจะพบว่าปัญหาหลักในการเขียนโปรแกรม CGI อยู่ที่ระดับกลางนี้ เมื่อคุณได้เรียนรู้วิธีทำงานกับอินพุตและเอาท์พุตแล้ว ก็เพียงพอที่จะเป็นนักพัฒนา CGI ได้

ในบทนี้ คุณจะได้เรียนรู้หลักการเบื้องหลังอินพุตและเอาท์พุตของ CGI รวมถึงทักษะพื้นฐานอื่นๆ ที่คุณจำเป็นต้องมีในการเขียนและใช้ CGI รวมถึงสิ่งต่างๆ เช่น การสร้างฟอร์ม HTML และการตั้งชื่อโปรแกรม CGI ของคุณ บทนี้ครอบคลุมหัวข้อต่อไปนี้:

  • โปรแกรมดั้งเดิม "Hello, World!";
  • เอาต์พุต CGI: ส่งข้อมูลกลับไปแสดงในอินเทอร์เน็ตเบราว์เซอร์
  • การกำหนดค่า ติดตั้ง และเรียกใช้แอปพลิเคชัน คุณจะได้เรียนรู้เกี่ยวกับแพลตฟอร์มและเซิร์ฟเวอร์ของเว็บต่างๆ
  • อินพุต CGI: การตีความข้อมูลที่ส่งโดยเว็บเบราว์เซอร์ ข้อมูลเบื้องต้นเกี่ยวกับไลบรารีการเขียนโปรแกรมที่เป็นประโยชน์สำหรับการแยกวิเคราะห์อินพุตดังกล่าว
  • ตัวอย่างง่ายๆ: ครอบคลุมบทเรียนทั้งหมดในบทที่กำหนด
  • กลยุทธ์การเขียนโปรแกรม

เนื่องจากลักษณะของบทนี้ ผมจึงพูดถึงเพียงบางหัวข้อเท่านั้น ไม่ต้องกังวล; หัวข้อทั้งหมดเหล่านี้จะกล่าวถึงในเชิงลึกมากขึ้นในบทอื่นๆ

สวัสดีชาวโลก!

คุณเริ่มต้นด้วยปัญหาการเขียนโปรแกรมเบื้องต้นแบบดั้งเดิม คุณจะเขียนโปรแกรมที่แสดงข้อความ "Hello, World!" บนเว็บเบราว์เซอร์ของคุณ ก่อนที่คุณจะเขียนโปรแกรมนี้ คุณต้องเข้าใจว่าเว็บเบราว์เซอร์คาดว่าจะได้รับข้อมูลใดบ้างจากโปรแกรม CGI คุณต้องรู้วิธีรันโปรแกรมนี้ด้วยจึงจะเห็นมันใช้งานได้จริง

CGI ไม่มีภาษาใด ๆ ดังนั้นคุณจึงสามารถใช้งานโปรแกรมนี้ในภาษาใดก็ได้ มีการใช้ภาษาที่แตกต่างกันหลายภาษาเพื่อแสดงให้เห็นถึงความเป็นอิสระของแต่ละภาษา ในภาษา Perl โปรแกรม "Hello, World!" ปรากฏอยู่ในรายการ 2.1

รายการ 2.1. สวัสดีชาวโลก! ในภาษาเพิร์ล #!/usr/local/bin/perl # Hello.cgi - โปรแกรม CGI แรกของฉันพิมพ์ "Content-Type: text/html\n\n"; พิมพ์ " \n"; พิมพ์ " สวัสดีชาวโลก!";พิมพ์"\n"; พิมพ์ " \n"; พิมพ์ "

สวัสดีชาวโลก!

\n"; พิมพ์ " \n";

บันทึกโปรแกรมนี้เป็น hello.cgi และติดตั้งในตำแหน่งที่เหมาะสม (หากคุณไม่แน่ใจว่าอยู่ที่ไหน ไม่ต้องกังวล คุณจะพบคำตอบได้ในส่วน "การติดตั้งและการรันโปรแกรม CGI" ในบทนี้) สำหรับเซิร์ฟเวอร์ส่วนใหญ่ ไดเร็กทอรีที่คุณต้องการคือ cgi-bin . ตอนนี้ให้เรียกโปรแกรมจากเว็บเบราว์เซอร์ของคุณ สำหรับส่วนใหญ่ นี่หมายถึงการเปิดตัวระบุตำแหน่งทรัพยากรที่เหมือนกัน (URL):

http://hostname/directoryname/hello.cgi

ชื่อโฮสต์คือชื่อของเว็บเซิร์ฟเวอร์ของคุณ และชื่อไดเรกทอรีคือไดเรกทอรีที่คุณใส่ hello.cgi (อาจเป็น cgi-bin)

แยก hello.cgi

มีบางสิ่งที่ควรทราบเกี่ยวกับ hello.cgi

ขั้นแรก คุณใช้คำสั่งพิมพ์ง่ายๆ โปรแกรม CGI ไม่ต้องการตัวอธิบายไฟล์พิเศษหรือตัวอธิบายเอาต์พุต หากต้องการส่งออกไปยังเบราว์เซอร์ เพียงพิมพ์ไปที่ stdout

ประการที่สอง โปรดทราบว่าเนื้อหาของคำสั่งการพิมพ์ครั้งแรก (ประเภทเนื้อหา: ข้อความ/html) จะไม่ปรากฏบนเว็บเบราว์เซอร์ของคุณ คุณสามารถส่งข้อมูลใดๆ ที่คุณต้องการกลับไปยังเบราว์เซอร์ (หน้า HTML กราฟิก หรือเสียง) แต่ก่อนอื่น คุณต้องบอกเบราว์เซอร์ว่าคุณกำลังส่งข้อมูลประเภทใด บรรทัดนี้จะบอกเบราว์เซอร์ว่าควรคาดหวังข้อมูลประเภทใด - ในกรณีนี้คือหน้า HTML

ประการที่สาม โปรแกรมชื่อ hello.cgi คุณไม่จำเป็นต้องใช้นามสกุล .cgi กับชื่อโปรแกรม CGI ของคุณเสมอไป แม้ว่าซอร์สโค้ดสำหรับหลายภาษาจะใช้นามสกุล .cgi เช่นกัน แต่ก็ไม่ได้ใช้เพื่อระบุประเภทภาษา แต่เป็นวิธีสำหรับเซิร์ฟเวอร์ในการระบุไฟล์เป็นไฟล์ปฏิบัติการแทนที่จะเป็นไฟล์กราฟิก, ไฟล์ HTML หรือ ไฟล์ข้อความ เซิร์ฟเวอร์มักได้รับการกำหนดค่าให้พยายามเรียกใช้ไฟล์ที่มีนามสกุลนี้เท่านั้น โดยแสดงเนื้อหาของไฟล์อื่นๆ ทั้งหมด แม้ว่าจะไม่จำเป็นต้องใช้ส่วนขยาย .cgi แต่ก็ยังถือว่าเป็นแนวปฏิบัติที่ดี

โดยทั่วไป hello.cgi ประกอบด้วยสองส่วนหลัก:

  • บอกให้เบราว์เซอร์ทราบว่าควรคาดหวังข้อมูลอะไร (ประเภทเนื้อหา: ข้อความ/html)
  • บอกเบราว์เซอร์ว่าจะแสดงอะไร (สวัสดีชาวโลก!)

สวัสดีชาวโลก! ในค

เพื่อแสดงความเป็นอิสระของภาษาของโปรแกรม CGI รายการ 2.2 จะแสดงเทียบเท่ากับโปรแกรม hello.cgi ที่เขียนด้วยภาษา C

รายการ 2.2. สวัสดีชาวโลก! ใน C. /* hello.cgi.c - สวัสดีชาวโลก CGI */ #include int main() ( printf("ประเภทเนื้อหา: text/html\r\n\r\n"); printf(" \n"); printf(" สวัสดีชาวโลก!\n"); printf("\n"); printf(" \n"); printf("

สวัสดีชาวโลก!

\n"); printf(" \n"); )

บันทึก

โปรดทราบว่า hello.cgi เวอร์ชัน Perl ใช้ Content-Type print ": text/html\n\n "; ในขณะที่เวอร์ชัน C ใช้ Printf("Content-Type: text/html\r\n\r\n");

เหตุใด Perl จึงพิมพ์คำสั่งลงท้ายด้วยสองบรรทัดใหม่ (\n) ในขณะที่ C printf ลงท้ายด้วยการขึ้นบรรทัดใหม่และขึ้นบรรทัดใหม่ (\r\n)

ในทางเทคนิคแล้ว ส่วนหัว (เอาต์พุตทั้งหมดก่อนบรรทัดว่าง) จะต้องคั่นด้วยการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ น่าเสียดายที่บนเครื่อง DOS และ Windows นั้น Perl แปล \r เป็นบรรทัดใหม่แทนที่จะเป็นการขึ้นบรรทัดใหม่

แม้ว่าข้อยกเว้นของ Perl \rs จะไม่ถูกต้องทางเทคนิค แต่จะใช้ได้กับโปรโตคอลเกือบทั้งหมดและสามารถพกพาได้เท่าเทียมกันในทุกแพลตฟอร์ม ดังนั้น ในตัวอย่าง Perl ทั้งหมดในหนังสือเล่มนี้ ฉันใช้การแยกส่วนหัวขึ้นบรรทัดใหม่ แทนที่จะใช้การขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่

แนวทางแก้ไขที่เหมาะสมสำหรับปัญหานี้แสดงไว้ในบทที่ 4 บทสรุป

ทั้งเว็บเซิร์ฟเวอร์และเบราว์เซอร์ไม่สนใจว่าจะใช้ภาษาใดในการเขียนโปรแกรม แม้ว่าแต่ละภาษาจะมีข้อดีและข้อเสียเหมือนกับภาษาโปรแกรม CGI แต่วิธีที่ดีที่สุดคือใช้ภาษาที่คุณรู้สึกสบายใจที่สุดในการทำงานด้วย (รายละเอียดการเลือกภาษาการเขียนโปรแกรมจะกล่าวถึงในบทที่ 1 “Common Gateway Interface (CGI)”)

การเรนเดอร์ CGI

ตอนนี้คุณสามารถดูปัญหาการส่งข้อมูลไปยังเว็บเบราว์เซอร์ได้อย่างละเอียดยิ่งขึ้น จากตัวอย่าง "Hello, World!" คุณจะเห็นว่าเว็บเบราว์เซอร์คาดหวังข้อมูลสองชุด: ส่วนหัวซึ่งประกอบด้วยข้อมูล เช่น ข้อมูลที่จะแสดง (เช่น ประเภทเนื้อหา: บรรทัด) และข้อมูลจริง (สิ่งที่เว็บเบราว์เซอร์ แสดง) ข้อมูลทั้งสองชิ้นนี้คั่นด้วยบรรทัดว่าง

ส่วนหัวเรียกว่าส่วนหัว HTTP ให้ข้อมูลสำคัญเกี่ยวกับข้อมูลที่เบราว์เซอร์จะได้รับ มีหลายอย่าง หลากหลายชนิดส่วนหัว HTTP และที่เป็นสากลที่สุดคือส่วนหัวที่คุณใช้ก่อนหน้านี้: Content-Type: header คุณสามารถใช้ส่วนหัว HTTP ที่แตกต่างกัน โดยคั่นด้วยการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ (\r\n) บรรทัดว่างที่แยกส่วนหัวออกจากข้อมูลยังประกอบด้วยการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ (เหตุใดจึงจำเป็นต้องมีทั้งสองบรรทัด มีการพูดคุยสั้น ๆ ในบันทึกย่อก่อนหน้าและมีรายละเอียดในบทที่ 4) คุณจะได้เรียนรู้เกี่ยวกับส่วนหัว HTTP อื่นๆ ในบทที่ 4; ขณะนี้คุณกำลังจัดการกับ Content-Type: header

ประเภทเนื้อหา: ส่วนหัวอธิบายประเภทข้อมูลที่ CGI ส่งคืน รูปแบบที่เหมาะสมสำหรับส่วนหัวนี้คือ:

ประเภทเนื้อหา: ประเภทย่อย/ประเภท

โดยที่ประเภทย่อย/ประเภทคือประเภท MultiPurpose Internet Mail Extensions (MIME) ที่ถูกต้อง ประเภท MIME ที่พบบ่อยที่สุดคือประเภท HTML: text/html ตาราง 2.1 แสดงรายการประเภท MIME ทั่วไปอีกสองสามประเภทที่จะกล่าวถึง รายการและการวิเคราะห์ประเภท MIME ที่สมบูรณ์ยิ่งขึ้นมีอยู่ในบทที่ 4

บันทึก

MIME เดิมถูกประดิษฐ์ขึ้นเพื่ออธิบายเนื้อหาของเนื้อหาข้อความเมล มันกลายเป็นวิธีที่ใช้กันทั่วไปในการแสดงข้อมูลประเภทเนื้อหา คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ MIME ได้ใน RFC1521 RFC บนอินเทอร์เน็ตย่อมาจาก Requests for Comments ซึ่งเป็นบทสรุปของการตัดสินใจของกลุ่มบนอินเทอร์เน็ตที่พยายามกำหนดมาตรฐาน คุณสามารถดูผลลัพธ์ของ RFC1521 ได้ตามที่อยู่ต่อไปนี้: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

ตารางที่ 2.1. MIME ทั่วไปบางประเภท ประเภท MIME คำอธิบาย ข้อความ/html Hypertext Markup Language (HTML) ข้อความ/ธรรมดา ไฟล์ข้อความธรรมดา รูปภาพ/gif ไฟล์กราฟิก รูปภาพ GIF/jpeg ไฟล์กราฟิกที่บีบอัด JPEG เสียง/ไฟล์เสียงพื้นฐาน Sun *.au เสียง/x-wav ไฟล์ Windows *. wav

หลังจากส่วนหัวและบรรทัดว่าง คุณเพียงพิมพ์ข้อมูลในรูปแบบที่คุณต้องการ หากคุณกำลังส่ง HTML ให้พิมพ์แท็ก HTML และข้อมูลเพื่อ stdout หลังส่วนหัว คุณยังสามารถส่งกราฟิก เสียง และไฟล์ไบนารี่อื่นๆ ได้โดยเพียงแค่พิมพ์เนื้อหาของไฟล์ไปที่ stdout มีตัวอย่างหลายประการในบทที่ 4

การติดตั้งและรันโปรแกรม CGI

ส่วนนี้ค่อนข้างจะแตกต่างจากการเขียนโปรแกรม CGI และพูดถึงการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณให้ใช้ CGI การติดตั้งและการรันโปรแกรม คุณจะได้รับการแนะนำให้รู้จักกับเซิร์ฟเวอร์ที่แตกต่างกันสำหรับแพลตฟอร์มที่แตกต่างกันโดยละเอียดไม่มากก็น้อย แต่คุณจะต้องเจาะลึกเข้าไปในเอกสารประกอบของเซิร์ฟเวอร์ของคุณเพื่อค้นหาตัวเลือกที่ดีที่สุด

เซิร์ฟเวอร์ทั้งหมดต้องการพื้นที่สำหรับไฟล์เซิร์ฟเวอร์และพื้นที่สำหรับเอกสาร HTML ในหนังสือเล่มนี้ พื้นที่เซิร์ฟเวอร์เรียกว่า ServerRoot และพื้นที่เอกสารเรียกว่า DocumentRoot บนเครื่อง UNIX โดยปกติ ServerRoot จะอยู่ใน /usr/local/etc/httpd/ และ DocumentRoot โดยปกติจะอยู่ใน /usr/local/etc/httpd/htdocs/ อย่างไรก็ตาม สิ่งนี้จะไม่สร้างความแตกต่างให้กับระบบของคุณ ดังนั้นให้แทนที่การอ้างอิงทั้งหมดไปยัง ServerRoot และ DocumentRoot ด้วย ServerRoot และ DocumentRoot ของคุณเอง

เมื่อคุณเข้าถึงไฟล์โดยใช้เว็บเบราว์เซอร์ คุณจะต้องระบุไฟล์ใน URL ที่สัมพันธ์กับ DocumentRoot ตัวอย่างเช่น หากที่อยู่เซิร์ฟเวอร์ของคุณคือ mymachine.org คุณจะเข้าถึงไฟล์นี้ด้วย URL ต่อไปนี้: http://mymachine.org/index.html

การกำหนดค่าเซิร์ฟเวอร์สำหรับ CGI

เว็บเซิร์ฟเวอร์ส่วนใหญ่ได้รับการกำหนดค่าไว้ล่วงหน้าเพื่อให้สามารถใช้งานโปรแกรม CGI ได้ โดยทั่วไปแล้ว พารามิเตอร์สองตัวจะระบุให้เซิร์ฟเวอร์ทราบว่าไฟล์นั้นเป็นแอปพลิเคชัน CGI หรือไม่:

  • ไดเร็กทอรีที่กำหนด เซิร์ฟเวอร์บางแห่งอนุญาตให้คุณระบุได้ว่าไฟล์ทั้งหมดในไดเร็กทอรีที่กำหนด (โดยปกติจะเรียกว่า cgi-bin ตามค่าเริ่มต้น) เป็น CGI
  • นามสกุลไฟล์. เซิร์ฟเวอร์จำนวนมากมีการกำหนดค่าล่วงหน้าที่อนุญาตให้ไฟล์ทั้งหมดที่ลงท้ายด้วย .cgi สามารถกำหนดเป็น CGI ได้

วิธีการไดเร็กทอรีที่กำหนดนั้นเป็นสิ่งที่หลงเหลือจากอดีต (เซิร์ฟเวอร์เครื่องแรกสุดที่ใช้เป็นวิธีเดียวในการพิจารณาว่าไฟล์ใดเป็นโปรแกรม CGI) แต่มีข้อดีหลายประการ

  • มันทำให้โปรแกรม CGI รวมศูนย์ ป้องกันไม่ให้ไดเรกทอรีอื่นเกะกะ
  • คุณไม่ได้จำกัดอยู่แค่นามสกุลไฟล์ใดๆ ดังนั้นคุณจึงสามารถตั้งชื่อไฟล์ตามที่คุณต้องการได้ เซิร์ฟเวอร์บางแห่งอนุญาตให้คุณกำหนดไดเร็กทอรีที่แตกต่างกันหลายไดเร็กทอรีเป็นไดเร็กทอรี CGI
  • นอกจากนี้ยังช่วยให้คุณควบคุมได้มากขึ้นว่าใครสามารถบันทึก CGI ได้บ้าง ตัวอย่างเช่น หากคุณมีเซิร์ฟเวอร์และสนับสนุนระบบที่มีผู้ใช้หลายคน และไม่ต้องการให้พวกเขาใช้สคริปต์ CGI ของตัวเองโดยไม่ได้ตรวจสอบโปรแกรมก่อนเพื่อความปลอดภัย คุณสามารถกำหนดเฉพาะไฟล์เหล่านั้นในไดเร็กทอรีส่วนกลางที่จำกัดเป็น CGI . จากนั้นผู้ใช้จะต้องจัดเตรียมโปรแกรม CGI ให้คุณติดตั้ง และคุณสามารถตรวจสอบโค้ดก่อนเพื่อให้แน่ใจว่าโปรแกรมไม่มีปัญหาด้านความปลอดภัยที่สำคัญใดๆ

สัญลักษณ์ CGI ผ่านนามสกุลไฟล์มีประโยชน์เนื่องจากมีความยืดหยุ่น คุณไม่ได้จำกัดอยู่เพียงไดเร็กทอรีเดียวสำหรับโปรแกรม CGI เซิร์ฟเวอร์ส่วนใหญ่สามารถกำหนดค่าให้จดจำ CGI ผ่านนามสกุลไฟล์ได้ แม้ว่าจะไม่ได้กำหนดค่าทั้งหมดด้วยวิธีนี้ตามค่าเริ่มต้นก็ตาม

คำเตือน

จดจำความสำคัญของปัญหาด้านความปลอดภัยเมื่อคุณกำหนดค่าเซิร์ฟเวอร์สำหรับ CGI เคล็ดลับบางประการจะกล่าวถึงที่นี่ และบทที่ 9 การปกป้อง CGI จะครอบคลุมประเด็นเหล่านี้โดยละเอียด

การติดตั้ง CGI บนเซิร์ฟเวอร์ UNIX

ไม่ว่าเซิร์ฟเวอร์ UNIX ของคุณจะถูกกำหนดค่าอย่างไร มีหลายขั้นตอนที่คุณต้องดำเนินการเพื่อให้แน่ใจว่าแอปพลิเคชัน CGI ของคุณทำงานตามที่คาดไว้ โดยทั่วไปเว็บเซิร์ฟเวอร์ของคุณจะทำงานในฐานะผู้ใช้ที่ไม่มีอยู่จริง (นั่นคือ ไม่มีผู้ใช้ UNIX - บัญชีซึ่งไม่มีสิทธิ์เข้าถึงไฟล์และไม่สามารถลงทะเบียนได้) สคริปต์ CGI (เขียนด้วยภาษา Perl, บอร์นเชลล์ หรือภาษาสคริปต์อื่น) จะต้องสามารถเรียกใช้งานได้และอ่านได้ทั่วโลก

เบาะแส

เพื่อให้ไฟล์ของคุณสามารถอ่านได้ทั่วโลกและปฏิบัติการได้ ให้ใช้คำสั่งสิทธิ์ UNIX ต่อไปนี้: ชื่อไฟล์ chmod 755

หากคุณใช้ภาษาสคริปต์ เช่น Perl หรือ Tcl ให้ระบุเส้นทางแบบเต็มของล่ามของคุณในบรรทัดแรกของสคริปต์ ตัวอย่างเช่น สคริปต์ Perl ที่ใช้ Perl ในไดเร็กทอรี /usr/local/bin จะขึ้นต้นด้วยบรรทัดต่อไปนี้:

#!/usr/local/bin/perl

คำเตือน

อย่าวางล่าม (perl หรือ Tcl Wish binary) ไว้ในไดเร็กทอรี /cgi-bin สิ่งนี้จะสร้างความเสี่ยงด้านความปลอดภัยให้กับระบบของคุณ ซึ่งจะกล่าวถึงในรายละเอียดเพิ่มเติมในบทที่ 9

เซิร์ฟเวอร์ UNIX ทั่วไปบางตัว

เซิร์ฟเวอร์ NCSA และ Apache มีไฟล์การกำหนดค่าที่คล้ายกัน เนื่องจากเซิร์ฟเวอร์ Apache เดิมใช้รหัส NCSA ตามค่าเริ่มต้น มีการกำหนดค่าเพื่อให้ไฟล์ใดๆ ในไดเร็กทอรี cgi-bin (ซึ่งอยู่ตามค่าเริ่มต้นใน ServerRoot) เป็นโปรแกรม CGI หากต้องการเปลี่ยนตำแหน่งของไดเร็กทอรี cgi-bin คุณสามารถแก้ไขไฟล์คอนฟิกูเรชัน conf/srm.conf ได้ รูปแบบสำหรับการกำหนดค่าไดเร็กทอรีนี้คือ

ScriptAlias ​​​​ชื่อไดเรกทอรีปลอมชื่อไดเรกทอรีจริง

โดยที่ fakedirectoryname คือชื่อไดเร็กทอรีหลอก (/cgi-bin) และ realdirectoryname คือพาธแบบเต็มที่โปรแกรม CGI ถูกจัดเก็บจริง คุณสามารถกำหนดค่า ScriptAlias ​​​​ได้มากกว่าหนึ่งรายการโดยเพิ่มบรรทัด ScriptAlias ​​​​เพิ่มเติม

การกำหนดค่าเริ่มต้นนั้นเพียงพอสำหรับความต้องการของผู้ใช้ส่วนใหญ่ คุณต้องแก้ไขบรรทัดในไฟล์ srm.conf ไม่ว่าในกรณีใดเพื่อกำหนดชื่อไดเรกทอรีจริงที่ถูกต้อง ตัวอย่างเช่น หากโปรแกรม CGI ของคุณอยู่ใน /usr/local/etc/httpd/cgi-bin บรรทัด ScriptAlias ​​ในไฟล์ srm.conf ของคุณควรเป็นดังนี้:

ScriptAlias ​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

หากต้องการเข้าถึงหรือลิงก์ไปยังโปรแกรม CGI ที่อยู่ในไดเร็กทอรีนี้ ให้ใช้ URL ต่อไปนี้:

http://hostname/cgi-bin/programname

โดยที่ชื่อโฮสต์คือชื่อของโฮสต์ของเว็บเซิร์ฟเวอร์ของคุณ และชื่อโปรแกรมคือชื่อของ CGI ของคุณ

ตัวอย่างเช่น สมมติว่าคุณคัดลอกโปรแกรม hello.cgi ไปยังไดเรกทอรี cgi-bin ของคุณ (เช่น /usr/local/etc/httpd/cgi-bin) บนเว็บเซิร์ฟเวอร์ของคุณชื่อ www.company.com หากต้องการเข้าถึง CGI ของคุณ ให้ใช้ URL ต่อไปนี้: http://www.company.com/cgi-bin/hello.cgi

หากคุณต้องการกำหนดค่าเซิร์ฟเวอร์ NCSA หรือ Apache ให้จดจำไฟล์ใดๆ ที่มีนามสกุล .cgi เป็น CGI คุณจะต้องแก้ไขไฟล์การกำหนดค่าสองไฟล์ ขั้นแรก ในไฟล์ srm.conf ให้ยกเลิกหมายเหตุบรรทัดต่อไปนี้:

แอปพลิเคชัน AddType/x-httpd-cgi .cgi

ซึ่งจะเชื่อมโยง CGI ประเภท MIME กับส่วนขยาย .cgi ตอนนี้เราต้องเปลี่ยนไฟล์ access.conf เพื่อให้เราสามารถเรียกใช้ CGI ในไดเร็กทอรีใดก็ได้ เมื่อต้องการทำเช่นนี้ ให้เพิ่มตัวเลือก ExecCGI ลงในบรรทัดตัวเลือก มันจะมีลักษณะคล้ายกับบรรทัดต่อไปนี้:

ดัชนีตัวเลือก FollowSymLinks ExecCGI

ตอนนี้ไฟล์ใดๆ ที่มีนามสกุล .cgi จะถือเป็น CGI เข้าถึงได้เหมือนกับที่คุณทำกับไฟล์ใด ๆ บนเซิร์ฟเวอร์ของคุณ

เซิร์ฟเวอร์ CERN ได้รับการกำหนดค่าในลักษณะเดียวกับเซิร์ฟเวอร์ Apache และ NCSA แทนที่จะเป็น ScriptAlias ​​เซิร์ฟเวอร์ CERN จะใช้คำสั่ง Exec ตัวอย่างเช่น ในไฟล์ httpd.conf คุณจะเห็นบรรทัดต่อไปนี้:

Exec /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

เซิร์ฟเวอร์ UNIX อื่นๆ สามารถกำหนดค่าได้ในลักษณะเดียวกัน ซึ่งมีการอธิบายโดยละเอียดเพิ่มเติมในเอกสารประกอบของเซิร์ฟเวอร์

การติดตั้ง CGI บน Windows

เซิร์ฟเวอร์ส่วนใหญ่ที่พร้อมใช้งานสำหรับ Windows 3.1, Windows 95 และ Windows NT ได้รับการกำหนดค่าโดยใช้วิธี "นามสกุลไฟล์" สำหรับการรับรู้ CGI โดยทั่วไป การเปลี่ยนแปลงการกำหนดค่าของเซิร์ฟเวอร์ที่ใช้ Windows จะต้องเรียกใช้โปรแกรมการกำหนดค่าเซิร์ฟเวอร์และทำการเปลี่ยนแปลงที่เหมาะสม

บางครั้งการกำหนดค่าเซิร์ฟเวอร์ให้เรียกใช้สคริปต์ (เช่น Perl) อย่างถูกต้องอาจเป็นเรื่องยาก ใน DOS หรือ Windows คุณจะไม่สามารถระบุล่ามในบรรทัดแรกของสคริปต์ได้ เช่นเดียวกับในกรณีของ UNIX เซิร์ฟเวอร์บางแห่งมีการกำหนดค่าที่กำหนดไว้ล่วงหน้าเพื่อเชื่อมโยงนามสกุลไฟล์บางอย่างกับล่าม ตัวอย่างเช่น เว็บเซิร์ฟเวอร์ Windows จำนวนมากถือว่าไฟล์ที่ลงท้ายด้วย .pl เป็นสคริปต์ Perl

หากเซิร์ฟเวอร์ไม่ดำเนินการเชื่อมโยงไฟล์ประเภทนี้ คุณสามารถกำหนดแบตช์ไฟล์ของตัวทำแพ็กเกจที่เรียกทั้งตัวแปลและสคริปต์ เช่นเดียวกับเซิร์ฟเวอร์ UNIX อย่าติดตั้งล่ามในไดเร็กทอรี cgi-bin หรือไดเร็กทอรีที่เข้าถึงเว็บได้

การติดตั้ง CGI บน Macintosh

ตัวเลือกเซิร์ฟเวอร์ที่เป็นที่รู้จักมากที่สุดสองตัวสำหรับ Macintosh คือ WebStar StarNine และ MacHTTP รุ่นก่อน ทั้งสองรู้จัก CGI ด้วยนามสกุลไฟล์

MacHTTP เข้าใจส่วนขยายสองแบบ: .cgi และ .acgi ซึ่งย่อมาจาก CGI แบบอะซิงโครนัส โปรแกรม CGI ปกติที่ติดตั้งบน Macintosh (ที่มีนามสกุล .cgi) จะทำให้เว็บเซิร์ฟเวอร์อยู่ในสถานะไม่ว่างจนกว่า CGI จะทำงานเสร็จ ทำให้เซิร์ฟเวอร์ระงับคำขออื่นๆ ทั้งหมด ในทางกลับกัน CGI แบบอะซิงโครนัสช่วยให้เซิร์ฟเวอร์ยอมรับคำขอแม้ในขณะที่กำลังทำงานอยู่

หากเป็นไปได้ นักพัฒนา CGI Macintosh ที่ใช้เว็บเซิร์ฟเวอร์เหล่านี้ ควรใช้เพียงนามสกุล .acgi แทนนามสกุล .cgi ควรทำงานร่วมกับโปรแกรม CGI ส่วนใหญ่ ถ้าไม่ได้ผลให้เปลี่ยนชื่อโปรแกรมเป็น .cgi

การดำเนินการ CGI

เมื่อคุณติดตั้ง CGI แล้ว คุณสามารถดำเนินการได้หลายวิธี หากโปรแกรม CGI ของคุณเป็นโปรแกรมเฉพาะเอาต์พุตเท่านั้น เช่น โปรแกรม Hello,World! คุณสามารถรันโปรแกรมได้ง่ายๆ โดยเข้าไปที่ URL ของโปรแกรม

โปรแกรมส่วนใหญ่ทำงานเป็นแอปพลิเคชันเซิร์ฟเวอร์ในรูปแบบ HTML ก่อนที่จะเรียนรู้วิธีรับข้อมูลจากแบบฟอร์มเหล่านี้ ก่อนอื่นให้อ่านคำแนะนำสั้นๆ เกี่ยวกับการสร้างแบบฟอร์มดังกล่าว

บทช่วยสอนสั้น ๆ เกี่ยวกับแบบฟอร์ม HTML

แท็กที่สำคัญที่สุดสองแท็กในรูปแบบ HTML คือ

และ . คุณสามารถสร้างฟอร์ม HTML ส่วนใหญ่ได้โดยใช้เพียงสองแท็กนี้ ในบทนี้ คุณจะสำรวจแท็กเหล่านี้และชุดย่อยเล็กๆ น้อยๆ ของประเภทหรือแอตทริบิวต์ที่เป็นไปได้ . คู่มือฉบับสมบูรณ์และลิงค์ไปยังแบบฟอร์ม HTML อยู่ในบทที่ 3 HTML และแบบฟอร์ม

แท็ก

แท็ก ใช้เพื่อกำหนดว่าควรใช้ส่วนใดของไฟล์ HTML สำหรับข้อมูลที่ผู้ใช้ป้อน นี่หมายถึงวิธีที่หน้า HTML ส่วนใหญ่เรียกโปรแกรม CGI คุณลักษณะของแท็กระบุชื่อและตำแหน่งของโปรแกรม - ทั้งภายในเครื่องหรือเป็น URL แบบเต็ม ประเภทของการเข้ารหัสที่ใช้ และวิธีการเคลื่อนย้ายข้อมูลที่ใช้โดยโปรแกรม

บรรทัดถัดไปแสดงข้อกำหนดของแท็ก :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

แอตทริบิวต์ ENCTYPE ไม่ได้มีบทบาทพิเศษและมักจะไม่รวมอยู่ในแท็ก . รายละเอียดข้อมูลเกี่ยวกับแท็ก ENCTYPE มีระบุไว้ในบทที่ 3 วิธีหนึ่งในการใช้ ENCTYPE แสดงในบทที่ 14 "ส่วนขยายของแบรนด์"

แอ็ตทริบิวต์ ACTION อ้างอิงถึง URL ของโปรแกรม CGI เมื่อผู้ใช้กรอกแบบฟอร์มและให้ข้อมูล ข้อมูลทั้งหมดจะถูกเข้ารหัสและถ่ายโอนไปยังโปรแกรม CGI โปรแกรม CGI เองแก้ปัญหาการถอดรหัสและประมวลผลข้อมูล ลักษณะนี้จะกล่าวถึงใน "การยอมรับอินพุตจากเบราว์เซอร์" ภายหลังในบทนี้

สุดท้ายนี้ คุณลักษณะ METHOD จะอธิบายว่าโปรแกรม CGI ควรรับอินพุตอย่างไร ทั้งสองวิธี GET และ POST ต่างกันตรงวิธีการส่งข้อมูลไปยังโปรแกรม CGI ทั้งสองจะกล่าวถึงใน "การยอมรับอินพุตจากเบราว์เซอร์"

เพื่อให้เบราว์เซอร์อนุญาตให้ผู้ใช้ป้อนข้อมูล แท็กแบบฟอร์มและข้อมูลทั้งหมดจะต้องล้อมรอบด้วยแท็ก . อย่าลืมแท็กปิดนะครับ

เพื่อระบุจุดสิ้นสุดของแบบฟอร์ม คุณไม่สามารถมีแบบฟอร์มภายในแบบฟอร์มได้ แม้ว่าคุณจะสามารถตั้งค่าแบบฟอร์มที่ช่วยให้คุณสามารถนำเสนอข้อมูลในที่ต่างๆ ได้ ด้านนี้จะกล่าวถึงอย่างกว้างขวางในบทที่ 3

แท็ก

คุณสามารถสร้างแถบป้อนข้อความ ปุ่มตัวเลือก ช่องทำเครื่องหมาย และวิธีการอื่นในการรับอินพุตโดยใช้แท็ก . ส่วนนี้ครอบคลุมเฉพาะช่องป้อนข้อความเท่านั้น หากต้องการติดตั้งช่องนี้ ให้ใช้แท็ก ด้วยคุณสมบัติดังต่อไปนี้:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME คือชื่อเชิงสัญลักษณ์ของตัวแปรที่มีค่าที่ผู้ใช้ป้อน หากคุณรวมข้อความในแอตทริบิวต์ VALUE ข้อความนั้นจะถูกวางเป็นค่าเริ่มต้นในช่องป้อนข้อความ แอตทริบิวต์ SIZE ช่วยให้คุณสามารถระบุความยาวแนวนอนของช่องป้อนข้อมูลตามที่จะปรากฏในหน้าต่างเบราว์เซอร์ สุดท้าย MAXLENGTH กำหนด จำนวนสูงสุดอักขระที่ผู้ใช้สามารถป้อนลงในฟิลด์ได้ โปรดทราบว่าแอตทริบิวต์ VALUE, SIZE, MAXLENGTH เป็นทางเลือก

การส่งแบบฟอร์ม

หากคุณมีช่องข้อความเพียงช่องเดียวในแบบฟอร์ม ผู้ใช้สามารถส่งแบบฟอร์มได้โดยเพียงพิมพ์ข้อมูลบนแป้นพิมพ์แล้วกด Enter มิฉะนั้นผู้ใช้จะต้องมีวิธีอื่นในการนำเสนอข้อมูล ผู้ใช้ส่งข้อมูลโดยใช้ปุ่มส่งพร้อมแท็กต่อไปนี้:

< Input type=submit >

แท็กนี้สร้างปุ่มส่งภายในแบบฟอร์มของคุณ เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว เขาหรือเธอสามารถส่งเนื้อหาไปยัง URL ที่ระบุโดยแอตทริบิวต์ ACTION ของแบบฟอร์มได้โดยการคลิกปุ่มส่ง

ยอมรับอินพุตจากเบราว์เซอร์

ข้างต้นเป็นตัวอย่างการบันทึกโปรแกรม CGI ที่ส่งข้อมูลจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์ ในความเป็นจริง โปรแกรม CGI ที่ส่งออกเฉพาะข้อมูลไม่มีแอปพลิเคชันจำนวนมาก (ตัวอย่างบางส่วนแสดงไว้ในบทที่ 4) ความสามารถที่สำคัญกว่าของ CGI คือการรับข้อมูลจากเบราว์เซอร์ ซึ่งเป็นคุณลักษณะที่ทำให้เว็บมีลักษณะแบบโต้ตอบได้

โปรแกรม CGI รับข้อมูลสองประเภทจากเบราว์เซอร์

  • ขั้นแรก ได้รับข้อมูลต่างๆ เกี่ยวกับเบราว์เซอร์ (ประเภทของเบราว์เซอร์ สิ่งที่สามารถดูได้ โฮสต์โฮสต์ และอื่นๆ) เซิร์ฟเวอร์ (ชื่อและเวอร์ชัน พอร์ตการดำเนินการ และอื่นๆ) และโปรแกรม CGI (ชื่อโปรแกรมและที่ตั้งของโปรแกรม) เซิร์ฟเวอร์ให้ข้อมูลทั้งหมดนี้แก่โปรแกรม CGI ผ่านตัวแปรสภาพแวดล้อม
  • ประการที่สอง โปรแกรม CGI สามารถรับข้อมูลจากผู้ใช้ได้ ข้อมูลนี้หลังจากที่เบราว์เซอร์เข้ารหัสแล้ว ข้อมูลนี้จะถูกส่งผ่านตัวแปรสภาพแวดล้อม (วิธี GET) หรือผ่านอินพุตมาตรฐาน (วิธี stdin - POST)

ตัวแปรสภาพแวดล้อม

การทราบว่าโปรแกรม CGI มีตัวแปรสภาพแวดล้อมใดบ้าง ทั้งในระหว่างการฝึกอบรมและสำหรับการดีบัก ตาราง 2.2 แสดงรายการตัวแปรสภาพแวดล้อม CGI บางส่วนที่มีอยู่ คุณยังสามารถเขียนโปรแกรม CGI ที่ส่งออกตัวแปรสภาพแวดล้อมและค่าของมันไปยังเว็บเบราว์เซอร์

ตารางที่ 2.2. ตัวแปรสภาพแวดล้อม CGI ที่สำคัญบางตัว ตัวแปรสภาพแวดล้อม วัตถุประสงค์ REMOTE_ADDR ที่อยู่ IP ของเครื่องไคลเอนต์ REMOTE_HOST โฮสต์ของเครื่องไคลเอ็นต์ HTTP _ACCEPT แสดงรายการประเภทข้อมูล MIME ที่เบราว์เซอร์สามารถตีความได้ HTTP _USER_AGENT ข้อมูลเบราว์เซอร์ (ประเภทเบราว์เซอร์ หมายเลขเวอร์ชัน ระบบปฏิบัติการ ฯลฯ) REQUEST_METHOD รับหรือโพสต์ CONTENT_LENGTH ขนาดของอินพุตหากส่งทาง POST หากไม่มีอินพุตหรือใช้วิธีการ GET พารามิเตอร์นี้จะไม่ได้กำหนดไว้ QUERY_STRING ประกอบด้วยข้อมูลอินพุตเมื่อถูกส่งผ่านโดยใช้วิธี GET PATH_INFO อนุญาตให้ผู้ใช้ระบุเส้นทางจาก บรรทัดคำสั่ง CGI (เช่น http://hostname/cgi-bin/programname/path) PATH_TRANSLATED แปลเส้นทางสัมพัทธ์ใน PATH_INFO เป็นเส้นทางจริงบนระบบ

หากต้องการเขียนแอปพลิเคชัน CGI ที่แสดงตัวแปรสภาพแวดล้อม คุณจำเป็นต้องรู้วิธีทำสองสิ่ง:

  • กำหนดตัวแปรสภาพแวดล้อมทั้งหมดและค่าที่เกี่ยวข้อง
  • พิมพ์ผลลัพธ์ไปยังเบราว์เซอร์

คุณรู้วิธีดำเนินการครั้งสุดท้ายแล้ว ในภาษา Perl ตัวแปรสภาพแวดล้อมจะถูกจัดเก็บไว้ในอาร์เรย์ที่เชื่อมโยง %ENV ซึ่งถูกนำมาใช้โดยชื่อของตัวแปรสภาพแวดล้อม รายการ 2.3 ประกอบด้วย env.cgi ซึ่งเป็นโปรแกรม Perl ที่บรรลุเป้าหมายของเรา

รายการ 2.3. โปรแกรม Perl env.cgi ที่พิมพ์ตัวแปรสภาพแวดล้อม CGI ทั้งหมด

#!/usr/local/bin/perl พิมพ์ "ประเภทเนื้อหา: text/html\n\n"; พิมพ์ " \n"; พิมพ์ " สิ่งแวดล้อมซีจีไอ\n"; พิมพ์ "\n"; พิมพ์ " \n"; พิมพ์ "

สิ่งแวดล้อมซีจีไอ

\n"; foreach $env_var (คีย์ %ENV) ( พิมพ์ " $env_var= $ENV($env_var)
\n"; ) พิมพ์ " \n";

โปรแกรมที่คล้ายกันสามารถเขียนด้วยภาษา C; รหัสที่สมบูรณ์อยู่ในรายการ 2.4

รายการ 2.4. Env.cgi.c ใน C. /* env.cgi.c */ #include ถ่านภายนอก ** สภาพแวดล้อม; int main() ( char **p = environ; printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" สิ่งแวดล้อมซีจีไอ\n"); printf("\n"); printf(" \n"); printf("

สิ่งแวดล้อมซีจีไอ

\n"); while(*p != NULL) printf("%s
\n",*p++); printf(" \n"); )

รับหรือโพสต์?

วิธี GET และ POST แตกต่างกันอย่างไร GET จะส่งผ่านสตริงอินพุตที่เข้ารหัสผ่านตัวแปรสภาพแวดล้อม QUERY_STRING ในขณะที่ POST จะส่งผ่าน stdin POST เป็นวิธีที่แนะนำ โดยเฉพาะอย่างยิ่งสำหรับแบบฟอร์มที่มีข้อมูลจำนวนมาก เนื่องจากไม่มีข้อจำกัดเกี่ยวกับปริมาณข้อมูลที่ส่ง ในขณะที่วิธี GET จะทำให้พื้นที่สื่อมีจำกัด อย่างไรก็ตาม GET มีความมั่นใจ ทรัพย์สินที่มีประโยชน์; ซึ่งจะกล่าวถึงโดยละเอียดในบทที่ 5 การป้อนข้อมูล

ในการพิจารณาว่าจะใช้วิธีใด โปรแกรม CGI จะตรวจสอบตัวแปรสภาพแวดล้อม REQUEST_METHOD ซึ่งจะถูกตั้งค่าเป็น GET หรือ POST หากตั้งค่าเป็น POST ความยาวของข้อมูลที่เข้ารหัสจะถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม CONTENT_LENGTH

อินพุตที่เข้ารหัส

เมื่อผู้ใช้ส่งแบบฟอร์ม เบราว์เซอร์จะเข้ารหัสข้อมูลก่อนส่งไปยังเซิร์ฟเวอร์ จากนั้นจึงส่งไปยังแอปพลิเคชัน CGI เมื่อคุณใช้แท็ก แต่ละฟิลด์จะได้รับชื่อเชิงสัญลักษณ์ ค่าที่ผู้ใช้ป้อนจะแสดงเป็นค่าของตัวแปร

เพื่อระบุสิ่งนี้ เบราว์เซอร์จะใช้ข้อกำหนดการเข้ารหัส URL ซึ่งสามารถอธิบายได้ดังต่อไปนี้:

  • แยกฟิลด์ต่างๆ ด้วยเครื่องหมายและ (&)
  • แยกชื่อและค่าด้วยเครื่องหมายเท่ากับ (=) โดยชื่ออยู่ทางซ้ายและค่าอยู่ทางขวา
  • แทนที่ช่องว่างด้วยเครื่องหมายบวก (+)
  • แทนที่อักขระ "ผิดปกติ" ทั้งหมดด้วยเครื่องหมายเปอร์เซ็นต์ (%) ตามด้วยรหัสเลขฐานสิบหกสองหลักสำหรับอักขระ

สตริงที่เข้ารหัสสุดท้ายของคุณจะคล้ายกับข้อความต่อไปนี้:

Name1=value1&name2=value2&name3=value3 ...

หมายเหตุ: ดูข้อกำหนดสำหรับการเข้ารหัส URL ได้ใน RFC1738

ตัวอย่างเช่น สมมติว่าคุณมีแบบฟอร์มที่ถามชื่อและอายุ รหัส HTML ที่ใช้ในการแสดงแบบฟอร์มนี้แสดงอยู่ในรายการ 2.5

รายการ 2.5. โค้ด HTML เพื่อแสดงชื่อและแบบฟอร์มอายุ

ชื่อและอายุ

ใส่ชื่อของคุณ:

ระบุอายุของคุณ:

สมมติว่าผู้ใช้ป้อน Joe Schmoe ในช่องชื่อ และ 20 ในช่องอายุ อินพุตจะถูกเข้ารหัสในสตริงอินพุต

ชื่อ=โจ+ชโม&อายุ=20

กำลังแยกวิเคราะห์อินพุต

เพื่อให้ข้อมูลนี้มีประโยชน์ คุณต้องใช้ข้อมูลเกี่ยวกับสิ่งที่โปรแกรม CGI ของคุณสามารถใช้ได้ กลยุทธ์สำหรับการแยกวิเคราะห์อินพุตครอบคลุมอยู่ในบทที่ 5 ในทางปฏิบัติ คุณจะไม่ต้องคิดถึงวิธีแยกวิเคราะห์อินพุต เนื่องจากผู้เชี่ยวชาญหลายคนได้เขียนไลบรารีที่ทำหน้าที่แยกวิเคราะห์แล้ว ซึ่งทุกคนสามารถเข้าถึงได้ ห้องสมุดสองแห่งดังกล่าวถูกนำเสนอในบทนี้ในส่วนต่อไปนี้: cgi -lib.pl สำหรับ Perl (เขียนโดย Steve Brenner) และ cgihtml สำหรับ C (เขียนโดยฉัน)

เป้าหมายทั่วไปของไลบรารีส่วนใหญ่ที่เขียนด้วยภาษาต่างๆ คือการแยกวิเคราะห์สตริงที่เข้ารหัสและใส่คู่ชื่อและค่าลงในโครงสร้างข้อมูล มีข้อได้เปรียบที่ชัดเจนในการใช้ภาษาที่มีโครงสร้างข้อมูลในตัวเช่น Perl อย่างไรก็ตาม ไลบรารีส่วนใหญ่สำหรับภาษาระดับต่ำ เช่น C และ C++ มีโครงสร้างข้อมูลและการดำเนินการรูทีนย่อย

ไม่จำเป็นต้องบรรลุความเข้าใจห้องสมุดอย่างสมบูรณ์ การเรียนรู้วิธีใช้เป็นเครื่องมือเพื่อทำให้งานของโปรแกรมเมอร์ CGI ง่ายขึ้นสำคัญกว่า

Cgi-lib.pl

Cgi-lib.pl ใช้อาร์เรย์เชื่อมโยง Perl ฟังก์ชัน &ReadParse แยกวิเคราะห์สตริงอินพุต และป้อนคู่ชื่อ/ค่าแต่ละชื่อตามชื่อ ตัวอย่างเช่น สตริง Perl ที่เกี่ยวข้องซึ่งจำเป็นในการถอดรหัสสตริงอินพุต "ชื่อ/อายุ" ที่เพิ่งนำเสนอจะเป็น

&ReadParse(*อินพุต);

ตอนนี้ หากต้องการดูค่าที่ป้อนสำหรับ "ชื่อ" คุณสามารถเข้าถึงอาร์เรย์ที่เชื่อมโยง $input("name") ในทำนองเดียวกัน ในการเข้าถึงค่าของ "อายุ" คุณต้องดูตัวแปร $input ("อายุ")

Cgihtml

C ไม่มีโครงสร้างข้อมูลในตัว ดังนั้น cgihtml จึงใช้รายการลิงก์ของตัวเองเพื่อใช้กับรูทีนการแยกวิเคราะห์ CGI สิ่งนี้กำหนดโครงสร้างรายการดังนี้:

โครงสร้าง Typedef ( Char *name; Char *value; ) ประเภทรายการ;

หากต้องการแยกสตริงอินพุต "ชื่อ/อายุ" ในภาษา C โดยใช้ cgihtml จะใช้สิ่งต่อไปนี้:

/* ประกาศ link list ที่เรียกว่า input */ Llist input; /* แยกวิเคราะห์อินพุตและตำแหน่งในรายการลิงค์ */ read_cgi_input(&input);

หากต้องการเข้าถึงข้อมูลอายุ คุณสามารถแยกวิเคราะห์รายการด้วยตนเอง หรือใช้ฟังก์ชัน cgi _val() ที่มีอยู่

#รวม #รวม Char *age = malloc(sizeof(char)*strlen(cgi_val(input, "age")) + 1); Strcpy(อายุ, cgi_val(อินพุต, "อายุ"));

ตอนนี้ค่า "อายุ" จะถูกจัดเก็บไว้ในสตริงอายุ

หมายเหตุ: แทนที่จะใช้อาร์เรย์ธรรมดา (เช่น char age ;) ฉันกำลังจัดสรรพื้นที่หน่วยความจำสำหรับอายุสตริงแบบไดนามิก แม้ว่าสิ่งนี้จะทำให้การเขียนโปรแกรมยากขึ้น แต่ก็ยังมีความสำคัญจากมุมมองด้านความปลอดภัย นี้จะกล่าวถึงรายละเอียดเพิ่มเติมในบทที่ 9

โปรแกรม CGI อย่างง่าย

คุณจะเขียนโปรแกรม CGI ชื่อ nameage.cgi ที่จัดการแบบฟอร์มชื่อ/อายุ การประมวลผลข้อมูล (สิ่งที่ฉันมักเรียกว่า "สิ่งของ") มีเพียงเล็กน้อย Nameage.cgi เพียงถอดรหัสอินพุตและแสดงชื่อและอายุของผู้ใช้ แม้ว่าเครื่องมือดังกล่าวจะไม่ค่อยมีประโยชน์นัก แต่ก็แสดงให้เห็นถึงแง่มุมที่สำคัญที่สุดของการเขียนโปรแกรม CGI นั่นก็คือ อินพุตและเอาท์พุต

คุณใช้แบบฟอร์มเดียวกับด้านบน โดยเรียกช่อง "ชื่อและอายุ" อย่าเพิ่งกังวลเกี่ยวกับความแข็งแกร่งและประสิทธิภาพ แก้ไขปัญหาที่มีอยู่ด้วยวิธีที่ง่ายที่สุด โซลูชัน Perl และ C แสดงอยู่ในรายการ 2.6 และ 2.7 ตามลำดับ

รายการ 2.6. Nameage.cgi ในภาษา Perl

#!/usr/local/bin/perl # nameage.cgi ต้องการ "cgi-lib.pl" &ReadParse(*อินพุต); พิมพ์ "ประเภทเนื้อหา: text/html\r\n\r\n"; พิมพ์ " \n"; พิมพ์ " ชื่อและอายุ\n"; พิมพ์ "\n"; พิมพ์ " \n"; print "สวัสดี, " . $input("name") . ". คุณคือ\n"; print $input("age") . " years old.

\n"; พิมพ์ " \n";

รายการ 2.7. nameage.cgi ในซี

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" ชื่อและอายุ\n"); printf("\n"); printf(" \n"); printf("สวัสดี %s คุณคือ\n",cgi_val(input,"name")); printf("%s years old.

\n",cgi_val(อินพุต,"อายุ")); printf(" \n"); )

โปรดทราบว่าทั้งสองโปรแกรมนี้เกือบจะเทียบเท่ากัน ทั้งสองมีรูทีนการแยกวิเคราะห์ที่ใช้เพียงบรรทัดเดียวและประมวลผลอินพุตทั้งหมด (ขอบคุณรูทีนไลบรารีที่เกี่ยวข้อง) ผลลัพธ์จะเป็นเวอร์ชันแก้ไขของโปรแกรม Hello, World! หลักของคุณ

ลองรันโปรแกรมโดยกรอกแบบฟอร์มแล้วคลิกปุ่มส่ง

กลยุทธ์การเขียนโปรแกรมทั่วไป

ตอนนี้คุณรู้หลักการพื้นฐานทั้งหมดที่จำเป็นสำหรับการเขียนโปรแกรม CGI แล้ว เมื่อคุณเข้าใจว่า CGI รับข้อมูลอย่างไร และส่งข้อมูลกลับไปยังเบราว์เซอร์อย่างไร คุณภาพที่แท้จริงของผลิตภัณฑ์ขั้นสุดท้ายของคุณจะขึ้นอยู่กับความสามารถในการเขียนโปรแกรมทั่วไปของคุณ กล่าวคือ เมื่อคุณเขียนโปรแกรม CGI (หรืออะไรก็ตาม) ให้คำนึงถึงคุณสมบัติต่อไปนี้:

  • ความเรียบง่าย
  • ประสิทธิภาพ
  • ความเก่งกาจ

คุณสมบัติสองประการแรกนั้นค่อนข้างเหมือนกัน: พยายามทำให้โค้ดของคุณอ่านง่ายและมีประสิทธิภาพมากที่สุด ความคล่องตัวมีผลกับโปรแกรม CGI มากกว่าแอปพลิเคชันอื่นๆ เมื่อคุณเริ่มพัฒนาโปรแกรม CGI ของคุณเอง คุณจะได้เรียนรู้ว่ามีแอปพลิเคชั่นพื้นฐานหลายประการที่ใครๆ ก็อยากทำ ตัวอย่างเช่น หนึ่งในงานที่พบบ่อยและชัดเจนที่สุดของโปรแกรม CGI คือการประมวลผลแบบฟอร์มและส่งอีเมลผลลัพธ์ไปยังผู้รับเฉพาะ คุณสามารถประมวลผลแบบฟอร์มแยกกันหลายรายการ โดยแต่ละแบบฟอร์มมีผู้รับต่างกัน แทนที่จะเขียนโปรแกรม CGI สำหรับแต่ละแบบฟอร์ม คุณสามารถประหยัดเวลาได้ด้วยการเขียนโปรแกรม CGI ทั่วไปที่ใช้ได้กับทุกแบบฟอร์ม

ด้วยการครอบคลุมทุกแง่มุมพื้นฐานของ CGI ฉันจึงให้ข้อมูลที่เพียงพอแก่คุณในการเริ่มต้นการเขียนโปรแกรม CGI อย่างไรก็ตาม ในการเป็นนักพัฒนา CGI ที่มีประสิทธิภาพ คุณต้องมีความเข้าใจอย่างลึกซึ้งมากขึ้นว่า CGI สื่อสารกับเซิร์ฟเวอร์และเบราว์เซอร์อย่างไร ส่วนที่เหลือของหนังสือเล่มนี้ครอบคลุมรายละเอียดเกี่ยวกับประเด็นต่างๆ ที่กล่าวถึงโดยย่อในบทนี้ ตลอดจนกลยุทธ์การพัฒนาแอปพลิเคชัน ตลอดจนข้อดีและข้อจำกัดของโปรโตคอล

สรุป

บทนี้จะแนะนำพื้นฐานของการเขียนโปรแกรม CGI โดยย่อ คุณสร้างเอาต์พุตโดยการจัดรูปแบบข้อมูลของคุณอย่างถูกต้องและพิมพ์เป็น stdout การรับอินพุต CGI นั้นซับซ้อนกว่าเล็กน้อยเนื่องจากต้องแยกวิเคราะห์ก่อนจึงจะสามารถใช้งานได้ โชคดีที่มีห้องสมุดหลายแห่งที่ทำการแยกวิเคราะห์อยู่แล้ว

ถึงตอนนี้คุณควรจะคุ้นเคยกับการเขียนโปรแกรมแอพพลิเคชั่น CGI แล้ว ส่วนที่เหลือของหนังสือเล่มนี้มีรายละเอียดเพิ่มเติมเกี่ยวกับข้อกำหนด เคล็ดลับ และกลยุทธ์การเขียนโปรแกรมสำหรับการใช้งานขั้นสูงและซับซ้อนมากขึ้น

2555: ซื้อ British Logica

ในเดือนมิถุนายน พ.ศ. 2555 CGI Group ประกาศว่าได้ลงนามในข้อตกลงเพื่อซื้อ Logica ผู้วางระบบรายใหญ่ที่สุดในยุโรป มูลค่าการทำธุรกรรมอยู่ที่ 2.8 พันล้านดอลลาร์แคนาดา (2.7 พันล้านดอลลาร์) ในฐานะที่เป็นส่วนหนึ่งของข้อตกลง CGI ยังตกลงที่จะรับภาระผูกพันในการชำระหนี้ของ Logica เป็นจำนวน 515 ล้านดอลลาร์แคนาดา

เพื่อเป็นเงินทุนสำหรับการทำธุรกรรมนี้ CGI วางแผนที่จะระดมเงิน 1 พันล้านดอลลาร์แคนาดาโดยการออกหุ้นเพิ่มเติม 46.7 ล้านหุ้น, ยืมเงิน 2 พันล้านดอลลาร์แคนาดาจาก Canadian Imperial Bank of Commerce, National Bank of Canada และ The Toronto-Dominion Bank และอีกประมาณ 650 ล้านดอลลาร์แคนาดา ดอลลาร์มากขึ้น ดอลลาร์ - ภายในวงเงินเครดิตปัจจุบัน

ราคาเสนอต่อหุ้นสูงกว่าราคาปิดของลอจิกาเมื่อวันที่ 30 พฤษภาคม 2555 ถึง 59.8% ข้อตกลงดังกล่าวคิดเป็นประมาณ 6.6 เท่าของกำไรก่อนหักดอกเบี้ย ภาษี ค่าเสื่อมราคา และค่าตัดจำหน่าย (EBITDA) ของลอจิกาสำหรับปี รอบระยะเวลา 12 เดือนสิ้นสุดวันที่ 31 ธันวาคม 2554

การเข้าซื้อกิจการ Logica คาดว่าจะช่วยเพิ่มกำไรต่อหุ้นของ CGI ได้ 25% ถึง 30% โดยไม่รวมต้นทุนการซื้อและการรวมกิจการ ผลจากการควบรวมกิจการส่งผลให้พนักงานของบริษัทและรายได้ต่อปีเพิ่มขึ้นมากกว่าสองเท่าของ CGI ขนาดของพนักงานของบริษัทที่ควบรวมกิจการจะอยู่ที่ประมาณ 72,000 คนในสำนักงานใน 43 ประเทศ และรายได้ต่อปีจะอยู่ที่ประมาณ 10.4 พันล้านดอลลาร์แคนาดา (9.6 พันล้านดอลลาร์)

บริษัทใหม่นี้จะใหญ่เป็นอันดับ 6 ในบรรดาที่ปรึกษาด้านไอทีของโลก ที่ใหญ่ที่สุด ได้แก่ IBM, Accenture, Cap Gemini, Tata Consultancy และ Infosys ตามการประมาณการของ Reuters

"Logica คือบริษัทผู้ให้บริการด้านธุรกิจและเทคโนโลยีชั้นนำที่มีผู้เชี่ยวชาญเฉพาะทางและเป็นลูกค้าระยะยาวที่เชื่อถือได้" Michael Roach ประธานและซีอีโอของ CGI กล่าว "เรามั่นใจว่าเรากำลังทำสิ่งที่ถูกต้อง" เมื่อเราซื้อ Logica เรากำลังซื้อ ในราคาที่เหมาะสมและเข้า ถูกเวลาเพื่อสร้างผู้ให้บริการอิสระรายใหญ่ที่สุดรายหนึ่งของบริการเทคโนโลยีแบบครบวงจร"

คณะกรรมการของ CGI มีมติเป็นเอกฉันท์อนุมัติธุรกรรมดังกล่าว โดยมีกำหนดแล้วเสร็จภายในเดือนกันยายน 2555 หลังจากได้รับการอนุมัติจากผู้ถือหุ้นและปฏิบัติตามขั้นตอนมาตรฐาน กระบวนการรวมบริษัทมีการวางแผนแล้วเสร็จภายใน 3 ปี