การเขียนโปรแกรมโดยใช้ PHP นิยมจะแยกไฟล์ออกเป็นส่วน ๆ เพื่อความสะดวกในการเขียนและ reused ไฟล์เพื่อที่จะนำมาใช้ซ้ำอีกครั้ง เช่น ในเว็บทั่วไปมันจะมีส่วนของ header และ footer เหมือนกันทุก ๆ หน้า แทนนี้จะเขียนส่วนหัวและส่วนท้ายทุกครั้ง สำหรับทุกหน้าเพื่อแสดงผลเหมือนๆ กันก็จะนิยมสร้างเป็นไฟล์ แยกออกไป จากนั้นก็แทรกเข้ามาโดยใช้ function included หรือ required
header.php
1 2 3 4 5 6 7 | <!doctype html> <html> <head> <meta charset= "utf-8" > <title><?php echo $title ; ?></title> </head> <body> |
และ
footer.php
1 2 | </body> </html> |
ถ้าหากต้องมีการเปลี่ยน design ก็สามารถแก้ได้โดยแก้ใน 2 ไฟล์นี้เท่านั้นแทนที่จะต้องไปไล่เปลี่ยนในทุก ๆ ไฟล์ ( มีแค่ 100 หน้าก็เหนื่อยแล้ว )
แต่เมื่อโครงสร้างไฟล์ใน project เริ่มมีความซับซ้อน เช่น ไม่ทราบว่าไฟล์ที่เราใช้คำสั่ง included หรือ required นั้นมีไฟล์ไหนบ้าง เพราะว่าไฟล์ที่ include เข้ามาสามารถแทรกไฟล์ส่วนอื่น ๆ เข้ามาเพิ่มได้เหมือนกัน เช่น header.php อาจจะมีการแทรกไฟล์ menu.php เพื่อแสดงส่วนของเมนู ภาษาพีเฮชพีจึงได้เตรียม function get_included_files เข้ามาช่วย debug ไฟล์ทั้งหมดที่แทรกเอาเข้ามา
ตัวอย่างการใช้งาน
debug.get_included_files.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $title = 'names of included or required files' ; include 'header.php' ; function getIncludedFiles() { $files = get_included_files(); echo '<pre>' , print_r( $files , true), '</pre>' ; fwrite( fopen ( 'logs_get_included_files.txt' , 'a+' ), "\n\n" . __FILE__ . ' :' . __LINE__ . "\n\n" . print_r( $files , true)); } getIncludedFiles(); include 'footer.php' ; |
ทดลองเรียกดู จะเห็นว่าจะแสดงเป็น array
function get_included_files
1 2 3 4 5 | Array ( [0] => D:\xampp\htdocs\snippets\PHP\get_included_files.php [1] => D:\xampp\htdocs\snippets\PHP\header.php ) |
สังเกตดูจะเป็นว่าจะแสดง array ออกมาและเขียนไฟล์ logs_get_included_files.txt เพิ่มขึ้นมา โดยเริ่มจากไฟล์ debug.get_included_files.php เองและแสดงไฟล์ header.php ที่แทรกเข้ามา แต่กลับไม่แสดง footer.php เพราะว่าแทรกเข้ามาหลัง function get_included_files() ในการใช้งานจริงๆ จึงควรแทรกไว้ที่ลำดับการทำงานสุดท้าย เช่น ไฟล์ footer.php จึงจะสามารถ list ไฟล์ที่ใช้ได้ครบ
นอกจากนี้ยังสามารถเขียนให้จบในบรรทัดเดียวได้
1 | fwrite( fopen ( 'get_included_files.txt' , 'a+' ), print_r(get_included_files(), true)); |