สำคัญ! ทำการเปลี่ยนแปลงไฟล์เทมเพลต WooCommerce Ob_start - เปิดใช้งานการบัฟเฟอร์เอาต์พุต

phpFox แยกโครงสร้างแอปพลิเคชันออกเป็น แอป, แอพมอบฟังก์ชั่นใหม่, ให้สิ่งใหม่ บล็อกที่ผู้ดูแลระบบใส่ไว้ในเทมเพลต
ผสานรวม phpFox เข้ากับแพลตฟอร์มภายนอก ฯลฯ Amazon S3 และแม้แต่ปรับเปลี่ยนวิธีการทำงานของแพลตฟอร์ม phpFox

การสร้างแอปใหม่

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

หากต้องการสร้างแอป ให้ไปที่ AdminCP -> แอป -> ติดตั้งแล้ว -> การดำเนินการแบบเลื่อนลง -> แอปใหม่ -> ใส่ คุณ_APP_IDบนป๊อปอัป -> คลิกส่ง
จากนั้นตรวจสอบโฟลเดอร์ /PF.Site/Apps/ คุณ_APP_ID/ คุณจะเห็นไฟล์และโฟลเดอร์เริ่มต้นอยู่ที่นั่น

APP_ID คือชื่อแอปพลิเคชันของคุณ

อธิบายโครงสร้างแอป

  • อาแจ็กซ์: ไดเร็กทอรีนี้มีคลาสตัวจัดการ Ajax
  • สินทรัพย์: ไดเร็กทอรีนี้มีเนื้อหาดิบ เช่น รูปภาพ, css, javascript, ...
  • ปิดกั้น: ไดเร็กทอรีนี้ประกอบด้วย ปิดกั้นชั้นเรียน
  • คอนโทรลเลอร์: ไดเร็กทอรีนี้ประกอบด้วย ตัวควบคุมชั้นเรียน
  • บริการ: ไดเร็กทอรีนี้ประกอบด้วย บริการชั้นเรียน
  • ตะขอ: ไดเร็กทอรีนี้ประกอบด้วย ปลั๊กอินสคริปต์
  • มุมมอง: ไดเร็กทอรีนี้มีสคริปต์เทมเพลต
  • วลี.json: ไฟล์นี้ประกาศวลีภาษา
  • ไอคอน.png: นี่คือไอคอนของแอปของคุณ
  • ติดตั้ง.php: ไฟล์นี้มีสคริปต์การติดตั้งแอปของคุณ
  • start.php: ไฟล์นี้มีสคริปต์บูตสแตรป

ในบางกรณี คุณจะต้องแก้ไขการอนุญาตของโฟลเดอร์เหล่านี้เพื่อให้สามารถใส่โค้ดของคุณได้

เขียนคอนโทรลเลอร์ตัวแรกของคุณ

เพิ่มใหม่ IndexController.phpไฟล์ภายใต้ไดเร็กทอรี ./PF.Site/Apps/TodoList/คอนโทรลเลอร์/
วางโค้ดตัวอย่าง

แม่แบบ();

// ตั้งชื่อมุมมอง $template->setTitle("To Do List"); // ตั้งค่ามุมมอง breadcrumb // รับ url $url = $this->url()->makeUrl("to-do-list");$template->setBreadCrumb("รายการสิ่งที่ต้องทำ",$url); // เพิ่มเมนูส่วนของคุณ $template->buildSectionMenu("to-do-list", [ "Browse" => $this->url()->makeUrl("/to-do-list"), "Create" => $this->url()->makeUrl("/to-do-list/add"), ]);,
-

เพิ่มไฟล์เทมเพลตใหม่

index.html.php ภายใต้/PF.Site/Apps/TodoList/views/controller start.phpวางรหัสต่อไปนี้

addAliasNames("สิ่งที่ต้องทำ", "รายการสิ่งที่ต้องทำ"); // ลงทะเบียนคอนโทรลเลอร์ของคุณที่นี่ $module->addComponentNames("controller", [ "todo.index" => Controller\IndexController::class, ]); // ลงทะเบียนไดเรกทอรีเทมเพลต $module->addTemplateDirs([ "todo" => PHPFOX_DIR_SITE_APPS . "TodoList/views", ]); เส้นทาง ("to-do-list",function ()( \Phpfox_Module::instance()->dispatch("todo.index"); return "controller"; ));

