250 likes | 390 Views
บทที่ 23 (Webserver Management). PHP: Hypertext Preprocessor. สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร. วัตถุประสงค์การเรียนรู้ประจำบท.
E N D
บทที่ 23 (Webserver Management) PHP:Hypertext Preprocessor สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร
วัตถุประสงค์การเรียนรู้ประจำบทวัตถุประสงค์การเรียนรู้ประจำบท • ในบทนี้ จะได้เรียนรู้วิธีการติดต่อกับเว็บเซิร์ฟเวอร์ เช่นการกำหนดข้อมูลเฮดเดอร์ (HTTP Header) ที่เว็บเซิร์ฟเวอร์จะส่งไปยังเว็บบราวเซอร์หลังจากมีการร้องขอเพจหนี่งๆ มา และการใช้งานตัวแปร $_SERVER เพื่อหาข้อมูลบางอย่างเกี่ยวกับตัวเซิร์ฟเวอร์และเพจที่กำลังถูกประมวลผล
กิจกรรมการเรียนการสอนกิจกรรมการเรียนการสอน • บรรยายโดยผู้สอนและใช้เอกสารประกอบการสอนของผู้สอน • สอนโดยใช้สื่อคอมพิวเตอร์ผ่านเครื่องฉาย • อภิปรายในชั้นเรียนร่วมกัน • ให้นิสิตค้นคว้าเพิ่มเติมจากตำราและเอกสารที่เกี่ยวข้อง • ทำแบบฝึกหัดท้ายบท
การประเมินผล • ประเมินผลจากการตอบคำถามและอภิปรายในชั้นเรียน • ทำแบบฝึกหัดท้ายบท • ทำรายงานส่ง
รู้จักกับ HTTP Header ตัวอย่างของข้อมูลเฮดเดอร์ที่เว็บเซิร์ฟเวอร์ส่งมาให้เว็บบราวเซอร์พร้อมๆกับเนื้อหาของเพจที่เว็บบราวเซอร์ร้องขอไป (ในที่นี้ไม่ได้แสดงเนื้อหาของเพจ ซึ่งจะอยู่ต่อจากข้อมูลนี้อีกที) HTTP/1.1 200 OK Cache-Control: private Content-Type:text/html; charset_UTF-8 Set-Cookie: PREF=ID=3012de85f31fa84c:TM=1132109741:LM=1132109741: S=RykkDzZuyvT0VW-N; expires=Sun,17-jan-2038 19:14:07 GMT; path=/; domain=.google.co.th Content-Encoding: gzip Server: GWS/2.1 Content-Length: 1892 Date: Sun,22 Apr 2007 08:88:12 GMT
การส่งข้อมูลเฮดเดอร์ไปเองตามที่ต้องการการส่งข้อมูลเฮดเดอร์ไปเองตามที่ต้องการ ฟังก์ชั่น header จะส่งข้อมูลเฮดเดอร์ที่ระบุไปให้เว็บบราวเซอร์ รูปแบบของข้อมูลเฮดเดอร์จะต้องเป็นไปตามข้อกำหนดของโปรโตคอล HTTP ซึ่งมีรายละเอียดอยู่ที่ http://www.faqs.org/rfcs/rfc2616 ตัวอย่างการใช้ฟังก์ชั่น header header('WWW-Authenticate: Negotiate'); รูปแบบ void header(string ข้อมูลเฮดเดอร์)
กำหนดคุกกี้โดยใช้ฟังก์ชั่น header การใช้ฟังก์ชั่น header ที่มีประโยชน์จริงๆ อย่างหนึ่งก็คือการส่งคุกกี้ไปเก็บไว้ในเครื่องผู้ใช้ คุณทราบแล้วว่าข้อมูลคุกกี้จะถูกส่งไปทาง HTTP Header โดยฟังก์ชั่น setcookieจะสร้างข้อมูลเฮดเดอร์ส่วนนี้ให้เรา แต่ถ้าคุณต้องการกำหนดคุกกี้ลงใน HTTP Header เองก็สามารถทำได้ เฮดเดอร์ที่ใช้กำหนดคุกกี้ลงในเครื่องผู้ใช้จะมีชื่อว่า Set-Cookie ตัวอย่างนี้คือการกำหนดคุกกี้ชื่อ username ให้มีค่าเท่ากับ nooknetโดยใช้ฟังก์ชั่น header header("Set_Cookie: username=sanya"); ซึ่งเทียบเท่าการใช้ฟังก์ชั่น setcookieดังนี้ setcookie("username",“sanya");
กำหนดคุกกี้โดยใช้ฟังก์ชั่น header การเปลี่ยนทิศทาง (Redirect) เว็บบราวเซอร์ header("Location: เพจปลายทาง"); เช่น header("Location: http://www.somedomain.com/somepage.php");
กำหนดคุกกี้โดยใช้ฟังก์ชั่น header ตัวอย่างนี้จะแสดงการเปลี่ยนทิศทางเว็บบราวเซอร์ โดยเมื่อผู้ใช้เรียกมายังเพจ redirect1.php เว็บบราวเซอร์จะถูกสั่งให้ไปโหลดเพจ redirect2.php มาแสดงแทน redirect1.php redirect2.php <? echo "ข้อความจากเพจ redirect2.php"; ?> <? header("Location: http://localhost/test/redirect2.php"); echo "ข้อความจากเพจ redirect1.php"; ?>
กำหนดคุกกี้โดยใช้ฟังก์ชั่น header การทดสอบตัวอย่างนี้ให้เรียกไปยังเพจ redirect1.php จะได้ว่าเพจ redirect2.php ถูกแสดงออกมาแทน ดังรูป
การตรวจสอบว่าข้อมูลเฮดเดอร์ถูกส่งไปหรือยังการตรวจสอบว่าข้อมูลเฮดเดอร์ถูกส่งไปหรือยัง error.php <? echo "ทดสอบการเปลี่ยนทิศทาง<br>"; header("Location: http://www.iamsanya.com"); ?>
การแสดงข้อมูลเฮดเดอร์ออกมาการแสดงข้อมูลเฮดเดอร์ออกมา headers_list.php รูปแบบ array headers_list(void) <? header("X-PHP-Author:PromlertLovichit"); echo "<pre>"; print_r(headers_list()); echo "</pre>"; ?>
การตั้งค่าเกี่ยวกับแคชการตั้งค่าเกี่ยวกับแคช เราสามารถใช้ข้อมูลเฮดเดอร์ตั้งค่าเกี่ยวกับแคช (Cache) ให้กับเพจต่างๆ ได้ด้วย เพื่อกำหนดว่า ต้องโหลดเพจจากเว็บเซิร์ฟเวอร์ทุกครั้งที่ผู้ใช้รีเฟรชเพจ หรือให้เว็บบราวเซอร์หรือเครื่องของผู้ให้บริการอินเทอร์เน็ต (Internet Service Provider – ISP) เก็บสำเนาของเพจไว้ได้ภายในระยะเวลาหนึ่ง ซึ่งจะทำให้การรีเฟรชเพจรวดเร็วขึ้น เพราะไม่ต้องมาดหลดเอาจากเว็บเซิร์ฟเวอร์ทุกครั้ง
การตั้งค่าเกี่ยวกับแคชการตั้งค่าเกี่ยวกับแคช เฮดเดอร์ที่ใช้กำหนดค่าเกี่ยวกับแคชก็คือ Cache-Control ค่าหลักๆ ที่กำหนดได้ คือ
การตั้งค่าเกี่ยวกับแคชการตั้งค่าเกี่ยวกับแคช สำหรับ PHP page แล้ว โดยทั่วไป เว็บเซิร์ฟเวอร์จะกำหนดค่าเกี่ยวกับแคชเพื่อให้เพจถูกอัพเดทบ่อยที่สุด แต่อาจไม่ใช่ทุกครั้งที่ผู้ใช้รีเฟรชเพจ ดังนั้นหากคุณต้องการให้ผู้ใช้เห็นเนื้อหาของเพจที่อัพเดทล่าสุดเสมอ ก็ให้กำหนดค่าเกี่ยวกับแคชเองดังนี้ header("Cache-Control: no-store,no-cahe,must-revalidate"); header("Cache-Control: post-check=0,pre-check=0",false); header("Expires: Mon,18 Oct 2011 14:18:00 GMT"); header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
การใช้งานตัวแปร $_SERVER ในช่วงที่เว็บบราวเซอร์เรียกมายัง PHP page หนึ่งๆ PHP จะรวบรวมค่าต่างๆเกี่ยวกับเว็บเซิร์ฟเวอร์และเพจนั้นเก็บไว้ในตัวแปร $_SERVER ให้เราอ่านมาใช้งานได้ ตัวแปรนี้เป็นอาร์เรย์แบบ Superglobalจึงเรียกใช้ได้จากทุกที่ในโค้ดโปรแกรม ก่อนหน้านี้คุณเคยใช้งานตัวแปรอาร์เรย์ $_SERVER มาบ้างแล้ว ได้แก่การเรียกใช้ค่าของสมาชิกในอาร์เรย์ที่มีคีย์เท่ากับ “PHP_SELF” เพื่อหาชื่อไฟล์ของเพจปัจจุบัน ถ้าคุณอยากรู้ว่ามีค่าอะไรเก็บอยู่ในตัวแปรอาร์เรย์นี้บ้าง ก็ให้ใช้ฟังก์ชั่น print_rแสดงค่าของตัวแปรออกมา
ความหมายของค่าในตัวแปร $_SERVER ที่ใช้บ่อย • ค่าที่ให้ข้อมูลเกี่ยวกับเพจ - PHP_SELF และ SCRIPT_NAME ชื่อไฟล์ของเพจปัจจุบันเทียบเท่ากับตำแหน่งของ DocumentRoot เช่น /board/login.php - REQUEST_URI URI (Uniform Resource Identifier) ที่เว็บบราวเซอร์ใช้ในการร้องขอเพจปัจจุบัน หรือพูดง่ายๆคือชื่อไฟล์ของเพจปัจจุบัน รวมทั้ง Query String ที่พ่วงท้ายมาด้วย เช่น /board/login.phpMuserid=sanya
ความหมายของค่าในตัวแปร $_SERVER ที่ใช้บ่อย • ค่าที่ให้ข้อมูลเกี่ยวกับผู้ใช้ - REMOTE_ADDR หมายเลข IP(IP Address) ของเครื่องผู้ใช้ เช่น 127.0.0.1 - HTTP_USER_AGENT ชื่อโปรแกรมเว็บบราวเซอร์และระบบปฏิบัติการในเครื่องผู้ใช้ เช่น Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
ความหมายของค่าในตัวแปร $_SERVER ที่ใช้บ่อย ตัวอย่างนี้แสดงการตรวจสอบโปรแกรมเว็บบราวเซอร์ในเครื่องผู้ใช้ว่าเป็นตัวใดระหว่าง Internet Explorer , Mozilla Firefox หรืออื่นๆ detect_browser.php <? if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")) echo "คุณใช้ Internet Explorer"; elseif(strstr($_SERVER["HTTP_USER_AGENT"],"Firefox")) echo "คุณใช้ Mozilla Firefox"; else echo "คุณใช้เว็บบราวเซอร์อื่นที่ไม่ใช่ IE และ Firefox"; ?>
ค่าที่ให้ข้อมูลเกี่ยวกับเว็บเซิร์ฟเวอร์(ตัวอย่าง)ค่าที่ให้ข้อมูลเกี่ยวกับเว็บเซิร์ฟเวอร์(ตัวอย่าง) • SERVER_NAME ชื่อเครื่องเซิร์ฟเวอร์ เช่น localhost • SERVER_SOFTWAREชื่อโปรแกรมเว็บเซิร์ฟเวอร์ที่ใช้ในเครื่องเซิร์ฟเวอร์ เช่น Apache/2.0.59 (Win32) PHP/5.1.6 • SERVER_ADDR หมายเลข IP ของเครื่องเซิร์ฟเวอร์ • SERVER_PORTหมายเลขพอร์ต (port) ที่เครื่องเซิร์ฟเวอร์ใช้เป็นช่องทางในการสื่อสารกับเว็บบราวเซอร์ โดยปกติคือหมายเลข 80 • REQUEST_METHOD วิธีหรือเมธอดที่เว็บบราวเซอร์ใช้ในการเรียกมายังเพจปัจจุบัน ซึ่งโดยทั่วไปจะมีค่าเป็น GET หรือ POST
ตัวอย่าง <? echo $_SERVER["HTTP_USER_AGENT"]."<br>"; echo $_SERVER["SERVER_NAME"]."<br>"; echo $_SERVER["SERVER_ADDR"]."<br>"; echo $_SERVER["REQUEST_URI"]."<br>"; echo $_SERVER["REQUEST_METHOD"]; echo $_SERVER["REMOTE_ADDR"]; ?>
ความหมายของค่าในตัวแปร $_SERVER ที่ใช้บ่อย • ค่าที่ให้ข้อมูลเกี่ยวกับเว็บเซิร์ฟเวอร์ - SERVER_NAME ชื่อเครื่องเซิร์ฟเวอร์ เช่น localhost - SERVER_SOFTWARE ชื่อโปรแกรมเว็บเซิร์ฟเวอร์ที่ใช้ในเครื่องเซิร์ฟเวอร์ เช่น Apache/2.0.59 (Win32) PHP/5.1.6 - SERVER_ADDR หมายเลข IP ของเครื่องเซิร์ฟเวอร์ - SERVER_PORT หมายเลขพอร์ต (port) ที่เครื่องเซิร์ฟเวอร์ใช้เป็นช่องทางในการสื่อสารกับเว็บบราวเซอร์ โดยปกติคือหมายเลข 80 - REQUEST_METHOD วิธีหรือเมธอดที่เว็บบราวเซอร์ใช้ในการเรียกมายังเพจปัจจุบัน ซึ่งโดยทั่วไปจะมีค่าเป็น GET หรือ POST
สรุป • HTTP Header คือข้อมูลส่วนหัวของโปรโตคอล HTTP ซึ่งในการส่ง request/response ระหว่างเว็บบราวเซอร์กับเว็บเซิร์ฟเวอร์ ทุกครั้งจะมีการส่งข้อมูลเฮดเดอร์นี้ไปก่อนเสมอ แล้วจึงตามด้วยเนื้อหาหลักๆ ของ request หรือ response ในครั้งนั้น เช่นคุกกี้ที่เว้บเซิร์ฟเวอร์ส่งไปเก็บไว้ในเครื่องผู้ใช้ หรือคุกกี้ที่เว็บบราวเซอร์ส่งกลับไปให้เว็บเซิร์ฟเวอร์ ก็จะรวมอยู่ในส่วนของข้อมูลเฮดเดอร์นี่เอง • เมื่อต้องการส่งข้อมูลเฮดเดอร์ไปให้เว็บบราวเซอร์เอง ให้ใช้ฟังก์ชั่น header • การเปลี่ยนทิศทาง (redirect) เว็บบราวเซอร์ ให้กำหนดเฮดเดอร์ Location เป็น URL ของ เพจปลายทางที่ต้องการ • การตั้งค่าเกี่ยวกับแคชของเพจ ให้กำหนดเฮดเดอร์ Cache-Control • ฟังก์ชั่น header_sentใช้ตรวจสอบว่าขณะนั้นข้อมูลเฮดเดอร์ถูกส่งไปยังเว็บบราวเซอร์หรือยัง เพราะถ้าส่งไปแล้วจะส่งข้อมูลเฮดเดอร์อื่นๆไม่ได้อีก • ฟังก์ชั่น header_listใช้แสดงข้อมูลเฮดเดอร์ที่กำลังจะส่งหรือส่งไปยังเว็บบราวเซอร์แล้วออกมา • เมื่อผู้ใช้เรียกมายังเพจในเว็บเซิร์ฟเวอร์ของเรา PHP จะรวบรวมค่าต่างๆ เกี่ยวกับเครื่องของผู้ใช้ เว็บเซิร์ฟเวอร์ และเพจที่ถูกเรียก เก็บไว้ในตัวแปรอาร์เรย์ ชื่อ $_SERVER ซึ่งเราสามารถอ่านค่ามาใช้ใน PHP page ได้