อาร์เรย์ซูเปอร์โกลบอล $_SERVER
หนึ่งในอาร์เรย์ที่กำหนดไว้ล่วงหน้าที่สำคัญที่สุดคืออาร์เรย์ $_SERVER - ตัวแปล PHP จะวางตัวแปรที่ได้รับจากเซิร์ฟเวอร์ลงไป หากไม่มีตัวแปรเหล่านี้ จะเป็นการยากที่จะจัดระเบียบการสนับสนุนแบบเต็มสำหรับเว็บแอปพลิเคชัน ด้านล่างนี้เป็นคำอธิบายองค์ประกอบที่สำคัญที่สุดของอาร์เรย์ superglobal $_SERVER
ความคิดเห็น
ดู รายการทั้งหมดองค์ประกอบของอาร์เรย์ $_SERVER สามารถใช้ฟังก์ชัน print_r() ซึ่งพิมพ์ดัมพ์ของอาร์เรย์ หรือใช้ฟังก์ชัน phpinfo() ซึ่งแสดงข้อมูลเกี่ยวกับล่าม PHP
องค์ประกอบ $_SERVER["DOCUMENT_ROOT"]
องค์ประกอบ $_SERVER["DOCUMENT_ROOT"] มีเส้นทางไปยังไดเร็กทอรีรากของเซิร์ฟเวอร์ หากสคริปต์ถูกเรียกใช้งานในโฮสต์เสมือน องค์ประกอบนี้จะระบุเส้นทางไปยังไดเร็กทอรีรากของโฮสต์เสมือน เหล่านั้น. ในไฟล์การกำหนดค่า httpd.conf โฮสต์เสมือนมีคำสั่ง DocumentRoot ตั้งค่าเป็น "D:/main" องค์ประกอบ $_SERVER["DOCUMENT_ROOT"] จะมีค่า "D:main"
$_SERVER["HTTP_ACCEPT"] องค์ประกอบ
องค์ประกอบ $_SERVER["HTTP_ACCEPT"] อธิบายการตั้งค่าประเภทเอกสารของลูกค้า เนื้อหาขององค์ประกอบนี้ถูกดึงมาจากส่วนหัวยอมรับ HTTP ที่ไคลเอ็นต์ส่งไปยังเซิร์ฟเวอร์ เนื้อหาของส่วนหัวนี้อาจมีลักษณะเช่นนี้
รูปภาพ/gif, รูปภาพ/x-xbitmap, รูปภาพ/jpeg, รูปภาพ/pjpeg, แอปพลิเคชัน/x-shockwave-flash, แอปพลิเคชัน/vnd.ms-excel, แอปพลิเคชัน/msword, */*
ส่วนหัว Accept ช่วยให้คุณสามารถระบุประเภทสื่อที่ไคลเอ็นต์ต้องการรับเพื่อตอบสนองต่อคำขอ ส่วนหัวนี้ช่วยให้เซิร์ฟเวอร์ทราบว่าการตอบสนองนั้นจำกัดอยู่เพียงประเภทที่ต้องการเพียงเล็กน้อยเท่านั้น
สัญลักษณ์ * ใช้เพื่อจัดกลุ่มประเภทในแถวสื่อ ตัวอย่างเช่น สัญลักษณ์ */* ระบุการใช้ทุกประเภท และประเภทสัญลักษณ์/* ระบุการใช้ประเภทย่อยทั้งหมดของประเภทประเภทที่เลือก
ความคิดเห็น
ประเภทสื่อจะถูกคั่นด้วยเครื่องหมายจุลภาค
สื่อแต่ละชุดยังมีลักษณะเฉพาะด้วยชุดพารามิเตอร์เพิ่มเติมอีกด้วย หนึ่งในนั้นคือสิ่งที่เรียกว่าสัมประสิทธิ์การตั้งค่าสัมพัทธ์ q ซึ่งรับค่าตั้งแต่ 0 ถึง 1 ตามลำดับจากประเภทที่ต้องการน้อยกว่าไปจนถึงประเภทที่ต้องการมากกว่า
ความคิดเห็น
การใช้พารามิเตอร์ q หลายตัวทำให้ไคลเอ็นต์สามารถบอกเซิร์ฟเวอร์ถึงการกำหนดค่าตามความชอบที่สัมพันธ์กันสำหรับสื่อประเภทใดประเภทหนึ่งโดยเฉพาะ
ตามค่าดีฟอลต์ พารามิเตอร์ q คือ 1 และยังถูกแยกออกจากชนิดสื่อบันทึกด้วยเครื่องหมายอัฒภาค
ตัวอย่างของส่วนหัวยอมรับ:
ยอมรับ: เสียง/*; q=0.2 เสียง/พื้นฐาน
ในส่วนหัวนี้ ประเภทแรกคือเสียง/* ซึ่งรวมถึงเอกสารดนตรีทั้งหมดและมีค่าสัมประสิทธิ์การตั้งค่าเป็น 0.2 คั่นด้วยเครื่องหมายจุลภาค ระบุประเภทเสียง/พื้นฐาน ซึ่งไม่ได้ระบุค่าสัมประสิทธิ์การกำหนดลักษณะ และใช้ค่าเริ่มต้นเป็นหนึ่ง จากการอ้างอิง RFC2616 หัวข้อนี้สามารถตีความได้ดังนี้: “ฉันชอบประเภทเสียง/พื้นฐาน แต่ฉันสามารถส่งเอกสารประเภทเสียงอื่นๆ ได้ หากมี หลังจากลดปัจจัยการตั้งค่าลงมากกว่า 80%”
ตัวอย่างอาจจะซับซ้อนกว่านี้
ยอมรับ: ข้อความ/ธรรมดา; q=0.5, ข้อความ/html,
ความคิดเห็น
ข้อความ/x-dvi;
q=0.8, ข้อความ/x-c โปรดทราบว่าองค์ประกอบ $_SERVER["HTTP_ACCEPT"] มีข้อมูลเหมือนกันทุกประการ แต่ไม่มีส่วนหัว Accept เริ่มต้นส่วนหัวนี้ได้รับการตีความดังต่อไปนี้: แนะนำให้ใช้ประเภทเอกสาร text/html และ text/x-c แต่ถ้าสิ่งเหล่านี้ไม่พร้อมใช้งาน ไคลเอ็นต์ที่ส่ง
คำขอนี้
จะเลือกใช้ text/x-dvi และหากไม่มี ก็สามารถรับข้อความ/ประเภทธรรมดาได้ องค์ประกอบ $_SERVER["HTTP_ACCEPT_LANGUAGE"]องค์ประกอบ $_SERVER["HTTP_ACCEPT_LANGUAGE"] อธิบายการตั้งค่าภาษาของลูกค้า
ข้อมูลนี้
ถูกแยกออกจากส่วนหัว HTTP ยอมรับภาษาที่ไคลเอ็นต์ส่งไปยังเซิร์ฟเวอร์ ตัวอย่างต่อไปนี้สามารถให้ได้:
ยอมรับภาษา: ru, en;
เนื้อหาขององค์ประกอบ $_SERVER["HTTP_ACCEPT_LANGUAGE"] สามารถใช้เพื่อกำหนดสัญชาติของผู้เยี่ยมชมได้ อย่างไรก็ตาม ผลลัพธ์จะเป็นค่าโดยประมาณ เนื่องจากผู้ใช้จำนวนมากใช้เบราว์เซอร์เวอร์ชันภาษาอังกฤษ ซึ่งจะแจ้งให้เซิร์ฟเวอร์ทราบว่าผู้เยี่ยมชมชอบเพียงภาษาเดียวเท่านั้น - อังกฤษ
องค์ประกอบ $_SERVER["HTTP_HOST"]
องค์ประกอบ $_SERVER["HTTP_HOST"] มีชื่อเซิร์ฟเวอร์ ซึ่งมักจะตรงกับชื่อโดเมนของไซต์ที่อยู่บนเซิร์ฟเวอร์ โดยทั่วไป ชื่อที่ระบุในพารามิเตอร์นี้จะเหมือนกับชื่อ $_SERVER["SERVER_NAME"] พารามิเตอร์ประกอบด้วยชื่อโดเมนเท่านั้นที่ไม่มีชื่อโปรโตคอล (http://) เช่น
www.sofftime.ru
องค์ประกอบ $_SERVER["HTTP_REFERER"]
องค์ประกอบ $_SERVER["HTTP_REFERER"] มีที่อยู่ของหน้าที่ผู้เยี่ยมชมมาที่หน้านี้ การเปลี่ยนแปลงจะต้องดำเนินการผ่านลิงก์ มาสร้างสองหน้าด้วยกันคือ index.php และ page.php
หน้าดัชนี.php
เสียงสะท้อน "เชื่อมโยงไปยังหน้า PHP
"
;
เสียงสะท้อน
$_SERVER["HTTP_REFERER"]
?>
หน้า page.php จะมีเนื้อหาคล้ายกัน แต่ลิงก์จะชี้ไปที่หน้า index.php
หน้า page.php
เสียงสะท้อน "เชื่อมโยงไปยังหน้า PHP
"
;
เสียงสะท้อน "เนื้อหาของ $_SERVER["HTTP_REFERER"] - ".
$_SERVER["HTTP_REFERER"]
?>
เมื่อย้ายจากหน้าหนึ่งไปยังอีกหน้าหนึ่ง ที่อยู่ของหน้าที่ทำการเปลี่ยนแปลงจะแสดงใต้ลิงก์
องค์ประกอบ $_SERVER["HTTP_USER_AGENT"]
องค์ประกอบ $_SERVER["HTTP_USER_AGENT"] มีข้อมูลเกี่ยวกับประเภทเบราว์เซอร์และเวอร์ชันและ ระบบปฏิบัติการผู้เยี่ยมชม
ต่อไปนี้เป็นเนื้อหาทั่วไปของบรรทัดนี้: "Mozilla/4.0 (เข้ากันได้; MSIE 6.0; Windows NT 5.1)" การมีอยู่ของสตริงย่อย "MSIE 6.0" บ่งชี้ว่าผู้เยี่ยมชมกำลังดูเพจโดยใช้อินเทอร์เน็ต เวอร์ชันนักสำรวจ 6.0. บรรทัด "Windows NT 5.1" ระบุว่าระบบปฏิบัติการคือ Windows XP
ความคิดเห็น
สำหรับ Windows 2000 องค์ประกอบ $_SERVER["HTTP_USER_AGENT"] มีลักษณะดังนี้: "Mozilla/4.0 (เข้ากันได้กับ; MSIE 5.01; Windows NT 5.0)") ในขณะที่สำหรับ Windows XP ดูเหมือนว่า "Mozilla/4.0 (เข้ากันได้; MSIE 6.0) ;วินโดวส์ NT 5.1)"
หากผู้เยี่ยมชมใช้เบราว์เซอร์ Opera เนื้อหาของ $_SERVER["HTTP_USER_AGENT"] อาจมีลักษณะดังนี้: "Mozilla/4.0 (เข้ากันได้กับ; MSIE 5.0; Windows 98) Opera 6.04 " สตริงย่อย "MSIE 6.0" ก็ปรากฏอยู่ที่นี่เช่นกัน ซึ่งบ่งชี้ว่าเบราว์เซอร์โอเปร่า เข้ากันได้กับเบราว์เซอร์และใช้ไลบรารีไดนามิกของ Windows เดียวกัน ดังนั้น เมื่อวิเคราะห์สตริงที่ส่งคืนโดยเบราว์เซอร์ คุณควรจำไว้ว่า Internet Explorer อ้างถึงสตริงที่มีสตริงย่อย "MSIE 6.0" และไม่มีสตริงย่อย "Opera" นอกจากนี้ จากบรรทัดนี้เราสามารถสรุปได้ว่าผู้ใช้ใช้ระบบปฏิบัติการ Windows 98
ความคิดเห็น
ตัวแทนผู้ใช้ เบราว์เซอร์ไฟร์ฟอกซ์อาจมีลักษณะเช่นนี้ Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.
เมื่อใช้เบราว์เซอร์ Netscape เนื้อหาขององค์ประกอบ $_SERVER["HTTP_USER_AGENT"] อาจมีลักษณะดังนี้: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . ที่เป็นของเบราว์เซอร์นี้สามารถกำหนดได้โดยการมีอยู่ของสตริงย่อย "Netscape" นอกจากนี้ คุณจะพบว่าผู้เยี่ยมชมกำลังเข้าถึงอินเทอร์เน็ตโดยใช้ห้องผ่าตัด เวอร์ชันลินุกซ์พร้อมด้วยคอร์ที่ปรับให้เหมาะสมสำหรับ Pentium IV ซึ่งอยู่ในเชลล์กราฟิก X-Window กลไกนี้สะดวกในการรวบรวมข้อมูลทางสถิติซึ่งช่วยให้นักออกแบบสามารถปรับหน้าเพจให้เหมาะสมสำหรับเบราว์เซอร์ทั่วไปได้
องค์ประกอบ $_SERVER["REMOTE_ADDR"]
องค์ประกอบ $_SERVER["REMOTE_ADDR"] มีที่อยู่ IP ของลูกค้า เมื่อทำการทดสอบบนเครื่องท้องถิ่น ที่อยู่นี้จะเท่ากับ 127.0.0.1 อย่างไรก็ตาม เมื่อทำการทดสอบบนเครือข่าย ตัวแปรจะส่งกลับที่อยู่ IP ของไคลเอ็นต์หรือพร็อกซีเซิร์ฟเวอร์สุดท้ายที่ไคลเอ็นต์เข้าถึงเซิร์ฟเวอร์ หากไคลเอนต์ใช้พร็อกซีเซิร์ฟเวอร์ คุณสามารถค้นหาที่อยู่ IP ได้โดยใช้ตัวแปรสภาพแวดล้อม HTTP_X_FORWARDED_FOR ซึ่งสามารถรับค่าได้โดยใช้ฟังก์ชัน getenv()
ความคิดเห็น
พร็อกซีเซิร์ฟเวอร์เป็นเซิร์ฟเวอร์ระดับกลางพิเศษที่ให้บริการประเภทพิเศษ: การบีบอัดข้อมูลจราจร, การเข้ารหัสข้อมูล, การปรับตัวให้เข้ากับ อุปกรณ์เคลื่อนที่ฯลฯ ในบรรดาพร็อกซีเซิร์ฟเวอร์จำนวนมาก มีสิ่งที่เรียกว่าพร็อกซีเซิร์ฟเวอร์ที่ไม่เปิดเผยตัวตน ซึ่งอนุญาตให้คุณซ่อนที่อยู่ IP ที่แท้จริงของไคลเอนต์ เซิร์ฟเวอร์ดังกล่าวจะไม่ส่งคืนตัวแปรสภาพแวดล้อม HTTP_X_FORWARDED_FOR
การดึงข้อมูลตัวแปรสภาพแวดล้อม HTTP_X_FORWARDED_FOR
เสียงสะท้อน getenv (HTTP_X_FORWARDED_FOR);
?>
องค์ประกอบ $_SERVER["SCRIPT_FILENAME"]
องค์ประกอบ $_SERVER["SCRIPT_FILENAME"] มีเส้นทางที่แน่นอนไปยังไฟล์จากรากของดิสก์ ดังนั้นหากเซิร์ฟเวอร์กำลังทำงานอยู่ ระบบวินโดวส์ดังนั้นเส้นทางดังกล่าวอาจมีลักษณะเช่นนี้: “d:main estindex.php” เช่น เส้นทางถูกระบุจากดิสก์ ในระบบปฏิบัติการที่คล้าย UNIX เส้นทางจะถูกระบุจากไดเร็กทอรีราก / เช่น "/var/share/www/test/index.php"
องค์ประกอบ $_SERVER["SERVER_NAME"]
องค์ประกอบ $_SERVER["SERVER_NAME"] มีชื่อของเซิร์ฟเวอร์ ซึ่งโดยปกติจะตรงกับชื่อโดเมนของไซต์ที่อยู่บนนั้น
ตัวอย่างเช่น,
www.softtime.ru เนื้อหาขององค์ประกอบ $_SERVER["SERVER_NAME"] มักจะเหมือนกับเนื้อหาขององค์ประกอบ $_SERVER["HTTP_HOST"] นอกจากชื่อเซิร์ฟเวอร์แล้วอาร์เรย์ซูเปอร์โกลบอล
$_SERVER ช่วยให้คุณค้นหาพารามิเตอร์เซิร์ฟเวอร์อื่นๆ จำนวนมาก เช่น ที่อยู่ IP ของเซิร์ฟเวอร์ พอร์ตการรอรับ เว็บเซิร์ฟเวอร์ที่ติดตั้ง และเวอร์ชันของโปรโตคอล HTTP ข้อมูลนี้อยู่ในองค์ประกอบ $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] และ $_SERVER["SERVER_PROTOCOL"] ตามลำดับ
ด้านล่างนี้เป็นตัวอย่างการใช้องค์ประกอบเหล่านี้
"
;
เสียงสะท้อน การใช้องค์ประกอบอาร์เรย์ $_SERVER echo "ชื่อเซิร์ฟเวอร์ -" . $_SERVER["SERVER_NAME"]. -
"
;
"ที่อยู่ IP ของเซิร์ฟเวอร์ -"
"
;
- $_SERVER["SERVER_ADDR"]. -
"
;
เสียงสะท้อน echo "พอร์ตเซิร์ฟเวอร์ -" . $_SERVER["SERVER_PORT"]. - echo "เว็บเซิร์ฟเวอร์ -" . $_SERVER["SERVER_SOFTWARE"]. -
"
;
?>
"เวอร์ชันโปรโตคอล HTTP -"
- $_SERVER["SERVER_PROTOCOL"]. -
องค์ประกอบ $_SERVER["REQUEST_METHOD"]
องค์ประกอบ $_SERVER["REQUEST_METHOD"] มีวิธีการร้องขอที่ใช้ในการเรียกสคริปต์: GET หรือ POST
สารบัญ $user_infoเหล่านี้คือ
ทั้งหมด
คีย์ที่กำหนดไว้สำหรับ $user_info ใน loadUserSettings() บางส่วนก็อธิบายตนเองได้อย่างแน่นอน
- กลุ่ม
- อาร์เรย์ กลุ่มสมาชิกที่เป็นไปได้ทั้งหมดแนบมากับผู้ใช้ด้วย คีย์ไม่สำคัญ.. ค่าคือกลุ่มที่ถูกฆ่าเชื้อเป็น int ในกรณีนี้ ซึ่งรวมถึง:
- กลุ่มประถมศึกษา
กลุ่มการนับโพสต์
กลุ่มเพิ่มเติม สิ่งเหล่านี้ถูกจัดเก็บไว้ในฐานข้อมูลเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค
อาจเป็น_robot
บูล เป็นจริงหากเอเจนต์ตรงกับสไปเดอร์ที่รู้จักหากเปิดใช้งานฟีเจอร์นี้ และหากปิดใช้งาน จะทำการเดาอย่างมีหลักการ".!}
รหัส
int สอดคล้องกับค่าฐานข้อมูลของสมาชิก "id_member
ชื่อผู้ใช้
ชื่อ
เชือก ชื่อที่แสดงของพวกเขา
อีเมล
รหัสผ่าน
ภาษา
is_guest
is_admin
ธีม
Last_login
ภายใน การประทับเวลายูนิกซ์
ไอพี
$_SERVER["REMOTE_ADDR"]
ไอพี2
$_SERVER["BAN_CHECK_IP"]
โพสต์
ภายใน จำนวนการโพสต์
เวลา_รูปแบบ
เชือก รูปแบบที่กำหนดเองสำหรับ strtftime()
เวลา_ชดเชย
- ภายใน ชดเชยรายชั่วโมงของผู้ใช้จากเวลาฟอรัม
- อวตาร
- URL:สตริง
- ชื่อไฟล์:string
custom_dir:bool
id_attach: int
smiley_set
ข้อความ
ภายใน จำนวน PM ที่ยังไม่ได้อ่านที่พวกเขามี
Total_time_logged_in
เพื่อน
สตริง รายชื่อเพื่อนคั่นด้วยเครื่องหมายจุลภาค
บอร์ดละเว้น
สตริง รายชื่อบอร์ดที่พวกเขาละเว้นคั่นด้วยเครื่องหมายจุลภาค
ผู้ใช้ที่ละเลย
สตริง รายชื่อผู้ใช้ที่พวกเขาเลือกที่จะละเว้นคั่นด้วยเครื่องหมายจุลภาค
- ใน SMF 1.1.x เฉพาะ PM เท่านั้นที่จะถูกละเว้น
- ใน SMF 2.0.x เป็นต้นไป คุณสมบัตินี้ได้รับการปรับปรุงให้ซ่อนโพสต์ของผู้ใช้ที่ถูกละเว้นด้วย
คำเตือน
ภายใน จุดเตือนของพวกเขา
สิทธิ์
query_see_board
รายชื่อบอร์ดทั้งหมดที่สามารถดูเป็นส่วนหนึ่งของคำสั่ง SQL ที่เตรียมไว้
query_wanna_see_board
รายชื่อบอร์ดที่ต้องการดูเป็นส่วนหนึ่งของคำสั่ง SQL ที่เตรียมไว้
mod_cache
is_mod
บูลีน เป็นเท็จ ยกเว้นในบอร์ดที่สมาชิกเป็นผู้ดูแล มันถูกกำหนดไว้เสมอ
บางครั้งคุณอาจต้องการหยุดพักจากขั้นตอนการเขียนโค้ดในปัจจุบัน และจากปัญหาเล็กๆ น้อยๆ ที่เกี่ยวข้องกับพื้นที่ในบทความเรื่อง "รายละเอียด" ลองสังเกตสิ่งที่คุณทำมาเป็นเวลานาน
ดังนั้นวิสัยทัศน์ของฉันเกี่ยวกับแนวทางงานหลักของการเขียนโปรแกรม PHP - การสร้างหน้าเว็บ ฉันได้สัมผัสบางส่วนในหัวข้อนี้แล้วในบางส่วน - บทความเกี่ยวกับคลาสเทมเพลตและเกี่ยวกับ XML สามารถพบได้ในไฟล์เก็บถาวร ตอนนี้ฉันอยากจะรวบรวมมันทั้งหมดเข้าด้วยกันและทำสิ่งที่ยิ่งใหญ่ ส่วนแรก.
1. ต้นกำเนิดของ php.ini
php เริ่มต้นจากตรงไหนสำหรับพวกเราส่วนใหญ่? จากการแทรกสคริปต์ลงในหน้า HTML ตัวอย่างเช่น ไดเร็กทอรีลิงก์ของคุณเอง หน้าที่มีลิงก์จากหมวดหมู่เฉพาะ:".mysql_result($ผลลัพธ์, 0) " "; mysql_free_result($result); $result = mysql_query("SELECT id, title, ratio, description, site_date FROM site WHERE rubrika=". intval($id). " เรียงตามอัตราส่วน DESC, site_date DESC, title"); if (mysql_error()) echo mysql_error(); อย่างอื่นในขณะที่ ($row = mysql_fetch_assoc($result)) echo "
($แถว)
($แถว)
บันทึก: ($row), เรต: ($row)
ภาวะแทรกซ้อนถัดไปคือความพยายามทำงานกับคุกกี้และปัญหาขึ้นอยู่กับส่วนที่ผู้ใช้เข้าชม เพื่อให้จินตนาการได้ดีขึ้น: ให้เราตัดสินใจว่ากลุ่มผู้เยี่ยมชมจะมายังหน้าแรกของเรา และสำหรับผู้มีโอกาสเป็นโฆษณา เราจะสร้างเครื่องมือแบนเนอร์ที่มีการกำหนดเป้าหมาย สมมติว่าผู้ใช้ที่เข้าชมส่วนดนตรีร็อคและเครื่องดนตรีจะเห็นแบนเนอร์โฆษณาร้านกีตาร์ไฟฟ้าในหน้าถัดไป
ในกรณีนี้ เราจะต้องแทรกโค้ด PHP ที่จุดเริ่มต้นของไฟล์และย้ายการตรวจสอบว่ามีหมวดหมู่อยู่ที่นั่นหรือไม่ เพราะคุกกี้สามารถออกได้ก่อนที่จะออกไบต์แรกของเอกสารเท่านั้น
แน่นอน คุณจะบอกว่าสิ่งนี้สามารถทำได้ง่ายโดยใช้กลไกของเซสชันผู้ใช้ ซึ่งง่ายกว่าในแง่ของการออกเนื้อหาและปลอดภัยกว่า เนื่องจากผู้ใช้สามารถเปลี่ยนเนื้อหาของคุกกี้ได้ด้วยตนเอง ใช่ นี่เป็นเรื่องจริง แต่ประการแรก สิ่งนี้แสดงถึงวิสัยทัศน์ของผู้เริ่มต้นเขียนโปรแกรมที่สร้างโฮมเพจของเขา และอย่างที่สอง เรากำลังพูดถึงอดีตอันไกลโพ้น - จริงๆ แล้วเราอยู่ในปี 1998
มันไม่ได้ทำให้ชีวิตง่ายขึ้นมากนักโดยส่งออกบล็อกโค้ด HTML และ PHP ที่เหมือนกันไปเป็นไฟล์ที่รวมอยู่ งานที่อธิบายไว้ข้างต้น - การสร้างแคตตาล็อกลิงก์อย่างง่ายพร้อมหมวดหมู่ - อาจเป็นขีด จำกัด สูงสุดของความสามารถของแนวทางนี้ เมื่อปฏิบัติงานที่ซับซ้อนมากขึ้น มีความเสี่ยงสูงที่จะต้องเผชิญกับต้นทุนค่าแรงที่สูงขึ้น
2. ทำให้โค้ดซับซ้อน
การพัฒนาเชิงตรรกะของแนวทางก่อนหน้านี้คือการเปลี่ยนไปใช้ PHP โดยสมบูรณ์ในแง่ที่ว่าทุกหน้าเป็นโค้ด PHP - ที่จุดเริ่มต้นของไฟล์จะมีแท็กเปิด "
class="club_article_small_caption">ข่าวสารสำหรับลูกค้า
($row)"); if ($row["news_date"] > date("Ymd", time() - 3600*24*14)) print(" ใหม่!");พิมพ์(" |
"; mysql_free_result($result); $result = mysql_query("SELECT id, title, ratio, description, site_date FROM site WHERE rubrika=". intval($id). " เรียงตามอัตราส่วน DESC, site_date DESC, title"); if (mysql_error()) echo mysql_error(); อย่างอื่นในขณะที่ ($row = mysql_fetch_assoc($result)) echo "
"; mysql_free_result($result); $result = mysql_query("SELECT id, title, ratio, description, site_date FROM site WHERE rubrika=". intval($id). " เรียงตามอัตราส่วน DESC, site_date DESC, title"); if (mysql_error()) echo mysql_error(); อย่างอื่นในขณะที่ ($row = mysql_fetch_assoc($result)) echo " |
แต่สิ่งนี้ไม่ได้ทำให้งานง่ายขึ้นเลยและชั่วโมงแห่งการพิจารณาจะมาถึงอย่างแน่นอน: จะต้องทำซ้ำการออกแบบไซต์ ผู้ออกแบบจะปฏิเสธที่จะแก้ไขสิ่งนี้ มีเพียงผู้ที่เขียนโค้ดดังกล่าวเท่านั้นจึงจะสามารถเข้าใจและแทนที่ HTML เก่าด้วยโค้ดใหม่ได้ หากบุคคลนี้ไม่ได้ทำงานในโปรเจ็กต์นี้อีกต่อไป โปรเจ็กต์นั้นจะต้องถูกเขียนใหม่เกือบตั้งแต่ต้น ไม่เช่นนั้นมันจะตายไป และกลายเป็นอนุสรณ์สถานแห่งความสายตาสั้นของมนุษย์
อีกทางเลือกหนึ่งสำหรับการพัฒนาแนวทาง HTML และ PHP แบบผสม PHP มีคุณสมบัติที่เรียกว่าการหลบหนีขั้นสูง
ช่วยให้คุณสามารถแสดงโค้ด HTML ปกติภายในโครงสร้างภาษา:
=$row["news_date"]?>ข่าวสารสำหรับลูกค้า ใหม่! | ">
=$row["title"]?>
=$row["announce"]?> |
วันที่("Ymd", เวลา() - 3600*24*14)) ( ?>
ผู้ออกแบบเลย์เอาต์หรือผู้ออกแบบที่เปิดไฟล์นี้ใน HomeSite จะเห็นมาร์กอัป HTML พร้อมการไฮไลต์ และจะสามารถแก้ไขการออกแบบของเพจได้ สำหรับไซต์ธรรมดา วิธีนี้ค่อนข้างเหมาะสม ในสถานการณ์ที่ซับซ้อน มันไม่ดีเลย
3. รัฐประหาร
ด้วยการเปิดตัว PHP 3.0... อย่างไรก็ตาม การฟื้นฟูลำดับเหตุการณ์คงไม่เสียหายเนื่องจากเรากำลังพูดถึงประวัติศาสตร์ที่ครอบคลุม ดังนั้น ลำดับเหตุการณ์ที่เราจัดการเพื่อกู้คืนโดยใช้ไฟล์เก็บถาวรของรายชื่อผู้รับจดหมาย php ประกาศและหน้าจากไฟล์เก็บถาวรเว็บ:
08.1997 PHP 3.0 Beta1 06.06.1998 PHP 3.0 รุ่น 07.19.1999 PHP 4.0 Beta1 05.22.2000 PHP 4.0 รุ่น 12.10.2001 PHP 4.1 รุ่น 04.22.2002 PHP 4.2 รุ่น 10.10.2002 PHP 4.3.0pre1 (ก่อน 1 ไม่ใช่เบต้า แต่ก็ยังไม่ใช่ ปล่อยตัวผู้สมัคร)
ดังนั้นด้วยการเปิดตัว PHP 3.0 เครื่องมือจึงปรากฏขึ้นสำหรับการใช้วิธีการใหม่ในการเขียนโปรแกรม PHP - การบัฟเฟอร์หน้าในสคริปต์ (สิ่งสำคัญคือต้องทราบว่านี่ไม่ใช่การบัฟเฟอร์แบบเดียวกับที่เรามีตอนนี้) เมื่อเวลาผ่านไป งานสร้างเว็บไซต์มีความซับซ้อนมากขึ้น PHP ถูกใช้อย่างกว้างขวางมากขึ้นเรื่อยๆ และเว็บไซต์มีความไดนามิกมากขึ้นเรื่อยๆยิ่งไซต์มีขนาดใหญ่เท่าใด ปัญหาก็ยิ่งมากขึ้นเท่านั้นในการทำทุกอย่างโดยใช้ไฟล์ที่รวมอยู่ใน PHP และ HTML แบบผสม ค่อนข้างเป็นขั้นตอนต่อไปที่สมเหตุสมผล
ส่วนขยาย PHP เริ่มประมวลผลหน้า HTML ในหน่วยความจำสคริปต์และส่งมอบให้กับผู้ใช้ทั้งหมดหรือบางส่วนการนำแนวทางนี้ไปใช้ได้รับการช่วยเหลือเป็นอย่างน้อยโดยการสนับสนุน (เช่น การจำลอง) ของการเขียนโปรแกรมเชิงวัตถุที่ใช้ใน PHP3 ถูกสร้างขึ้น
คลาสเทมเพลต ซึ่งทำให้ง่ายต่อการใช้งานด้วยเทมเพลตเพจและข้อมูลที่ควรป้อนลงไปสิ่งนี้ขยายขีดความสามารถของโปรแกรม แต่ในขณะเดียวกันก็ต้องการมากกว่านี้
ทรัพยากรระบบ
- ปัจจุบันเราสามารถพูดได้ว่าประโยชน์ของการใช้วิธีนี้มีมากกว่าต้นทุนทรัพยากรระบบ แต่เมื่อสองหรือสามปีที่แล้ว หลายคนเชื่อว่าการเก็บเอกสารทั้งหมดไว้ในหน่วยความจำเป็นความฟุ่มเฟือยที่ไม่แพงสำหรับการเขียนโปรแกรมเว็บ
หกเดือนต่อมา ฉันตัดสินใจเปลี่ยนแปลงบางอย่างในแผนของฉัน
จะไม่มีศีลธรรมเกี่ยวกับความชั่วของชนชั้นที่ตนเองสร้างขึ้นเอง
พวกเขาเป็นคนดี ใช้มันและสิ่งที่คุณต้องการจะติดตัวคุณไปด้วย! เพียงจำไว้ว่าสถานการณ์บางอย่างจะรบกวนคุณ
อันดับแรก. หากชั้นเรียนนี้เขียนขึ้นโดยเฉพาะ นั่นหมายความว่าชั้นเรียนนั้นค่อนข้างจะแยกออกจากชีวิต แม้ว่าชั้นเรียนจะมีประสบการณ์ในการพัฒนามากมายอยู่เบื้องหลัง แต่ก็ยังคงถูกสร้างขึ้นในสภาพโรงเรือนร้อน
เทคโนโลยีที่ได้จะมีเงื่อนไขการใช้งานเฉพาะของตัวเองซึ่งจะต้องปรับเปลี่ยนการพัฒนาในอนาคตหรือจะต้องออกแบบคลาสใหม่
ที่สอง. คลาสที่สังเคราะห์จากการพัฒนาในโปรเจ็กต์ต่างๆ ก็ต้องมีการเปลี่ยนแปลงเช่นกัน ยิ่งเป็นคลาสสากลมากเท่าไรก็ยิ่งมากขึ้นเท่านั้น
ดังนั้น คุณสามารถสร้างคลาสของคุณเองได้ (เท่าที่ฉันรู้ คลาสเทมเพลตมีหลายคนใช้คลาสของตัวเอง) หากคุณคิดแบบนิรนัย โดยสร้างชั้นเรียนจากการประมาณการสิ่งที่คุณต้องการ มีโอกาสเล็กน้อยที่คุณจะได้สิ่งที่ยอดเยี่ยม และมีความเป็นไปได้สูงที่ผลลัพธ์จะไม่ตรงกับที่คุณต้องการ คุณสามารถใช้การปฐมนิเทศได้ - หลังจากทำงานมายาวนาน คุณรับประกันได้ว่าจะได้สิ่งที่ใช้ได้ผล แต่ไม่จำเป็นต้องยอดเยี่ยมเสมอไป
Dmitry Koterov แสดงความคิดเห็นเกี่ยวกับประสบการณ์การเรียนรู้ phpBB: หลังจากเขียนคลาสเทมเพลตแล้ว หลายคนเต็มไปด้วยความกระตือรือร้นจึงเริ่มผลักดันทุกอย่างภายใต้คลาสนี้ แนวคิดของคลาสดังกล่าวคือการแยกโค้ดและการออกแบบ แต่ในทางกลับกันผู้เขียน phpBB กลับผสมพวกมันให้มากที่สุด
แต่ในความคิดของฉัน แม้ว่าจะใช้แนวทางนี้ตามปกติ (คลาสเทมเพลต) โค้ดก็จะยุ่งยาก แต่ก็มีไฟล์จำนวนมากที่มีเทมเพลต ใน เมื่อเร็วๆ นี้โดยหลักการแล้วฉันได้ข้อสรุปว่าในคลาสเทมเพลตนั้นเป็นไปไม่ได้ที่จะแยกโค้ด PHP ออกจากข้อมูลและการออกแบบ เมื่อเปลี่ยนการออกแบบไซต์บนเอ็นจิ้นดังกล่าวคุณจะต้องเจาะลึกสคริปต์ PHP อย่างแน่นอนและสิ่งนี้จะไม่ทำโดยนักออกแบบ แต่โดยคุณ
__ทั่วโลก__
(ซ่อนและเพิ่มโดยอัตโนมัติ) |
|||||
บล็อก1 |
|
เอกสารระบุว่าไม่จำเป็นต้องระบุในเทมเพลตว่าบล็อกใดเป็นบล็อกย่อย ชั้นจะเข้าใจเรื่องนี้เอง
เอกสารประกอบสำหรับคลาสนี้บอกว่ารู้ว่า inner1 เป็นลูกของ block2 และไม่จำเป็นต้องบอกเกี่ยวกับเรื่องนี้ หากต้องการแทรกข้อมูลลงในบล็อก เพียงเรียกใช้โค้ดนี้หลาย ๆ ครั้งตามที่คุณต้องการ:
setVariable(...); $tpl->parseCurrentBlock(); -
หากต้องการเพิ่มเนื้อหาลงใน block1 คุณต้องทำสิ่งต่อไปนี้:
setCurrentBlock("inner1"); $tpl->setVariable(...); $tpl->parseCurrentBlock(); $tpl->setVariable(...); $tpl->parseCurrentBlock(); $tpl->parse("block1"); -
เป็นผลให้โค้ดสคริปต์มีลักษณะดังนี้:
loadTemplatefile(ชื่อไฟล์สตริง [, บูลีน RemoveUnknownVariables, บูลีน RemoveEmptyBlocks]) // การตั้งค่าตัวแปร "สากล" เช่น ตัวแปรที่ไม่รวมอยู่ในบล็อก (บล็อกย่อย) $tpl->setVariable(ชื่อตัวแปรสตริง, ค่าผสม); // อีกวิธีหนึ่งในการระบุตัวแปรคือผ่านอาร์เรย์ $tpl->setVariable(array (string varname => Mixed value)); // เราจะใช้บล็อกบางบล็อก แม้แต่บล็อกหนึ่งที่ฝังลึกอยู่ในบล็อกอื่นๆ $tpl->setCurrentBlock(string blockname); // ทำซ้ำได้มากเท่าที่ต้องการ $tpl->setVariable(array (string varname => Mixed value)); $tpl->parseCurrentBlock(); // รับผลลัพธ์หรือพิมพ์โดยการเรียก $tpl->show() $tpl->get(); -
รหัสสะดวกและชัดเจนกว่า FastTemplate
แต่โปรแกรมเมอร์จำนวนมากยังคงเขียนคลาสเทมเพลตของตนเอง เรียบง่ายกว่าแต่มีคุณสมบัติบางอย่างที่ไม่พบในชั้นเรียนสาธารณะ ฉันเขียนคลาสของตัวเองโดยสร้างบล็อกซึ่งผลลัพธ์ของการสืบค้น SQL จะถูกแทรกโดยอัตโนมัติ นอกจากนี้ยังมีส่วนหัวและส่วนท้ายของบล็อก (เช่นแท็ก
PHP3 เปิดตัวโมดูลสำหรับฟังก์ชันการประมวลผล XML เมื่อใช้ฟังก์ชันของโมดูลนี้ คุณสามารถสร้างตัวจัดการโค้ด XML ของคุณเองได้ แต่อย่างไรก็ตาม คุณไม่สามารถตรวจสอบความถูกต้องของเอกสาร XML ได้
เจาะลึกทฤษฎีว่า XML คืออะไร และเหตุใดจึงจำเป็น
XML เป็นวิธีการบันทึกข้อมูลที่มีโครงสร้าง "ข้อมูลที่มีโครงสร้าง" มักจะหมายถึงสิ่งต่างๆ เช่น สเปรดชีตสมุดที่อยู่
พารามิเตอร์การกำหนดค่า ธุรกรรมทางการเงิน ภาพวาดทางเทคนิค และอื่นๆ XML คือชุดของกฎ (คุณอาจมองว่าเป็นคำแนะนำหรือแบบแผนก็ได้) สำหรับการพัฒนารูปแบบข้อความที่ช่วยให้คุณสามารถจัดโครงสร้างข้อมูลของคุณได้
สิ่ง
นี่คือวิธีที่คุณสามารถเขียนข้อมูลที่มีโครงสร้างเกี่ยวกับร้านขายของชำในรูปแบบ XML ซึ่งผลิตภัณฑ์จะถูกแบ่งออกเป็นหมวดหมู่ และหมวดหมู่ต่างๆ สามารถอยู่รองซึ่งกันและกันได้ แน่นอนว่าข้อมูลนี้สามารถเขียนได้ในรูปแบบอื่น เช่น ข้อความที่มีแท็บเป็นตัวคั่นและระบุรหัสของหมวดหมู่หลัก (อย่างไรก็ตาม เมื่อเขียนข้อมูลในรูปแบบ XML ดังที่แสดงข้างต้น คุณไม่จำเป็นต้องระบุ มัน). XML เป็นรูปแบบสำเร็จรูปสำหรับการบันทึกโครงสร้างดังกล่าว ซึ่งภายในคุณจะต้องสร้างชื่อของโหนด (แท็ก) และกฎที่โครงสร้างควรพอดีเท่านั้น (ตัวอย่างเช่น ผลิตภัณฑ์ไม่สามารถอยู่ภายนอก หรือว่าจะไม่มีหมวดหมู่ระดับสามอีกต่อไป) ต่อไป: XML ไม่ใช่ภาษาการเขียนโปรแกรม และคุณไม่จำเป็นต้องเป็นโปรแกรมเมอร์เพื่อใช้หรือเรียนรู้ภาษาดังกล่าว XML ทำให้คอมพิวเตอร์สามารถสร้างและได้ง่ายขึ้น
การอ่านข้อมูล ในขณะเดียวกันก็ทำให้โครงสร้างไม่คลุมเครือ XML หลีกเลี่ยงข้อผิดพลาดในการออกแบบภาษาทั่วไป: สามารถขยายได้ แพลตฟอร์มที่ไม่ขึ้นกับใคร และรวมถึงการรองรับการทำให้เป็นสากลและการแปลเป็นภาษาท้องถิ่น XML เป็นไปตามมาตรฐาน Unicode โดยสมบูรณ์นักพัฒนา PHP แนะนำให้ประมวลผลองค์ประกอบแต่ละส่วนของเอกสาร XML
ฟังก์ชั่น PHP<$htmltag>"; ) ) // ฟังก์ชันสำหรับส่วนท้ายของฟังก์ชันแท็ก endElement($parser, $name) ( global $map_array; if ($htmltag = $map_array[$name]) ( print "$HTMLTAG>"; ) ) // ฟังก์ชันสำหรับข้อความ (โหนดข้อความ) function characterData($parser, $data) ( print $data; ) $xml_parser = xml_parser_create(); // ใช้ case-folding เพื่อให้เราแน่ใจว่าจะพบแท็กใน $map_array xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_Character_data_handler($xml_parser, "CharacterData"); ($ไฟล์, "r"))) ( ไม่สามารถเปิดอินพุต XML"); ) while ($data = fread($fp, 4096)) ( if (!xml_parse($xml_parser, $data, feof( $fp))) ( die(sprintf("XML error: %s ที่บรรทัด %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); ) ) xml_parser_free($xml_parser);
ตัวอย่างนี้สามารถขยายได้โดยการเพิ่มอาร์เรย์ของชื่อแท็กที่จะได้รับการประมวลผลที่แตกต่างกันและเงื่อนไขที่สอดคล้องกันในฟังก์ชัน startElement และ endElement
รหัสดูแย่มากอย่างแน่นอน เพื่อใช้ใน การแปลง XMLในทางปฏิบัติไม่สามารถใช้งานได้ในหน้า HTML แม้ว่าจะใช้ในบางที่ เช่น บนเว็บไซต์ How IT works แน่นอนคุณสามารถเขียนระบบอัตโนมัติของคุณเองที่จะอ่านได้ไฟล์การกำหนดค่า
และสร้างอาร์เรย์ แต่ในแง่ของต้นทุนแรงงานทั้งหมด การใช้คลาสเทมเพลตที่มีประสิทธิภาพเช่น Smarty จะทำกำไรได้มากกว่า
งานในโครงการนี้เริ่มต้นในปี 1999 เมื่อกลุ่มนักพัฒนาเริ่มเขียนข้อกำหนดของเครื่องมือเทมเพลต เมื่อพิจารณาแล้วว่าควรทำอย่างไร นักพัฒนาจึงพยายามเขียนโมดูลในภาษา C แต่สุดท้ายพวกเขาก็ตัดสินใจว่า จะดีกว่าถ้าสร้างคลาสใน PHP ที่นักพัฒนาเว็บไซต์ทุกคนสามารถเข้าถึงได้และเข้าใจได้ ตอนนี้ Smarty เป็นหนึ่งในโครงการ PHP ซึ่งมีเว็บไซต์อยู่ที่เซิร์ฟเวอร์ PHP
ที่ smarty.php.net
อย่างเป็นทางการ Smarty เป็นคลาสเทมเพลต ในความเป็นจริง ฟังก์ชันการทำงานของมันคือลำดับความสำคัญที่สูงกว่าชุด *Template
Smarty ยังสามารถประมวลผลโครงสร้าง if-else แบบลอจิคัลที่สร้างไว้ในเทมเพลต โดยแปลงเป็นโค้ด PHP
โครงสร้างที่เรียกว่าตัวดัดแปลงตัวแปรได้รับการประมวลผลในทำนองเดียวกัน ช่วยให้คุณสามารถลบฟังก์ชันบางอย่างออกจากสคริปต์หลัก โดยย้ายไปยังเทมเพลตและสคริปต์ PHP ที่แคชไว้
(*เขียนชื่อเรื่องด้วยตัวพิมพ์ใหญ่*)
($หัวเรื่อง|บน),(* ย่อหัวข้อให้เหลือ 40 ตัวอักษรโดยใส่... ต่อท้าย *) หัวข้อ: ($topic|truncate:40:"...")
ข้อความนี้ถูกแปลงเป็นรหัสนี้:_run_mod_handler("บน", จริง, $this->_tpl_vars["ชื่อ"]); ?> หัวข้อ:
_run_mod_handler("ตัด", จริง, $this->_tpl_vars["ชื่อ"], 40, "..."); -
ชุดของตัวแปรบิวท์อิน เช่น $smarty.now (เวลาปัจจุบัน) ก็พร้อมใช้งานเช่นกัน รูปภาพอันงดงามได้รับการเสริมด้วยเอาต์พุตของหน้าต่างการแก้ไขข้อบกพร่องที่มีค่าตัวแปร การเรียกเทมเพลตที่ซ้อนกัน และการสนับสนุนตัวกรองอินพุต/เอาท์พุตและปลั๊กอินแบบกำหนดเอง
ทุกอย่างคงจะดีถ้า Smarty มีขนาดเล็กลง ตอนนี้ (เวอร์ชัน 2.3.1) “มีน้ำหนัก” 144 กิโลไบต์และทำงานช้าอย่างเห็นได้ชัดบน AMD K6 266 MHz นักพัฒนา Smarty แนะนำให้ใช้ Zend Accelerator หรือ PHP Accelerator DOM - เปิด
ในขณะนี้
คำสุดท้ายในเทมเพลตเอกสารใน php ฉันอธิบายโมดูลไว้ในบทความ “XML: ข้อมูลจำเพาะและฟังก์ชัน DOM ใน PHP”
แม้จะมีคำฟุ่มเฟือยและโค้ดจำนวนมากที่ทำงานค่อนข้างง่าย แต่ DOM XML ก็มีแนวโน้มที่ดี<) или в номера символов UTF-8 (&x0442;). В модуле DOM XML достаточно сконвертировать текст в UTF-8 и вызвать метод create_text_node.
ข้อเสียเปรียบหลักของแนวทางต้นฉบับในการแก้ไขเอกสาร XML (แน่นอนว่าต้องแก้ไขในสคริปต์) คือคุณต้องอ่านข้อกำหนด XML อย่างละเอียดหรือไม่แน่ใจว่าเกิดอะไรขึ้นในตอนท้าย
ตัวอย่างเช่น การแทรกข้อความลงในโหนดเป็นงานง่ายๆ
อย่างไรก็ตาม ในเอกสาร XML จะต้องแปลงอักขระบริการและอักขระตารางที่ไม่ใช่ ISO เป็นเอนทิตี XML (
การดำเนินการกับเอกสารผ่าน DOM จำเป็นต้องจัดกลุ่มเป็นฟังก์ชันของตนเอง กล่าวคือ ต้องสร้างคลาสเทมเพลต DOM
คุณสามารถใส่ข้อมูลทั่วไปในไซต์หรือส่วนต่างๆ ของไซต์ลงในเทมเพลตที่แยกจากกัน ส่วนที่เหลือให้แทรกลงในเอกสารโดยใช้เทคนิคที่ผมอธิบายไว้:
$root1 = $dom1->document_element(); $child = $root1->child_nodes(); $root2 = $dom2->document_element(); สำหรับ ($i = 0; $i< sizeof($child); $i++) $root2->append_child($child[$i]->clone_node()); -
คุณสามารถสร้างสคริปต์ง่ายๆ สำหรับไซต์ที่จะเปลี่ยนเส้นทางคำขอเอกสาร ข้อมูลต่อไปนี้เขียนด้วย .htaccess:
ตัวเลือก FollowSymLinks RewriteEngine On # ตรวจสอบการมีอยู่ของไฟล์ที่มีชื่อเดียวกัน # และนามสกุล phpxml สำหรับรูทของส่วน RewriteCond %(DOCUMENT_ROOT)/$1/index.phpxml -f # หากมีไฟล์ดังกล่าวอยู่ กฎจะถูกทริกเกอร์ RewriteRule ^(+)/?$ /$1 /index.php # กฎนี้จะใช้ได้กับที่อยู่ที่เขียนใหม่ # ตามกฎก่อนหน้า และสำหรับไฟล์ # อื่น ๆ ทั้งหมด โดยส่งคำขอไปยังสคริปต์ composer.php RewriteCond %(DOCUMENT_ROOT)/$1.phpxml -f กฎการเขียนใหม่ ^(+)\.php$ /composer.php [L]
สคริปต์ composer.php จะเปิดไฟล์ที่มีชื่อเดียวกับที่ร้องขอ แต่มีนามสกุล phpxml เซิร์ฟเวอร์ Apache ได้ตรวจสอบการมีอยู่ของไฟล์นี้แล้วเมื่อประมวลผลกฎ
6.1 การตรวจสอบเอกสาร
นี่เป็นเครื่องมือที่ควรแทนที่หรือแทนที่เครื่องมือตรวจสอบข้อมูลแบบโฮมเมดอย่างมีนัยสำคัญ
ตอนนี้มันกลายเป็นแฟชั่นที่จะละทิ้งฐานข้อมูลและจัดเก็บข้อมูลเป็นไฟล์
ด้วยฐาน มันง่ายมาก: คุณจะได้อาร์เรย์และสร้างสตริงข้อความจากอาร์เรย์นั้น (โดยใช้ลูปหรือคลาสเทมเพลต เช่น php-template) หรือรับสตริงโดยใช้แผนผังวัตถุ sql2xml (หรือสตริงอีกครั้ง) การทำงานกับไฟล์ทำได้ยากกว่าเนื่องจากแนะนำให้ตรวจสอบความสมบูรณ์ของข้อมูลในกรณีนี้
มีสองวิธีในการสร้างมาร์กอัป ประการแรกคือมาร์กอัปที่เน้นข้อมูล ประการที่สองคือมาร์กอัปที่เน้นเอกสารเป็นหลัก
ดูช ตูเรนวาเก้น มาสเตอร์ส
ตัวเลือกนี้เขียนด้วยภาษามนุษย์ฟรี แต่ข้อมูลในองค์ประกอบ acro และ title ยังคงเหมือนเดิม สามารถรับได้จากเอกสารโดยใช้แบบสอบถาม XPath หรือ XQuery เดียวกัน: /แชมเปี้ยนชิพ/แชมเปี้ยนชิพ/titleตัวเลือกมาร์กอัปแรกสามารถแสดงเป็นตารางฐานข้อมูลได้
คริสเตียน อัลเบอร์ส
สิ่งนี้จะไม่หยุดเอกสารจากการเป็นศูนย์กลางข้อมูล เอกสารใหม่สามารถแสดงเป็น 2 ตาราง โดยเชื่อมต่อกันเมื่อสอบถามโดยใช้ตัวดำเนินการ LEFT JOIN
เอกสารที่สองมีโครงสร้างที่ซับซ้อนกว่า และในกรณีทั่วไปจะไม่สามารถยัดลงในตารางได้
อย่างไรก็ตาม นี่คือข้อแตกต่างหลักระหว่างฐานข้อมูล XML และฐานข้อมูลที่ไม่ใช่ XML ฐานข้อมูล XML ยังทำงานร่วมกับมาร์กอัปเชิงเอกสารด้วย (ไม่ใช่แค่ผลลัพธ์ที่ออกมาในรูปแบบ XML) มาร์กอัปที่เน้นข้อมูลเป็นศูนย์กลางสามารถจัดเก็บไว้ในฐานข้อมูลเชิงสัมพันธ์ และสามารถจัดรูปแบบเอาต์พุตได้โดยใช้ยูทิลิตี เช่น sql2xml
ดังนั้น เมื่อกลับมาที่การตรวจสอบความถูกต้องของเอกสาร ควรสังเกตว่ามาร์กอัปเชิงเอกสารเป็นเรื่องยากมากที่จะตรวจสอบความสอดคล้องกับสคีมา DTD หรือ XML ด้วยตัวแยกวิเคราะห์สตริงแบบธรรมดา
อีกตัวอย่างหนึ่งคือมาร์กอัปแบบฟอร์มในคลาส TXF ของฉัน:
ฉันกำลังทดสอบสิ่งนี้ผ่านสคีมา DTD การตรวจสอบการปฏิบัติตามสคีมาเอกสารเป็นคุณสมบัติมาตรฐานของไลบรารี XML DOM
สำหรับรูปแบบการแลกเปลี่ยนข้อมูลที่ใช้กันทั่วไป เช่น RSS จะมีข้อกำหนดเฉพาะและสคีมา DTD (สคีมา XML) เพื่อหลีกเลี่ยงความยุ่งยากในการเขียน RSS parser ของคุณเอง คุณสามารถเพิ่มสคีมาลงในเอกสารและตรวจสอบความถูกต้องได้
จากนั้นดึงข้อมูลโหนดที่จำเป็นจากเอกสารโดยใช้นิพจน์ get_content หรือ XPath
6.2 การพูดนอกเรื่องโคลงสั้น ๆ
ฉันถูกบังคับให้เขียนส่วนนี้ของซีรีส์นี้ให้เสร็จโดยด่วนโดยบทความ Spectator ล่าสุดที่มีชื่อว่า “เทมเพลต PHP สำหรับ Dummies”
ไอ้มีดโกน! ลงนรกด้วยกฎโง่ๆ นี้ “อย่าสร้างสิ่งที่เกินความจำเป็น” นี่เป็นความจริงที่เจาะลึกเกินกว่าจะเตือนผู้คนได้ และโดยทั่วไปแล้วมันไม่เหมาะสำหรับการประเมินผู้อื่น ปริมาณ “ความจำเป็นพิเศษ” นั้นแตกต่างกันไปในแต่ละคน ลูกค้าไซต์อาจพูดว่า: “เหตุใดฉันจึงต้องมีสคริปต์ของคุณ สร้างเป็น HTML ธรรมดาเพื่อให้เราสามารถแก้ไขได้ในภายหลังด้วย FrontPage!
ฉันเชื่อมานานแล้วว่าเหตุผลหลักในการใช้เทคโนโลยีใหม่ในการเขียนโปรแกรมคือการประหยัดจากขนาด ตามที่พวกเขาเขียนถึงฉันในความคิดเห็นในบทความเก่าๆ “เมื่อปริมาณไซต์เพิ่มมากขึ้น คุณจะจมอยู่กับเทมเพลตของคุณ”
และในบทความของฉัน ฉันเน้นย้ำสิ่งนี้ - พวกเขาบอกว่า โปรดลองใช้การรวมและโค้ดที่ยุ่งยากของคุณผสมกับ HTML เพราะมันจะเข้ามาขวางทางเมื่อคุณต้องทำโค้ดโปรแกรมจำนวนมาก
ในความเป็นจริงมีเหตุผลอื่น เหล่านี้เป็นทักษะของแต่ละคน ผู้ที่รู้จัก XML, XSLT และ XPath เป็นอย่างดี หรือสามารถค้นหาวิธีแก้ปัญหาในสภาพแวดล้อมนี้ได้อย่างรวดเร็ว ส่วนใหญ่จะดำเนินโครงการให้เสร็จสิ้นโดยใช้เทคโนโลยี XML มันจะง่ายและสะดวกสำหรับเขาที่จะทำเช่นนี้ เพราะเขารู้ว่าจะต้องทำอย่างไรดี คนที่ไม่รู้หรือไม่รู้ดีก็จะทำแบบ "ทั่วไป"
คำถามเดียวที่ยังคงอยู่คือโซลูชันของเขาที่ใช้เทคโนโลยี XML จะมีประสิทธิภาพมากกว่าโซลูชันของเขาโดยใช้คลาสเทมเพลตหรือ PHP&HTML แบบผสมหรือไม่ ใช่ พวกเขาจะ ผมขอให้การเปรียบเทียบเชิงเปรียบเทียบแก่คุณ
คุณเคยเห็นผู้เล่นที่มีประสบการณ์และ "lamers" เล่นวอลเลย์บอลอย่างไร? | |
|
ทีม "ลูกบอล" โยนลูกบอลไปอีกด้านหนึ่งโดยใช้ตะขอหรือข้อพับเพื่อให้คู่ต่อสู้ปล่อยลูกบอลใส่ตัวเอง พวกเขาไม่รู้ว่าจะโจมตีอย่างไร และเมื่อได้รับคำแนะนำจากมีดโกนสุภาษิต พวกเขาเล่นอย่างเรียบง่าย ผู้เล่นที่มีประสบการณ์รู้วิธีโยนลูกบอลได้ดีกว่าลูกบอลมาก อย่างไรก็ตาม เขาจะได้รับผลลัพธ์ที่ดีกว่าหากเขาทำการโจมตีที่ดี หากคุณมีคำถามอื่นๆ หรือบางสิ่งที่ไม่ชัดเจน - ยินดีต้อนรับสู่ของเรา
1 ปีที่แล้ว |
9.8K
ในการเขียนโปรแกรม งานที่พบบ่อยมากคือเมื่อคุณต้องการเข้าถึงไซต์อื่นผ่าน HTTP หรือ HTTPS ในบทความนี้ เราจะดูวิธีง่ายๆ ในการทำงานนี้ให้สำเร็จโดยใช้ภาษาการเขียนโปรแกรม PHP
ภาพยนตร์ใหม่ออกฉายบนหน้าจอเกือบทุกวัน และเป็นการดีกว่าถ้าทำให้กระบวนการนี้เป็นแบบอัตโนมัติเพื่อให้หุ่นยนต์ทำได้ฟรี
สำหรับสินค้า สถานการณ์ก็เหมือนกัน - ร้านค้าออนไลน์ของคุณอาจมีพันธมิตรที่ต้องการลงสินค้าบนเว็บไซต์ของคุณและจากการขายผลิตภัณฑ์แต่ละครั้ง พันธมิตรจะให้รายได้ส่วนหนึ่งแก่คุณ หากคู่ค้ามีผลิตภัณฑ์หลายพันรายการและฐานข้อมูลได้รับการอัปเดตอยู่ตลอดเวลา กระบวนการเพิ่มผลิตภัณฑ์ลงในไซต์จะต้องดำเนินการอัตโนมัติโดยใช้ภาษาการเขียนโปรแกรม PHP
ตัวอย่างการเข้าถึงเว็บไซต์อื่นโดยใช้ PHP
ในตัวอย่างง่ายๆ นี้ เราจะใช้ฟังก์ชัน PHP มาตรฐานที่เรียกว่า file_get_contents()
ในการตอบกลับจากเซิร์ฟเวอร์ VK คุณจะเห็นข้อมูลต่อไปนี้:
( - ตอบกลับ: [ - ( - id: 210700286, - first_name: "Lindsey", - Last_name: "Stirling", - bdate: "21.9.1986" - ) - ] )
โดยที่เราได้รับชื่อ นามสกุล และวันเกิดของผู้ใช้ที่มี ID 210700286
ตอนนี้เราจะใช้ PHP เพื่อรับข้อมูลนี้และแปลงเป็นอาร์เรย์เพื่อความสะดวกในการทำงานต่อไปได้อย่างไร
การใช้ภาษาการเขียนโปรแกรม PHP และฟังก์ชัน file_get_contents() ทำให้ทำได้ง่ายมาก!
$user_id- นี่คือตัวแปรที่คุณเขียน ID ผู้ใช้ VK
$ข้อมูล- ในตัวแปรนี้เราเก็บผลลัพธ์ของการเข้าถึง API ของเว็บไซต์ VK.COM
การมีอาร์เรย์ข้อมูลนี้ทำให้คุณสามารถแสดงความสนใจแก่ผู้ใช้บนเว็บไซต์ของคุณเพื่อวัตถุประสงค์ใดก็ได้ และด้วยความช่วยเหลือของ คุณสามารถออกแบบการแสดงข้อมูลนี้บนเว็บไซต์ของคุณได้อย่างสวยงาม
บทสรุป
อย่างที่คุณเห็น ด้วย PHP คุณสามารถส่งคำขอไปยังไซต์ HTTP และ HTTPS ได้อย่างง่ายดาย และเราได้ดูฟังก์ชันเดียวของภาษาการเขียนโปรแกรม PHP ที่คุณสามารถดึงข้อมูลจากไซต์ภายนอกได้
ในบทความต่อไปนี้ เราจะดูคุณลักษณะอื่นที่น่าสนใจแต่มีประสิทธิภาพมากกว่า ซึ่งคุณสามารถตั้งค่าพารามิเตอร์เพิ่มเติม เช่น เบราว์เซอร์ ระบบปฏิบัติการ และอื่นๆ เพื่อประสบการณ์การใช้งานเว็บไซต์ภายนอกที่สวยงามยิ่งขึ้น
$HTTP_SERVER_VARS [ลบแล้ว]
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
$_เซิร์ฟเวอร์ -- $HTTP_SERVER_VARS [ลบแล้ว] — ข้อมูลเกี่ยวกับเซิร์ฟเวอร์และสภาพแวดล้อมการดำเนินการ
คำอธิบาย
ตัวแปร $_SERVER คืออาร์เรย์ที่มีข้อมูล เช่น ส่วนหัวของสคริปต์ เส้นทาง และตำแหน่ง รายการในอาร์เรย์นี้ถูกสร้างขึ้นโดยเว็บเซิร์ฟเวอร์ ไม่มีการรับประกันว่าทุกเว็บเซิร์ฟเวอร์จะจัดเตรียมสิ่งเหล่านี้ไว้ เซิร์ฟเวอร์อาจละเว้นบางส่วนหรือจัดหาบางส่วนที่ไม่ได้ระบุไว้ที่นี่ อย่างไรก็ตาม ตัวแปรเหล่านี้จำนวนมากมีอยู่ในข้อกำหนด » CGI/1.1 ดังนั้นคุณจึงสามารถคาดหวังได้ว่าตัวแปรเหล่านี้จะถูกนำไปใช้ในเว็บเซิร์ฟเวอร์เฉพาะของคุณ
ตัวแปร $HTTP_SERVER_VARS มีข้อมูลเริ่มต้นเหมือนกัน แต่ไม่ใช่แบบ superglobal
(โปรดทราบว่า $HTTP_SERVER_VARS และ $_SERVER เป็นตัวแปรที่แตกต่างกัน ดังนั้น PHP จึงปฏิบัติต่อตัวแปรเหล่านั้นตามนั้น)
โปรดทราบว่า "อาร์เรย์แบบยาว" ถูกลบออกใน PHP 5.4.0 ดังนั้นจึงไม่มี $HTTP_SERVER_VARS อีกต่อไป
ดัชนี คุณอาจหรืออาจไม่พบองค์ประกอบใดๆ ต่อไปนี้ในอาร์เรย์ $_SERVER โปรดทราบว่ามีเพียงไม่กี่รายการ (ถ้ามี) (หรือสร้างความแตกต่างจริงๆ) หาก PHP ทำงานบนบรรทัดคำสั่ง "PHP_SELF"ชื่อของไฟล์สคริปต์ที่กำลังรันอยู่ในปัจจุบัน ซึ่งสัมพันธ์กับรูทเอกสาร ตัวอย่างเช่น $_SERVER["PHP_SELF"] ในสคริปต์ที่ http://example.com/foo/bar.php จะเป็น /foo/bar.php ค่าคงที่ __FILE__ ประกอบด้วยเส้นทางแบบเต็มและชื่อไฟล์ของไฟล์ปัจจุบัน (นั่นคือ เชื่อมต่อ)หาก PHP ทำงานบนบรรทัดคำสั่ง ตัวแปรนี้จะมีชื่อของสคริปต์ โดยเริ่มต้นด้วย PHP 4.3.0 ก่อนหน้านี้มันไม่สามารถใช้ได้ "อาร์จีวี"อาร์เรย์ของอาร์กิวเมนต์ที่ส่งผ่านไปยังสคริปต์ เมื่อสคริปต์ทำงานบนบรรทัดคำสั่ง สคริปต์จะให้สิทธิ์การเข้าถึงตัวเลือกบรรทัดคำสั่งแบบ C เมื่อเรียกผ่านเมธอด GET อาร์เรย์นี้จะมีสตริงการสืบค้น "อาร์จีซี" ประกอบด้วยจำนวนพารามิเตอร์ที่ส่งไปยังสคริปต์ (หากเรียกใช้บนบรรทัดคำสั่ง)". "เกตเวย์_อินเทอร์เฟซ" มีเวอร์ชันของข้อกำหนด CGI ที่ใช้โดยเซิร์ฟเวอร์ตัวอย่างเช่น" ซีจีไอ/1.1"SERVER_ADDR" ที่อยู่ IP ของเซิร์ฟเวอร์ที่สคริปต์ปัจจุบันกำลังทำงานอยู่"SERVER_NAME" ชื่อของโฮสต์ที่สคริปต์ปัจจุบันรันอยู่ หากสคริปต์กำลังทำงานบนโฮสต์เสมือน สิ่งนี้จะมีชื่อที่กำหนดไว้สำหรับโฮสต์เสมือนนั้น"; "เซิร์ฟเวอร์_ซอฟต์แวร์" สตริงการระบุเซิร์ฟเวอร์ที่ระบุในส่วนหัวเมื่อมีการตอบสนองต่อคำขอเกิดขึ้น "SERVER_โปรโตคอล"", "ชื่อและเวอร์ชันของโปรโตคอลข้อมูลที่ร้องขอเพจ ตัวอย่างเช่น "", "HTTP/1.0", ""คำขอ_วิธีการ"".
"คำขอ_TIME" การประทับเวลาของการเริ่มต้นคำขอ ใช้งานได้ตั้งแต่ PHP 5.1.0"REQUEST_TIME_FLOAT" การประทับเวลาของการเริ่มต้นคำขอ มีความแม่นยำในระดับไมโครวินาทีใช้งานได้ตั้งแต่ PHP 5.4.0 "QUERY_STRING"สตริงการสืบค้น (ถ้ามี) ที่ดึงข้อมูลเพจ "DOCUMENT_ROOT"ไดเร็กทอรีรากของเอกสารที่เรียกใช้สคริปต์ปัจจุบันตรงกับไดเร็กทอรีที่ระบุในไฟล์คอนฟิกูเรชันเซิร์ฟเวอร์ "HTTP_ยอมรับ" เนื้อหาส่วนหัวยอมรับ:จากคำขอปัจจุบันถ้ามี "HTTP_ยอมรับ" " HTTP_ACCEPT_CHARSET "ยอมรับ-ชุดอักขระ: จากคำขอปัจจุบันถ้ามี ตัวอย่างเช่น: "". iso-8859-1,*,utf-8 "HTTP_ยอมรับ" " HTTP_ACCEPT_ENCODING " ยอมรับการเข้ารหัส:". gzip "HTTP_ยอมรับ" " HTTP_ACCEPT_LANGUAGE "ยอมรับภาษา: จากคำขอปัจจุบันถ้ามี ตัวอย่างเช่น: "". ห้องน้ำในตัว "HTTP_ยอมรับ" "HTTP_CONNECTION"ยอมรับภาษา: การเชื่อมต่อ:". Keep-Alive "HTTP_ยอมรับ" "HTTP_HOST"เจ้าภาพ:จากคำขอปัจจุบันถ้ามี "HTTP_ผู้อ้างอิง"ที่อยู่ของเพจ (ถ้ามี) ที่นำเบราว์เซอร์ของผู้ใช้มาที่เพจนี้ "HTTP_ยอมรับ" ส่วนหัวนี้ถูกกำหนดโดยเว็บเบราว์เซอร์ของผู้ใช้ไม่ใช่ทุกเบราว์เซอร์ที่ติดตั้งและบางเบราว์เซอร์อนุญาตให้คุณเปลี่ยนเนื้อหาของส่วนหัว HTTP_REFERER เป็นคุณสมบัติเพิ่มเติม พูดได้คำเดียวว่าเขาไว้ใจไม่ได้จริงๆ " HTTP_USER_AGENT "ตัวแทนผู้ใช้: จากคำขอปัจจุบันถ้ามี บรรทัดนี้มีเบราว์เซอร์ที่ผู้ใช้ใช้ในการร้องขอหน้านี้ ตัวอย่างทั่วไปคือบรรทัด: Mozilla/4.5 (X11; U; Linux 2.2.9 i586)- เหนือสิ่งอื่นใด คุณสามารถใช้ค่านี้กับฟังก์ชันได้ get_เบราว์เซอร์()ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ":
สคริปต์ PHP ออกหลังจากส่งส่วนหัว (นั่นคือหลังจากดำเนินการเอาต์พุตใด ๆ โดยไม่บัฟเฟอร์เอาต์พุต) หากคำขอถูกสร้างขึ้นโดยใช้วิธีการ ชื่อและเวอร์ชันของโปรโตคอลข้อมูลที่ร้องขอเพจ ตัวอย่างเช่น ".
โปรดทราบว่าเมื่อใช้ ISAPI กับ IIS ค่าจะเป็น ปิดหากคำขอไม่ได้ทำผ่าน HTTPS "REMOTE_ADDR"ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": เพื่อปรับผลลัพธ์ของเพจของคุณให้เข้ากับความสามารถของเบราว์เซอร์ของผู้ใช้ "เอชทีพีเอส"ยอมรับค่าที่ไม่ว่างเปล่าหากคำขอถูกสร้างขึ้นผ่านโปรโตคอล HTTPS
ตัวอย่างเช่น ใน Apache คุณต้องมีคำสั่ง พอร์ตบนเครื่องระยะไกลที่ใช้สื่อสารกับเว็บเซิร์ฟเวอร์"REMOTE_USER" ผู้ใช้ที่ได้รับการรับรองความถูกต้อง"REDIRECT_REMOTE_USER" ผู้ใช้ที่ได้รับการรับรองความถูกต้องหากคำขอถูกเปลี่ยนเส้นทางภายใน"SCRIPT_FILENAME"ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": ที่อยู่ IP ที่ผู้ใช้ดูหน้าปัจจุบัน "REMOTE_HOST"โฮสต์ระยะไกลที่ผู้ใช้กำลังดูเพจปัจจุบัน การค้นหา DNS แบบย้อนกลับจะขึ้นอยู่กับค่าของตัวแปร REMOTE_ADDR เว็บเซิร์ฟเวอร์ของคุณต้องได้รับการกำหนดค่าเพื่อสร้างตัวแปรนี้.
เส้นทางที่แน่นอนไปยังสคริปต์ที่กำลังดำเนินการอยู่
"SERVER_ADMIN" ตัวแปรนี้รับค่า (สำหรับ Apache) จากคำสั่งในไฟล์คอนฟิกูเรชันเซิร์ฟเวอร์ หากสคริปต์กำลังทำงานบนโฮสต์เสมือน นี่จะเป็นค่าที่กำหนดไว้สำหรับโฮสต์เสมือนนั้น"SERVER_PORT" พอร์ตบนคอมพิวเตอร์เซิร์ฟเวอร์ที่เว็บเซิร์ฟเวอร์ใช้ในการเชื่อมต่อ 80 สำหรับการตั้งค่าเริ่มต้น ค่าจะเป็น "ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ":
หากสคริปต์ทำงานบนบรรทัดคำสั่ง (CLI) โดยใช้พาธสัมพัทธ์ เช่น file.php หรือ ../file.php ตัวแปร $_SERVER["SCRIPT_FILENAME"] จะมีพาธสัมพัทธ์ที่ระบุโดยผู้ใช้
มิฉะนั้นค่านี้อาจถูกแทนที่และไม่ส่งคืนมูลค่าที่แท้จริงของฟิสิคัลพอร์ต การใช้ค่านี้อาจไม่ปลอดภัยในบริบทของแอปพลิเคชันที่ต้องการความปลอดภัยขั้นสูง"SERVER_SIGNATURE" สตริงที่มีเวอร์ชันเซิร์ฟเวอร์และชื่อโฮสต์เสมือนที่เพิ่มลงในเพจที่สร้างโดยเซิร์ฟเวอร์หากเปิดใช้งานใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": "; ตัวอย่างเช่น เมื่อใช้ SLL ค่านี้จะเป็นค่าที่กำหนดค่าสำหรับการเชื่อมต่อ HTTP ที่ปลอดภัย หากต้องการรับพอร์ตจริง (จริง) ใน Apache 2 คุณต้องติดตั้ง UseCanonicalName = เปิด และ UseCanonicalPhysicalPort = เปิด
ผู้ใช้ Apache 2 สามารถใช้คำสั่งได้ AcceptPathInfo = เปิดในไฟล์คอนฟิกูเรชัน httpd.conf เพื่อตั้งค่าตัวแปร PATH_INFO "SCRIPT_NAME" ประกอบด้วยเส้นทางไปยังสคริปต์ที่กำลังดำเนินการอยู่ สิ่งนี้มีประโยชน์สำหรับเพจที่ต้องชี้ไปที่ตัวเอง". "PHP_AUTH_DIGEST" เมื่อดำเนินการตรวจสอบสิทธิ์ HTTP Digest ตัวแปรนี้จะได้รับการกำหนดส่วนหัว "การอนุญาต" ซึ่งไคลเอ็นต์ส่งมา (จากนั้นจะต้องใช้เพื่อการตรวจสอบความถูกต้องที่เหมาะสม)"PHP_AUTH_USER" เมื่อดำเนินการตรวจสอบสิทธิ์ HTTP ตัวแปรนี้จะถูกตั้งค่าเป็นชื่อผู้ใช้ที่ผู้ใช้ให้ไว้"PHP_AUTH_PW" เมื่อดำเนินการตรวจสอบสิทธิ์ HTTP ตัวแปรนี้จะถูกตั้งค่าเป็นรหัสผ่านที่ผู้ใช้ให้ไว้"AUTH_TYPE" เมื่อดำเนินการตรวจสอบสิทธิ์ HTTP ตัวแปรนี้จะถูกตั้งค่าเป็นประเภทของการตรวจสอบสิทธิ์ที่ใช้"PATH_INFO" ประกอบด้วยพาธที่ผู้ใช้ระบุซึ่งอยู่หลังชื่อสคริปต์ แต่อยู่ก่อนสตริงการสืบค้น หากมี ตัวอย่างเช่น หากมีการร้องขอสคริปต์ปัจจุบันจาก URL http://www.example.com/php/path_info.php/some/stuff?foo=bar ตัวแปร $_SERVER["PATH_INFO"] ก็จะมี?>ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": "PATH_แปลแล้ว" เส้นทางตามระบบไฟล์ (ไม่ใช่รูทเอกสาร) ไปยังสคริปต์ปัจจุบัน หลังจากที่เซิร์ฟเวอร์ทำการแมปเสมือนกับจริงแล้ว ตั้งแต่ PHP 4.3.2 เป็นต้นไป ตัวแปร PATH_TRANSLATED จะไม่ถูกตั้งค่าโดยนัยใน Apache 2 SAPI อีกต่อไป เมื่อเปรียบเทียบกับ Apache เวอร์ชัน 1 ที่ตั้งค่าเป็นค่าเดียวกันกับตัวแปร SCRIPT_FILENAME เมื่อ Apache ไม่ได้ใช้งานการเปลี่ยนแปลงนี้จัดทำขึ้นเพื่อให้สอดคล้องกับข้อกำหนด CGI โดยที่ตัวแปร PATH_TRANSLATED ควรมีอยู่เมื่อมีการกำหนด PATH_INFO เท่านั้น
/บางส่วน/สิ่งของ