คลาส php ทั้งหมดของคุณต้องมีเนมสเปซ แอป\TodoListซึ่งจะช่วยให้ตัวโหลดอัตโนมัติรู้ว่าจะโหลดสคริปต์ที่ไหน

มีกฎในการตั้งชื่อสิ่งต่าง ๆ: หากคุณต้องการสร้างคอนโทรลเลอร์ที่ตั้งชื่อ ดัชนีคุณควรตั้งชื่อไฟล์ php เป็น IndexController.php- ใน เริ่ม.phpเส้นทางควรจะเป็น หนังสือ.ดัชนีไฟล์เทมเพลตควรเป็น // ตั้งค่ามุมมอง breadcrumb // รับ url $url = $this->url()->makeUrl("to-do-list");(ส่วนแรกของชื่อไฟล์เทมเพลตจะต้องเหมือนกับส่วนสุดท้ายของเส้นทาง - ดัชนี)

เปิดเบราส์ เพิ่มในแถบที่อยู่ต่อท้าย /index.php/to-do-list/แล้วเห็นผล


เพิ่มเมนูหลัก

เมนูหลักจะถูกเพิ่มโดยอัตโนมัติโดย phpFox แก้ไข Install.php

อัปเดตฟังก์ชัน setAlias

นามแฝง = "สิ่งที่ต้องทำ";

-

ฟังก์ชั่นอัพเดต setOthers

