รายการสมาชิกชายเสมอ php g. ใช้ ob_start ในขณะที่สนับสนุนโครงการ php


สวัสดี Habr!

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

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


  ตัวอย่างเช่นเราต้องการกรองลิงก์ทั้งหมดไปยังเว็บไซต์บุคคลที่สาม

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

   "http://blackjack-hookers.com" \u003d\u003e "http://myoldforum.ru/redirect.php?url\u003dblackjack-hookers.com"

วิธีการอาจไม่ได้ผลที่สุด แต่มีประสิทธิภาพ เราเขียน redirect.php พร้อมตัวกรองและแผ่นสีดำและตอนนี้เราจำเป็นต้องแปลงลิงก์ทั้งหมดในหน้าเว็บฟอรัมนับพันหน้า ด้วย ob_start และการแสดงออกปกติสองสามครั้งเราจะทำสิ่งนี้ในสองสามบรรทัด:

ฟังก์ชัน f_callback ($ buffer) ($ buffer \u003d preg_replace ("#http: // (www.)? Myoldforum \\ .ru / #", "/", $ buffer); $ buffer \u003d preg_replace ("# href \u003d" http : // ([^ "] *)" # "," # href \u003d "/redirect\\.php\\?url\u003d$1", $ buffer); ส่งกลับ $ buffer;) ob_start (f_callback);

ตอนนี้ด้วยการเชื่อมต่อรหัสนี้ที่จุดเริ่มต้นของ index.php หรือไฟล์อื่นที่เซิร์ฟเวอร์เข้าถึงเมื่อเรียกดูเราได้สิ่งที่เราต้องการ

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

ฟังก์ชั่น generate_plugin () (/ * สร้างบางอย่าง * /) ฟังก์ชั่น f_callback ($ buffer) (/*...*/ $ buffer \u003d str_replace ("", generate_plugin (), $ buffer); /*...*/ ส่งกลับ $ buffer;) ob_start (" f_callback ");

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

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

  (สร้างสิ่งที่บ้าใหญ่)

คุณต้องสังเกตุเห็นถึงสิ่งเหล่านี้ทั้งหมด: "ฉันไม่ต้องการปีนขึ้นไป", "เก่าเท่าเก้าอี้ไทรันโนซอรัส", "บรรณาธิการเขียนคดเคี้ยว" ... ในโลกอุดมคติไม่ต้องใช้เปลือกหอยรอบบัฟเฟอร์ส่งออก สิ่งที่สามารถทำได้ด้วย ob_start สามารถทำได้ในทางทฤษฎีหากไม่มีมัน เทคนิคนี้บางครั้งทำให้เกิดความสับสนในรหัสโครงการหลายคนเห็นความหมายเฉพาะในการให้ผลลัพธ์กับ ob_gzhandler สำหรับการบีบอัดและพิจารณาการใช้งานในกรณีอื่น ๆ ที่เป็นอันตราย แต่บ่อยครั้งที่การจัดการผลผลิตไม่เพียงพอ

โดยเฉพาะถ้าคุณไม่ต้องการขุดลึกลงไป

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

2) ฉันแค่อยากถาม .. ตัวอย่างของการสร้างร้านค้าออนไลน์ที่พิจารณาในหลักสูตรมันเป็นวิชาการมากกว่าหรือไม่ โครงการเชิงพาณิชย์จริงอาจถูกสร้างขึ้นโดยใช้เฟรมเวิร์กเป็น สิ่งนี้ช่วยปรับกระบวนการพัฒนาให้เหมาะสมอย่างมากผ่านการใช้แม่แบบรหัสมาตรฐาน คำตอบสำหรับคำถามนี้จะช่วยชี้แจงสิ่งที่เกิดขึ้น ... เริ่ม PHP | การฝึกฝนยังคงคุ้มค่าที่ต้องทำเพื่อที่จะเข้าใจตรรกะทั่วไปหรือไม่?

คำตอบคือ:

1) สิ่งที่คุ้นเคยนั้นถูกต้องฉันก็คิดเช่นนั้น แต่กรอบใด ๆ ที่ต้องการการฝึกอบรมเช่นความรู้ เมื่อฉันสร้างระบบ MVC ในทางปฏิบัติฉันพยายามทำตามวิธีการที่ใช้ในกรอบงาน เนื่องจาก PHP Start (ทฤษฎีและการปฏิบัติ) จะช่วยเตรียมการหลังจากนั้นคุณสามารถเริ่มเรียนรู้ yii2 (หรือสิ่งที่คล้ายกัน) ได้อย่างปลอดภัย

ที่อยู่ที่เก็บโครงการ:

  คำถาม # 1:

ฉันไม่สามารถกำจัดข้อผิดพลาด:

ประกาศ: การใช้ค่าคงที่ไม่ได้กำหนด _FILE_ - สันนิษฐานว่า "_FILE_" ใน /Users/Elios/Sites/Test/index.php ในบรรทัดที่ 10

บอกฉันว่ามันเป็นอะไร

คำตอบคือ:

ก่อนและหลัง ไฟล์  ต้องเขียน 2 ตัวอักษร _

__FILE__ เป็นของค่าคงที่ "magic" ของ PHP รายละเอียดเพิ่มเติมที่นี่

ดูสมาชิกทั้งหมด

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

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

ชื่อผู้ใช้ทั้งหมดในรายการสมาชิกสามารถสั่งซื้อได้โดย: สถานะ (ออนไลน์ / ออฟไลน์), ชื่อผู้ใช้, อีเมล, เว็บไซต์, ICQ, AIM, YIM, MSN, ตำแหน่ง, วันที่ลงทะเบียนและโพสต์ ส่วนหัวของคอลัมน์เหล่านี้คือลิงก์ที่สามารถใช้ในการเรียงลำดับรายการตามลำดับจากน้อยไปมากหรือจากมากไปน้อยหรือเพื่อเรียงลำดับกลับกันของคอลัมน์ภายใต้หัวเรื่องที่ใช้เพื่อเรียงลำดับรายการในปัจจุบัน

ค้นหาสมาชิก

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

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

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