ข้อมูลผู้ใช้ที่เพิกถอนไม่ได้ php.ini การไม่มีความคิด ไวยากรณ์นิพจน์ทั่วไปแบบ Perl

อาร์เรย์ซูเปอร์โกลบอล $_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) เรียบง่ายและไม่โอ้อวด แต่สิ่งสำคัญคือโค้ดนี้ใช้งานได้</p> <p>ภาวะแทรกซ้อนถัดไปคือความพยายามทำงานกับคุกกี้และปัญหาขึ้นอยู่กับส่วนที่ผู้ใช้เข้าชม เพื่อให้จินตนาการได้ดีขึ้น: ให้เราตัดสินใจว่ากลุ่มผู้เยี่ยมชมจะมายังหน้าแรกของเรา และสำหรับผู้มีโอกาสเป็นโฆษณา เราจะสร้างเครื่องมือแบนเนอร์ที่มีการกำหนดเป้าหมาย สมมติว่าผู้ใช้ที่เข้าชมส่วนดนตรีร็อคและเครื่องดนตรีจะเห็นแบนเนอร์โฆษณาร้านกีตาร์ไฟฟ้าในหน้าถัดไป</p> <p>ในกรณีนี้ เราจะต้องแทรกโค้ด PHP ที่จุดเริ่มต้นของไฟล์และย้ายการตรวจสอบว่ามีหมวดหมู่อยู่ที่นั่นหรือไม่ เพราะคุกกี้สามารถออกได้ก่อนที่จะออกไบต์แรกของเอกสารเท่านั้น</p> <p><i>แน่นอน คุณจะบอกว่าสิ่งนี้สามารถทำได้ง่ายโดยใช้กลไกของเซสชันผู้ใช้ ซึ่งง่ายกว่าในแง่ของการออกเนื้อหาและปลอดภัยกว่า เนื่องจากผู้ใช้สามารถเปลี่ยนเนื้อหาของคุกกี้ได้ด้วยตนเอง ใช่ นี่เป็นเรื่องจริง แต่ประการแรก สิ่งนี้แสดงถึงวิสัยทัศน์ของผู้เริ่มต้นเขียนโปรแกรมที่สร้างโฮมเพจของเขา และอย่างที่สอง เรากำลังพูดถึงอดีตอันไกลโพ้น - จริงๆ แล้วเราอยู่ในปี 1998</i></p> <p>มันไม่ได้ทำให้ชีวิตง่ายขึ้นมากนักโดยส่งออกบล็อกโค้ด HTML และ PHP ที่เหมือนกันไปเป็นไฟล์ที่รวมอยู่ งานที่อธิบายไว้ข้างต้น - การสร้างแคตตาล็อกลิงก์อย่างง่ายพร้อมหมวดหมู่ - อาจเป็นขีด จำกัด สูงสุดของความสามารถของแนวทางนี้ เมื่อปฏิบัติงานที่ซับซ้อนมากขึ้น มีความเสี่ยงสูงที่จะต้องเผชิญกับต้นทุนค่าแรงที่สูงขึ้น</p> <p>2. ทำให้โค้ดซับซ้อน</p> <p>การพัฒนาเชิงตรรกะของแนวทางก่อนหน้านี้คือการเปลี่ยนไปใช้ PHP โดยสมบูรณ์ในแง่ที่ว่าทุกหน้าเป็นโค้ด PHP - ที่จุดเริ่มต้นของไฟล์จะมีแท็กเปิด "<?php", и дальше php-код не прерывается. Весь вывод делается через echo (print). Такой код, вроде бы, выглядит логичнее. Пример: страница подписки на новые ссылки в каталоге. В форме предлагается выбрать, на какие рубрики подписывается пользователь.</p><p> <?php include "db-connect.inc"; include "login-check.inc"; if (!$logged_in) { header ("Location: /register.php"); exit(); } include "page-header.inc"; print("<h2>class="club_article_small_caption">ข่าวสารสำหรับลูกค้า</h2> <table cellpadding=\"4\" cellspacing=\"0\" border=\"0\">"); $result = mysql_query("SELECT id, title, cancel, news_date FROM news ORDER BY news_date DESC LIMIT 10"); if (mysql_error()) print(mysql_error()); else while ($row = mysql_fetch_assoc($) ผลลัพธ์)) พิมพ์ (" <tr><td>($row)"); if ($row["news_date"] > date("Ymd", time() - 3600*24*14)) print(" <font color=\"#cc0000\">ใหม่!</font>");พิมพ์("</td><td> <a href=\"read.php?id={$row}\"><b>"; 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 "</b></a> <br>"; 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 "</td></tr>");พิมพ์("</table>"); รวม "page-footer.inc"; ?></p><p> <?php ... else while ($row = mysql_fetch_assoc($result)) print_announce($row); ... ?> </p><p>แต่สิ่งนี้ไม่ได้ทำให้งานง่ายขึ้นเลยและชั่วโมงแห่งการพิจารณาจะมาถึงอย่างแน่นอน: จะต้องทำซ้ำการออกแบบไซต์ ผู้ออกแบบจะปฏิเสธที่จะแก้ไขสิ่งนี้ มีเพียงผู้ที่เขียนโค้ดดังกล่าวเท่านั้นจึงจะสามารถเข้าใจและแทนที่ HTML เก่าด้วยโค้ดใหม่ได้ หากบุคคลนี้ไม่ได้ทำงานในโปรเจ็กต์นี้อีกต่อไป โปรเจ็กต์นั้นจะต้องถูกเขียนใหม่เกือบตั้งแต่ต้น ไม่เช่นนั้นมันจะตายไป และกลายเป็นอนุสรณ์สถานแห่งความสายตาสั้นของมนุษย์</p> <p>อีกทางเลือกหนึ่งสำหรับการพัฒนาแนวทาง HTML และ PHP แบบผสม PHP มีคุณสมบัติที่เรียกว่าการหลบหนีขั้นสูง</p><p> <?php include "db-connect.inc"; include "login-check.inc"; if (!$logged_in) { header ("Location: /register.php"); exit(); } include "page-header.inc"; ?><h2 class="club_article_small_caption">ช่วยให้คุณสามารถแสดงโค้ด HTML ปกติภายในโครงสร้างภาษา:</h2> <table cellpadding="4" cellspacing="0" border="0"><?php $result = mysql_query("SELECT id, title, announce, news_date FROM news ORDER BY news_date DESC LIMIT 10"); if (mysql_error()) print(mysql_error()); else while ($row = mysql_fetch_assoc($result)) { ?><tr><td><?=$row["news_date"]?><?php if ($row["news_date"] >ข่าวสารสำหรับลูกค้า <font color="#cc0000">ใหม่!</font><?php } ?></td><td> "> <b><?=$row["title"]?></b> <br><?=$row["announce"]?></td></tr><?php } ?></table><p>วันที่("Ymd", เวลา() - 3600*24*14)) ( ?></p> <p>ผู้ออกแบบเลย์เอาต์หรือผู้ออกแบบที่เปิดไฟล์นี้ใน HomeSite จะเห็นมาร์กอัป HTML พร้อมการไฮไลต์ และจะสามารถแก้ไขการออกแบบของเพจได้ สำหรับไซต์ธรรมดา วิธีนี้ค่อนข้างเหมาะสม ในสถานการณ์ที่ซับซ้อน มันไม่ดีเลย</p> <p>3. รัฐประหาร</p><p>ด้วยการเปิดตัว PHP 3.0... อย่างไรก็ตาม การฟื้นฟูลำดับเหตุการณ์คงไม่เสียหายเนื่องจากเรากำลังพูดถึงประวัติศาสตร์ที่ครอบคลุม ดังนั้น ลำดับเหตุการณ์ที่เราจัดการเพื่อกู้คืนโดยใช้ไฟล์เก็บถาวรของรายชื่อผู้รับจดหมาย php ประกาศและหน้าจากไฟล์เก็บถาวรเว็บ:</p><p>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 ไม่ใช่เบต้า แต่ก็ยังไม่ใช่ ปล่อยตัวผู้สมัคร)</p> <p>ดังนั้นด้วยการเปิดตัว PHP 3.0 เครื่องมือจึงปรากฏขึ้นสำหรับการใช้วิธีการใหม่ในการเขียนโปรแกรม PHP - การบัฟเฟอร์หน้าในสคริปต์ (สิ่งสำคัญคือต้องทราบว่านี่ไม่ใช่การบัฟเฟอร์แบบเดียวกับที่เรามีตอนนี้) <a href="https://pzik.ru/th/ispolzovanie-php-v-stranicah-s-rasshireniem-html-php-delaem-mini-bd-na/">เมื่อเวลาผ่านไป งานสร้างเว็บไซต์มีความซับซ้อนมากขึ้น PHP ถูกใช้อย่างกว้างขวางมากขึ้นเรื่อยๆ และเว็บไซต์มีความไดนามิกมากขึ้นเรื่อยๆ</a>ยิ่งไซต์มีขนาดใหญ่เท่าใด ปัญหาก็ยิ่งมากขึ้นเท่านั้นในการทำทุกอย่างโดยใช้ไฟล์ที่รวมอยู่ใน PHP และ HTML แบบผสม ค่อนข้างเป็นขั้นตอนต่อไปที่สมเหตุสมผล</p> <p>ส่วนขยาย PHP <i>เริ่มประมวลผลหน้า HTML ในหน่วยความจำสคริปต์และส่งมอบให้กับผู้ใช้ทั้งหมดหรือบางส่วน</i>การนำแนวทางนี้ไปใช้ได้รับการช่วยเหลือเป็นอย่างน้อยโดยการสนับสนุน (เช่น การจำลอง) ของการเขียนโปรแกรมเชิงวัตถุที่ใช้ใน PHP3 ถูกสร้างขึ้น</p> <p>คลาสเทมเพลต <a href="https://pzik.ru/th/the-best-cleaning-program-for-android-how-to-clean-an-android-phone-from-unnecessary-files-and-garbage/">ซึ่งทำให้ง่ายต่อการใช้งานด้วยเทมเพลตเพจและข้อมูลที่ควรป้อนลงไป</a>สิ่งนี้ขยายขีดความสามารถของโปรแกรม แต่ในขณะเดียวกันก็ต้องการมากกว่านี้</p> <p>ทรัพยากรระบบ</p> <p>- ปัจจุบันเราสามารถพูดได้ว่าประโยชน์ของการใช้วิธีนี้มีมากกว่าต้นทุนทรัพยากรระบบ แต่เมื่อสองหรือสามปีที่แล้ว หลายคนเชื่อว่าการเก็บเอกสารทั้งหมดไว้ในหน่วยความจำเป็นความฟุ่มเฟือยที่ไม่แพงสำหรับการเขียนโปรแกรมเว็บ</p> <p>หกเดือนต่อมา ฉันตัดสินใจเปลี่ยนแปลงบางอย่างในแผนของฉัน</p> <p>จะไม่มีศีลธรรมเกี่ยวกับความชั่วของชนชั้นที่ตนเองสร้างขึ้นเอง</p> <p>พวกเขาเป็นคนดี ใช้มันและสิ่งที่คุณต้องการจะติดตัวคุณไปด้วย! เพียงจำไว้ว่าสถานการณ์บางอย่างจะรบกวนคุณ</p> <p>อันดับแรก. หากชั้นเรียนนี้เขียนขึ้นโดยเฉพาะ นั่นหมายความว่าชั้นเรียนนั้นค่อนข้างจะแยกออกจากชีวิต แม้ว่าชั้นเรียนจะมีประสบการณ์ในการพัฒนามากมายอยู่เบื้องหลัง แต่ก็ยังคงถูกสร้างขึ้นในสภาพโรงเรือนร้อน</p> <p>เทคโนโลยีที่ได้จะมีเงื่อนไขการใช้งานเฉพาะของตัวเองซึ่งจะต้องปรับเปลี่ยนการพัฒนาในอนาคตหรือจะต้องออกแบบคลาสใหม่</p> <p>ที่สอง. คลาสที่สังเคราะห์จากการพัฒนาในโปรเจ็กต์ต่างๆ ก็ต้องมีการเปลี่ยนแปลงเช่นกัน ยิ่งเป็นคลาสสากลมากเท่าไรก็ยิ่งมากขึ้นเท่านั้น</p> <p>ดังนั้น คุณสามารถสร้างคลาสของคุณเองได้ (เท่าที่ฉันรู้ คลาสเทมเพลตมีหลายคนใช้คลาสของตัวเอง) หากคุณคิดแบบนิรนัย โดยสร้างชั้นเรียนจากการประมาณการสิ่งที่คุณต้องการ มีโอกาสเล็กน้อยที่คุณจะได้สิ่งที่ยอดเยี่ยม และมีความเป็นไปได้สูงที่ผลลัพธ์จะไม่ตรงกับที่คุณต้องการ คุณสามารถใช้การปฐมนิเทศได้ - หลังจากทำงานมายาวนาน คุณรับประกันได้ว่าจะได้สิ่งที่ใช้ได้ผล แต่ไม่จำเป็นต้องยอดเยี่ยมเสมอไป</p> <p>Dmitry Koterov แสดงความคิดเห็นเกี่ยวกับประสบการณ์การเรียนรู้ phpBB: หลังจากเขียนคลาสเทมเพลตแล้ว หลายคนเต็มไปด้วยความกระตือรือร้นจึงเริ่มผลักดันทุกอย่างภายใต้คลาสนี้ แนวคิดของคลาสดังกล่าวคือการแยกโค้ดและการออกแบบ แต่ในทางกลับกันผู้เขียน phpBB กลับผสมพวกมันให้มากที่สุด</p> <p>แต่ในความคิดของฉัน แม้ว่าจะใช้แนวทางนี้ตามปกติ (คลาสเทมเพลต) โค้ดก็จะยุ่งยาก แต่ก็มีไฟล์จำนวนมากที่มีเทมเพลต ใน <a href="https://pzik.ru/th/how-to-make-invisible-visiting-time-hide-the-time-of-your-last-visit-to-vkontakte/">เมื่อเร็วๆ นี้</a>โดยหลักการแล้วฉันได้ข้อสรุปว่าในคลาสเทมเพลตนั้นเป็นไปไม่ได้ที่จะแยกโค้ด PHP ออกจากข้อมูลและการออกแบบ เมื่อเปลี่ยนการออกแบบไซต์บนเอ็นจิ้นดังกล่าวคุณจะต้องเจาะลึกสคริปต์ PHP อย่างแน่นอนและสิ่งนี้จะไม่ทำโดยนักออกแบบ แต่โดยคุณ</p><p> <table border> <tr> <td colspan=2> <b>__ทั่วโลก__</b> <p>(ซ่อนและเพิ่มโดยอัตโนมัติ)</td> </tr> <tr> <td><b>บล็อก1</b></td> <td> <table border> <tr> <td colspan=2><b>บล็อก2</b></td> </tr> <tr> <td><b>ภายใน1</b></td> <td><b>ภายใน2</b></td> </tr> </table> </td> </tr> </table> </p><p>เอกสารระบุว่าไม่จำเป็นต้องระบุในเทมเพลตว่าบล็อกใดเป็นบล็อกย่อย ชั้นจะเข้าใจเรื่องนี้เอง</p> <p>เอกสารประกอบสำหรับคลาสนี้บอกว่ารู้ว่า inner1 เป็นลูกของ block2 และไม่จำเป็นต้องบอกเกี่ยวกับเรื่องนี้ หากต้องการแทรกข้อมูลลงในบล็อก เพียงเรียกใช้โค้ดนี้หลาย ๆ ครั้งตามที่คุณต้องการ:</p><p> <?php $tpl->setVariable(...); $tpl->parseCurrentBlock(); -</p><p>หากต้องการเพิ่มเนื้อหาลงใน block1 คุณต้องทำสิ่งต่อไปนี้:</p><p> <?php $tpl->setCurrentBlock("inner1"); $tpl->setVariable(...); $tpl->parseCurrentBlock(); $tpl->setVariable(...); $tpl->parseCurrentBlock(); $tpl->parse("block1"); -</p><p>เป็นผลให้โค้ดสคริปต์มีลักษณะดังนี้:</p><p> <?php $tpl = new HTML_Template_IT(); // загрузка шаблона или указание его через класс $tpl->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(); -</p><p>รหัสสะดวกและชัดเจนกว่า FastTemplate</p> <p>แต่โปรแกรมเมอร์จำนวนมากยังคงเขียนคลาสเทมเพลตของตนเอง เรียบง่ายกว่าแต่มีคุณสมบัติบางอย่างที่ไม่พบในชั้นเรียนสาธารณะ ฉันเขียนคลาสของตัวเองโดยสร้างบล็อกซึ่งผลลัพธ์ของการสืบค้น SQL จะถูกแทรกโดยอัตโนมัติ นอกจากนี้ยังมีส่วนหัวและส่วนท้ายของบล็อก (เช่นแท็ก <table>และ</table>) ซึ่งปรากฏในผลลัพธ์ก็ต่อเมื่อมีแถวในการสืบค้น SQL</p> <p>PHP3 เปิดตัวโมดูลสำหรับฟังก์ชันการประมวลผล XML เมื่อใช้ฟังก์ชันของโมดูลนี้ คุณสามารถสร้างตัวจัดการโค้ด XML ของคุณเองได้ แต่อย่างไรก็ตาม คุณไม่สามารถตรวจสอบความถูกต้องของเอกสาร XML ได้</p> <p><i>เจาะลึกทฤษฎีว่า XML คืออะไร และเหตุใดจึงจำเป็น</i></p> <p><i>XML เป็นวิธีการบันทึกข้อมูลที่มีโครงสร้าง <a href="https://pzik.ru/th/the-program-controls-the-voice-in-russian-manage-your-phone-with-your-voice/">"ข้อมูลที่มีโครงสร้าง" มักจะหมายถึงสิ่งต่างๆ เช่น สเปรดชีต</a>สมุดที่อยู่</i></p> <p>พารามิเตอร์การกำหนดค่า ธุรกรรมทางการเงิน ภาพวาดทางเทคนิค และอื่นๆ XML คือชุดของกฎ (คุณอาจมองว่าเป็นคำแนะนำหรือแบบแผนก็ได้) สำหรับการพัฒนารูปแบบข้อความที่ช่วยให้คุณสามารถจัดโครงสร้างข้อมูลของคุณได้</p><p> <eshop> <!-- категории товаров --> <category id="3"> <title>คำอธิบายว่าโครงสร้างคืออะไร ผลิตภัณฑ์จากเนื้อสัตว์ ปลา 100 กิโลกรัม ปลา 200 เนื้อ ของเสียจากการผลิต ปลา 10 ปลาคาเวียร์ ผลิตภัณฑ์จากพืช ทานตะวัน 50

สิ่ง

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

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

ฟังก์ชั่น PHP<$htmltag>"; ) ) // ฟังก์ชันสำหรับส่วนท้ายของฟังก์ชันแท็ก endElement($parser, $name) ( global $map_array; if ($htmltag = $map_array[$name]) ( print ""; ) ) // ฟังก์ชันสำหรับข้อความ (โหนดข้อความ) 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

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

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 (หรือสตริงอีกครั้ง) การทำงานกับไฟล์ทำได้ยากกว่าเนื่องจากแนะนำให้ตรวจสอบความสมบูรณ์ของข้อมูลในกรณีนี้

มีสองวิธีในการสร้างมาร์กอัป ประการแรกคือมาร์กอัปที่เน้นข้อมูล ประการที่สองคือมาร์กอัปที่เน้นเอกสารเป็นหลัก

ตัวอย่างของมาร์กอัปเชิงข้อมูล: ฯลฯ ซีรีส์การแข่งรถที่จัดโดย FIA ใช้รถแข่ง. บีทีซีซี บริติช ทัวริ่ง คาร์ แชมเปี้ยนชิพ อะนาล็อกกับ ETCC ยกเว้นการแข่งขันที่ใช้ http://btcc.co.uk ดีทีเอ็ม

ดูช ตูเรนวาเก้น มาสเตอร์ส

ลำดับชั้นสองระดับ - แถว + ฟิลด์ (แน่นอนว่าหากมี 3 หรือ 4 ในนั้น จะไม่มีอะไรเปลี่ยนแปลงในเชิงคุณภาพ) โดยทั่วไปเหมือนกับแบบสอบถามจากฐานข้อมูลที่จัดรูปแบบโดยใช้ sql2xml ตัวอย่างของมาร์กอัปเชิงเอกสาร: FIA จัดการแข่งขันประมาณ 20 รายการ รวมถึงการแข่งขันรถทัวร์ริ่ง 2 รายการ (ตัวอย่างของมาร์กอัปเชิงข้อมูล:) ใช้รถใช้บนถนนที่ได้รับการปรับจูนอย่างดี ส่วนใหญ่เป็นรถ BMW อีกซีรีย์ FIA คือ รถทัวริ่งอังกฤษ (ซีรีส์การแข่งรถที่จัดโดย FIA ใช้รถแข่ง.) เป็นแบบอะนาล็อกกับ ETCC ยกเว้นการแข่งขันที่ใช้แม้ว่าสิ่งเหล่านี้จะไม่ใช่การแข่งขันชิงแชมป์ที่โด่งดังที่สุดในโลกก็ตาม http://btcc.co.uk (ดีทีเอ็ม) ซีรีส์การแข่งรถ Touring ที่โด่งดังที่สุด ไม่เพียงแต่ในเยอรมนีเท่านั้น

ตัวเลือกนี้เขียนด้วยภาษามนุษย์ฟรี แต่ข้อมูลในองค์ประกอบ acro และ title ยังคงเหมือนเดิม สามารถรับได้จากเอกสารโดยใช้แบบสอบถาม XPath หรือ XQuery เดียวกัน: /แชมเปี้ยนชิพ/แชมเปี้ยนชิพ/titleตัวเลือกมาร์กอัปแรกสามารถแสดงเป็นตารางฐานข้อมูลได้

http://btcc.co.uk ดีทีเอ็ม คุณสามารถทำให้มันซับซ้อนได้เช่น - ส่วนของเอกสาร: ซีรีส์การแข่งรถ Touring ของเยอรมันที่โด่งดังที่สุด โลร็องต์ ไอเอลโล แบร์นด์ ชไนเดอร์ มาร์เซล ฟาสเลอร์ ฌอง อเลซี่

คริสเตียน อัลเบอร์ส

สิ่งนี้จะไม่หยุดเอกสารจากการเป็นศูนย์กลางข้อมูล เอกสารใหม่สามารถแสดงเป็น 2 ตาราง โดยเชื่อมต่อกันเมื่อสอบถามโดยใช้ตัวดำเนินการ LEFT JOIN

เอกสารที่สองมีโครงสร้างที่ซับซ้อนกว่า และในกรณีทั่วไปจะไม่สามารถยัดลงในตารางได้

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

ดังนั้น เมื่อกลับมาที่การตรวจสอบความถูกต้องของเอกสาร ควรสังเกตว่ามาร์กอัปเชิงเอกสารเป็นเรื่องยากมากที่จะตรวจสอบความสอดคล้องกับสคีมา DTD หรือ XML ด้วยตัวแยกวิเคราะห์สตริงแบบธรรมดา

0"/>

อีกตัวอย่างหนึ่งคือมาร์กอัปแบบฟอร์มในคลาส 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", ""คำขอ_วิธีการ"".

ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ":

สคริปต์ PHP ออกหลังจากส่งส่วนหัว (นั่นคือหลังจากดำเนินการเอาต์พุตใด ๆ โดยไม่บัฟเฟอร์เอาต์พุต) หากคำขอถูกสร้างขึ้นโดยใช้วิธีการ ชื่อและเวอร์ชันของโปรโตคอลข้อมูลที่ร้องขอเพจ ตัวอย่างเช่น ".

"คำขอ_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_เบราว์เซอร์()

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

โปรดทราบว่าเมื่อใช้ ISAPI กับ IIS ค่าจะเป็น ปิดหากคำขอไม่ได้ทำผ่าน HTTPS "REMOTE_ADDR"

ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": ที่อยู่ IP ที่ผู้ใช้ดูหน้าปัจจุบัน "REMOTE_HOST"โฮสต์ระยะไกลที่ผู้ใช้กำลังดูเพจปัจจุบัน การค้นหา DNS แบบย้อนกลับจะขึ้นอยู่กับค่าของตัวแปร REMOTE_ADDR เว็บเซิร์ฟเวอร์ของคุณต้องได้รับการกำหนดค่าเพื่อสร้างตัวแปรนี้.

ตัวอย่างเช่น ใน Apache คุณต้องมีคำสั่ง พอร์ตบนเครื่องระยะไกลที่ใช้สื่อสารกับเว็บเซิร์ฟเวอร์"REMOTE_USER" ผู้ใช้ที่ได้รับการรับรองความถูกต้อง"REDIRECT_REMOTE_USER" ผู้ใช้ที่ได้รับการรับรองความถูกต้องหากคำขอถูกเปลี่ยนเส้นทางภายใน"SCRIPT_FILENAME"

เส้นทางที่แน่นอนไปยังสคริปต์ที่กำลังดำเนินการอยู่

ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ":

หากสคริปต์ทำงานบนบรรทัดคำสั่ง (CLI) โดยใช้พาธสัมพัทธ์ เช่น file.php หรือ ../file.php ตัวแปร $_SERVER["SCRIPT_FILENAME"] จะมีพาธสัมพัทธ์ที่ระบุโดยผู้ใช้

"SERVER_ADMIN" ตัวแปรนี้รับค่า (สำหรับ Apache) จากคำสั่งในไฟล์คอนฟิกูเรชันเซิร์ฟเวอร์ หากสคริปต์กำลังทำงานบนโฮสต์เสมือน นี่จะเป็นค่าที่กำหนดไว้สำหรับโฮสต์เสมือนนั้น"SERVER_PORT" พอร์ตบนคอมพิวเตอร์เซิร์ฟเวอร์ที่เว็บเซิร์ฟเวอร์ใช้ในการเชื่อมต่อ 80 สำหรับการตั้งค่าเริ่มต้น ค่าจะเป็น "

ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": "; ตัวอย่างเช่น เมื่อใช้ SLL ค่านี้จะเป็นค่าที่กำหนดค่าสำหรับการเชื่อมต่อ HTTP ที่ปลอดภัย หากต้องการรับพอร์ตจริง (จริง) ใน Apache 2 คุณต้องติดตั้ง UseCanonicalName = เปิด และ UseCanonicalPhysicalPort = เปิด

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

ใช้วิธีการใดในการขอเพจ ตัวอย่างเช่น ": "PATH_แปลแล้ว" เส้นทางตามระบบไฟล์ (ไม่ใช่รูทเอกสาร) ไปยังสคริปต์ปัจจุบัน หลังจากที่เซิร์ฟเวอร์ทำการแมปเสมือนกับจริงแล้ว ตั้งแต่ PHP 4.3.2 เป็นต้นไป ตัวแปร PATH_TRANSLATED จะไม่ถูกตั้งค่าโดยนัยใน Apache 2 SAPI อีกต่อไป เมื่อเปรียบเทียบกับ Apache เวอร์ชัน 1 ที่ตั้งค่าเป็นค่าเดียวกันกับตัวแปร SCRIPT_FILENAME เมื่อ Apache ไม่ได้ใช้งานการเปลี่ยนแปลงนี้จัดทำขึ้นเพื่อให้สอดคล้องกับข้อกำหนด CGI โดยที่ตัวแปร PATH_TRANSLATED ควรมีอยู่เมื่อมีการกำหนด PATH_INFO เท่านั้น

ผู้ใช้ 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"] ก็จะมี?>

/บางส่วน/สิ่งของ