menu = [ "name" => "To Do List", // Menu label "url" => "/to-do-list", // Menu Url "icon" => "tasks" // ไอคอนเมนู โปรดดู http://fontawesome.io/icons/ ];

-

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

menu = [ "phrase_var_name" => "menu_to_do_list", // ชื่อ Var สำหรับวลีของเมนู "url" => "/to-do-list", // Url เมนู "icon" => "tasks" // Menu ไอคอน โปรดดู http://fontawesome.io/icons/ ];

จากนั้นอัปเดตแอปของคุณเพื่อใช้การแก้ไขของคุณ -

เวลาในการอ่าน: 7 นาที

ความต้องการ PHP เห็นได้จากข้อเท็จจริงที่ว่าเว็บไซต์ชั้นนำของโลก เช่น Facebook, Google, Wikipedia และ YouTube กำลังใช้สคริปต์ PHP อยู่ที่แบ็กเอนด์ PHP มีประโยชน์ในการพัฒนาเว็บไซต์แบบไดนามิก เป็นภาษาสคริปต์ฝั่งเซิร์ฟเวอร์ที่ส่งข้อมูลโดยตรงไปยังเซิร์ฟเวอร์เมื่อผู้ใช้ส่งแบบฟอร์ม ก่อนที่จะไปสู่คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีเขียนสคริปต์ PHP ฉันจะให้ภาพรวมทั่วไปของ PHP แก่คุณ

PHP ทำงานบนระบบปฏิบัติการที่แตกต่างกัน เช่น Windows, UNIX, Linux และรองรับฐานข้อมูลที่แตกต่างกัน เช่น MySQL, Microsoft Access และ Oracle PHP ไม่เพียงแต่รวบรวมข้อมูลแบบฟอร์มเท่านั้น แต่ยังสามารถสร้าง อ่าน เขียน ลบ และปิดไฟล์บนเซิร์ฟเวอร์ได้อีกด้วย

สามารถฝังลงใน HTML ได้อย่างง่ายดาย รหัส PHP ถูกฝังอยู่ใน HTML พร้อมแท็ก.

เริ่มต้นใช้งาน PHP

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

จะใช้โค้ด PHP ได้ที่ไหน?

คุณสามารถใช้ PHP เพื่อสร้างเว็บเพจแบบไดนามิก รวบรวมข้อมูลแบบฟอร์ม และส่งหรือรับคุกกี้ได้

การประยุกต์ใช้สคริปต์ PHP

มาดูกันว่าสคริปต์ PHP ถูกใช้ไปกี่วิธี

การเขียนสคริปต์ฝั่งเซิร์ฟเวอร์

การเขียนสคริปต์ฝั่งเซิร์ฟเวอร์เป็นจุดประสงค์แรกของ PHP สิ่งที่คุณต้องมีเพื่อเริ่มทำงานบนเดสก์ท็อปพีซีด้วย PHP คือ PHP Parser, เว็บเซิร์ฟเวอร์ (เช่น Apache) และเว็บเบราว์เซอร์ เช่น Google Chrome

การเขียนสคริปต์บรรทัดคำสั่ง

หากคุณต้องการใช้ PHP บน Linux หรือตัวกำหนดเวลางานบน Windows คุณไม่จำเป็นต้องมีเว็บเซิร์ฟเวอร์จริงๆ แต่ต้องใช้ PHP Parser เท่านั้น สิ่งนี้เรียกว่า "การเขียนสคริปต์บรรทัดคำสั่ง"

แอปพลิเคชันเดสก์ท็อป

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

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

PHP ไม่เพียงแต่ช่วยให้คุณสามารถส่งออก HTML เท่านั้น แต่ยังช่วยให้คุณสามารถใส่รูปภาพ, PDF, วิดีโอ และเสียงได้อีกด้วย PHP สามารถสร้างไฟล์ XHTML และ XML ได้โดยอัตโนมัติ

PHP ให้การสนับสนุนโปรโตคอลเช่น LDAP, HTTP, COM, POP3 เป็นต้น นอกจากนี้ยังรองรับการแลกเปลี่ยนข้อมูลที่ซับซ้อนของ WDDX

ข้อกำหนดเบื้องต้นของ PHP

ก่อนที่คุณจะเริ่มเรียน PHP คุณต้องเรียนรู้พื้นฐานบางประการก่อน HTML (ภาษามาร์กอัปไฮเปอร์เท็กซ์), SS (สไตล์ชีตแบบเรียงซ้อน) และ JavaScript

วิธีการติดตั้ง PHP

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

การติดตั้ง Apache, PHP, MySQL และ PHPMyAdmin

หากต้องการติดตั้ง PHP, MySQL, PHPMyAdmin และ Apache ในครั้งเดียว ควรติดตั้ง XAMPP

เลื่อนไปที่ XAMPP สำหรับ Windows และการดาวน์โหลดจะเริ่มในไม่ช้า

คลิกที่ .exeไฟล์เพื่อเริ่มขั้นตอนการติดตั้ง

เลือกส่วนประกอบที่คุณต้องการติดตั้งแล้วคลิก "ถัดไป"

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

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

เลือกตำแหน่งที่คุณต้องการติดตั้ง XAMPP จากนั้นคลิก "ถัดไป"

คลิก "ถัดไป" ในหน้าจอที่กำลังจะมาถึงเพื่อดำเนินการตามขั้นตอนการติดตั้ง

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

แผงควบคุม XAMPP ได้เริ่มต้นแล้ว ตอนนี้คลิกปุ่ม "Start" ในแถว Apache และ MySQL เพื่อเริ่มต้น

ตอนนี้คุณพร้อมที่จะเริ่มเขียนโค้ดแล้ว ตอนนี้สิ่งที่คุณต้องการคือบรรณาธิการเช่น

echo “สคริปต์ PHP แรกของฉัน”;
?>

ตอนนี้ให้บันทึกหน้าเป็น “test.php” ใน htdocsโฟลเดอร์แล้วคลิกปุ่ม “บันทึก”

ตอนนี้เปิดเว็บเบราว์เซอร์แล้วพิมพ์โลคัลโฮสต์ในแถบที่อยู่ มันจะเปิดไฟล์ดัชนีโดยอัตโนมัติ แต่ถ้าคุณพิมพ์localhost/test.php, มันจะเปิดหน้าที่เราบันทึกไว้

ลองพิจารณาอีกตัวอย่างหนึ่ง




เริ่มต้นใช้งาน PHP


คู่มือเริ่มต้นสำหรับ PHP


เสียงสะท้อน “2+3″”
”;//จะแสดงเอาต์พุต 2+3
print “2+3”;// print จะแสดงผลลัพธ์ 2+3 ด้วย
?>

ในตัวอย่างนี้ เราใช้ เสียงสะท้อนและ พิมพ์เพื่อแสดงผลลัพธ์เดียวกัน นี่คือผลลัพธ์ที่เราได้รับ

คุณจะเห็นว่าบรรทัด 2+3 สองบรรทัดแสดงเป็นเอาต์พุตโดยใช้คำสั่งที่แตกต่างกัน โปรแกรมเมอร์มืออาชีพส่วนใหญ่ชอบใช้ echo เพราะ echo สามารถนำสตริงหรือค่าหลายค่ามาพร้อมกันได้ ในขณะที่ print จะแสดงทีละคำสั่ง ทั้งเสียงสะท้อนและการพิมพ์สามารถใช้ได้โดยมีหรือไม่มีวงเล็บก็ได้พิมพ์()หรือ เสียงสะท้อน()- นอกจากนี้ ควรสังเกตด้วยว่าคุณไม่สามารถเห็นผลรวมของตัวเลขสองตัวโดยไม่ต้องใช้ตัวแปร แนวคิดของตัวแปรจะได้รับการแนะนำพร้อมกับประเภทข้อมูล PHP ในบทช่วยสอนถัดไป

ลองพิจารณาตัวอย่างด้านล่าง




เริ่มต้นใช้งาน PHP


คู่มือเริ่มต้นสำหรับ PHP


ชุดการสอนสำหรับการเรียนรู้ PHP


$a=99;
$b=”แคลคูลัส”;
echo “ตัวเลขที่คุณได้รับใน $b คือ $a””
”;
echo 'ตัวเลขที่คุณได้รับใน $b คือ $a';
?>

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

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

ขอแสดงความยินดีในตอนนี้! คุณเพิ่งรันสคริปต์ PHP แรกของคุณ! ในอีกไม่กี่สัปดาห์ข้างหน้า ฉันจะพูดคุยเพิ่มเติมเกี่ยวกับ PHP; ตั้งแต่บทช่วยสอนพื้นฐานที่สุดไปจนถึงขั้นสูงสุด ฉันหวังว่าจะได้พบคุณเพื่อรับบทเรียน PHP เพิ่มเติม

ในระหว่างนี้ คุณสามารถสมัครและปรับใช้ PHP บนแพลตฟอร์ม Cloud Hosting ที่มีการจัดการที่ปฏิวัติวงการได้ เลือกผู้ให้บริการคลาวด์ของคุณจากโครงสร้างพื้นฐานที่ดีที่สุด เช่น Google Compute Engine, DigitalOcean และ Amazon Web Services คุณจะใช้เวลาไม่ถึง 6 นาทีในการลงทะเบียน เลือกผู้ให้บริการคลาวด์ และปรับใช้ PHP บนผู้ให้บริการคลาวด์ที่คุณเลือก มันรวดเร็วและปลอดภัย นอกจากนี้คุณยังได้รับความคุ้มครองจากทีมสนับสนุนตลอด 24 ชั่วโมงทุกวันซึ่งจะไม่ทำให้คุณตกอยู่ในอันตราย!

เปิดเว็บไซต์ PHP โดยไม่ต้องกังวลเรื่องการจัดการเซิร์ฟเวอร์

สแต็กที่ปรับให้เหมาะสมที่ติดตั้งล่วงหน้าพร้อม Git, Composer & SSH

อาเหม็ด ข่าน

Ahmed เป็นผู้เชี่ยวชาญด้านชุมชน PHP ที่ Cloudways - แพลตฟอร์มคลาวด์ที่มีการจัดการ เขาเป็นวิศวกรซอฟต์แวร์ที่มีความรู้กว้างขวางในด้าน PHP และ SEO เขาชอบดู Game of Thrones เป็นเวลาว่างของเขา ติดตาม Ahmed บน Twitter เพื่อติดตามผลงานของเขา คุณสามารถส่งอีเมลถึงเขาได้ที่อาเหม็ด

สวัสดีฮับ!

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

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


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

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

"http://blackjack-hookers.com" => "http://myoldforum.ru/redirect.php?url=blackjack-hookers.com"

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

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

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

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

ฟังก์ชัน Generate_plugin() ( /*สร้างบางสิ่ง*/ ) ฟังก์ชัน f_callback($buffer)( /*...*/ $buffer = str_replace ("",generate_plugin(),$buffer); /*...*/ return $buffer; ) ob_start("f_callback");

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

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

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

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

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

( PHP 4, PHP 5, PHP 7)

ob_start — เปิดใช้งานการบัฟเฟอร์เอาต์พุต

คำอธิบาย

บูล ob_start ([ เรียกได้$เอาท์พุท_โทรกลับ = โมฆะ [, int $chunk_size = 0 [, int $ธง = PHP_OUTPUT_HANDLER_STDFLAGS ]]])

ฟังก์ชันนี้ช่วยให้สามารถบัฟเฟอร์เอาต์พุตได้ หากบัฟเฟอร์เอาต์พุตทำงานอยู่ เอาต์พุตสคริปต์จะไม่ถูกส่ง (ยกเว้นส่วนหัว) แต่จะถูกเก็บไว้ในบัฟเฟอร์ภายใน

เนื้อหาของบัฟเฟอร์ภายในนี้สามารถคัดลอกไปยังตัวแปรสตริงได้โดยใช้ ob_get_contents()- หากต้องการส่งออกเนื้อหาของบัฟเฟอร์ภายในคุณควรใช้ ob_end_flush()- หรือคุณสามารถใช้ ob_end_clean()เพื่อทำลายเนื้อหาของบัฟเฟอร์

ความสนใจ

เว็บเซิร์ฟเวอร์บางแห่ง (เช่น Apache) เปลี่ยนไดเร็กทอรีการทำงานของสคริปต์เมื่อมีการเรียกใช้ฟังก์ชันโทรกลับ คุณสามารถนำมันกลับมาใช้ chdir(dirname($_SERVER["SCRIPT_FILENAME"]))ในฟังก์ชันโทรกลับ

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

หากมีการใช้งานฟังก์ชันการเรียกกลับหลายฟังก์ชัน เอาต์พุตจะถูกกรองตามลำดับสำหรับแต่ละฟังก์ชันตามลำดับการซ้อน

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

เท็จ - คำอธิบายฟังก์ชันสำหรับพารามิเตอร์นี้: (สตริง [, ตัวจัดการ ])

สตริง $buffer int $เฟสบัฟเฟอร์ เนื้อหาของบัฟเฟอร์เอาต์พุต เฟส.

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

ถ้า output_callback กลับมา โมฆะ.

ob_end_clean(), ob_end_flush(), ฟังก์ชันนี้รับสตริงเป็นอาร์กิวเมนต์และต้องส่งคืนสตริงด้วย, สามารถระบุพารามิเตอร์ทางเลือก output_callback ได้จากนั้นข้อมูลต้นฉบับจะถูกส่งไปยังเบราว์เซอร์โดยไม่มีการเปลี่ยนแปลง ob_start()สามารถละเว้นพารามิเตอร์ output_callback ได้โดยการส่งค่า และไม่สามารถเรียกจากฟังก์ชันการโทรกลับได้ เนื่องจากพฤติกรรมของฟังก์ชันเหล่านี้ไม่สามารถคาดเดาได้ หากคุณต้องการลบเนื้อหาของบัฟเฟอร์ ให้ส่งคืน "" (สตริงว่าง) จากฟังก์ชันโทรกลับคุณไม่สามารถเรียกใช้ฟังก์ชันได้

print_r($การแสดงออก, จริง):

หรือ highlight_file($ชื่อไฟล์, จริง)จากฟังก์ชันการเรียกกลับบัฟเฟอร์เอาต์พุต highlight_file($ชื่อไฟล์, จริง)ความคิดเห็น

ใน PHP 4.0.4 ฟังก์ชั่น

ob_gzhandler() 0 ได้รับการแนะนำเพื่อให้ง่ายต่อการส่งข้อมูลที่เข้ารหัส gz ไปยังเว็บเบราว์เซอร์ที่รองรับหน้าเว็บที่ถูกบีบอัด

กำหนดประเภทการเข้ารหัสเนื้อหาที่เบราว์เซอร์ยอมรับและส่งกลับเอาต์พุตตามนั้น 1 ชิ้น_ขนาด หากส่งพารามิเตอร์ chunk_size เผื่อเลือก บัฟเฟอร์จะถูกล้างหลังจากเอาต์พุตใดๆ ที่ใหญ่กว่าหรือเท่ากับ chunk_size ในขนาด ค่าเริ่มต้นหมายความว่าฟังก์ชันเอาต์พุตจะถูกเรียกใช้เมื่อปิดบัฟเฟอร์

ก่อน PHP 5.4.0 ค่า PHP_OUTPUT_HANDLER_STDFLAGSเป็นค่าพิเศษที่กำหนดพารามิเตอร์

ชิ้น_ขนาด

ที่ 4096. พารามิเตอร์แฟล็กเป็นบิตมาสก์ที่ควบคุมการดำเนินการที่สามารถทำได้บนบัฟเฟอร์เอาต์พุต
โดยค่าเริ่มต้น จะอนุญาตให้บัฟเฟอร์เอาท์พุตถูกฟลัช ฟลัช และลบ ซึ่งเหมือนกับ | ฟังก์ชันนี้รับสตริงเป็นอาร์กิวเมนต์และต้องส่งคืนสตริงด้วย, ob_end_clean()- , หรือ เป็นคำย่อของชุดค่าผสมนี้.
แต่ละแฟล็กจะควบคุมการเข้าถึงชุดของฟังก์ชัน ดังที่อธิบายไว้ด้านล่าง: ob_end_flush(), สามารถระบุพารามิเตอร์ทางเลือก output_callback ได้- , หรือ คงที่.
ฟังก์ชั่น ob_end_clean(), ob_end_flush()- , หรือ คงที่.

PHP_OUTPUT_HANDLER_CLEANABLE

, และ ob_get_clean() PHP_OUTPUT_HANDLER_FLUSHABLE เมื่อเรียกใช้ฟังก์ชัน output_callback ฟังก์ชันจะได้รับเนื้อหาของบัฟเฟอร์และจะต้องส่งคืนเนื้อหาที่อัปเดตเพื่อให้บัฟเฟอร์เอาต์พุตถูกส่งไปยังเบราว์เซอร์ ob_get_flush()

PHP_OUTPUT_HANDLER_REMOVABLE

ส่งกลับค่า การส่งคืน
7.0.0 จริง ob_start()เมื่อสำเร็จแล้วหรือ ในกรณีที่มีข้อผิดพลาดรายการการเปลี่ยนแปลง เวอร์ชันคำอธิบาย
5.4.0 ในกรณีที่ ob_start()ใช้ภายในฟังก์ชันการเรียกกลับบัฟเฟอร์เอาต์พุต ฟังก์ชันนี้จะไม่สร้างข้อผิดพลาดอีกต่อไป E_ERROR) ของพารามิเตอร์การลบ (ซึ่งเมื่อตั้งค่าเป็น เมื่อเรียกใช้ฟังก์ชัน output_callback ฟังก์ชันจะได้รับเนื้อหาของบัฟเฟอร์และจะต้องส่งคืนเนื้อหาที่อัปเดตเพื่อให้บัฟเฟอร์เอาต์พุตถูกส่งไปยังเบราว์เซอร์ป้องกันไม่ให้บัฟเฟอร์ถูกลบจนกว่าสคริปต์จะเสร็จสิ้น) เป็นจำนวนเต็ม ( จำนวนเต็ม) พารามิเตอร์แฟล็ก
5.4.0 น่าเสียดายที่นี่หมายถึงความไม่เข้ากันของ API สำหรับโค้ดที่ใช้พารามิเตอร์ตัวที่สามก่อน PHP 5.4.0 ดูตัวอย่างแฟล็กเพื่อทำความเข้าใจวิธีทำงานกับโค้ดเพื่อให้เข้ากันได้กับทั้งสองเวอร์ชัน หากส่งพารามิเตอร์ chunk_size เผื่อเลือก บัฟเฟอร์จะถูกล้างหลังจากเอาต์พุตใดๆ ที่ใหญ่กว่าหรือเท่ากับ chunk_size ในขนาด ค่าเริ่มต้นพารามิเตอร์ 1 , ติดตั้งใน
4.3.2 ตอนนี้ส่งผลให้มีเอาต์พุต 1 ไบต์ไปยังบัฟเฟอร์เอาต์พุต เมื่อเรียกใช้ฟังก์ชัน output_callback ฟังก์ชันจะได้รับเนื้อหาของบัฟเฟอร์และจะต้องส่งคืนเนื้อหาที่อัปเดตเพื่อให้บัฟเฟอร์เอาต์พุตถูกส่งไปยังเบราว์เซอร์ฟังก์ชั่นจะกลับมา

ในกรณีที่ไม่สามารถดำเนินการ output_callback ได้

ตัวอย่าง

ตัวอย่างที่ 1 ตัวอย่างฟังก์ชันการโทรกลับที่ผู้ใช้กำหนด
{
ฟังก์ชั่นการเรียกกลับ ($บัฟเฟอร์)
// แทนที่แอปเปิ้ลทั้งหมดด้วยส้ม
}

return (str_replace("แอปเปิ้ล", "ส้ม", $buffer));

?>


Ob_start("โทรกลับ");




มันเหมือนกับการเปรียบเทียบแอปเปิ้ลกับส้ม