GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ปัญหา PHP ไม่ยอมอ่านค่าใหม่เมื่อมีการแก้ไขไฟล์ ตอนที่ 2

ปัญหา PHP ไม่ยอมอ่านค่าใหม่เมื่อมีการแก้ไขไฟล์ ตอนที่ 2
เมื่อมีการโหลดไฟล์ด้วย include() หรือ require() PHP จะทำการแคชเนื้อหาของไฟล์ลงในหน่วยความจำ ซึ่งหากมีการโหลดไปยังไฟล์เดิมอีกครั้ง PHP จะใช้เนื้อหาของไฟล์จากหน่วยความจำโดยไม่ได้ไปโหลดใหม่ เพื่อให้ PHP ทำงานได้เร็วขึ้น ดังนั้น หากมีการแก้ไขไฟล์ก่อนการโหลดในครั้งที่สอง การโหลดในครั้งที่สองจะเห็นว่าข้อมูลยังไม่มีการเปลี่ยนแปลง เนื่องจากเป็นการนำมาจากหน่วยความจำนั่นเอง

วิธีแก้ปัญหาในกรณีนี้คือเราต้องทำการล้างหน่วยความจำก่อนที่จะโหลดใหม่ด้วยคำสั่ง
opcache_invalidate ( string $filename , bool $force=false ): bool


ตัวอย่าง
<?php
// อ่านข้อมูลจากไฟล์ ครั้งแรก
$result = require('datas.php');
// array ( )
var_export($result);

// เขียนไฟล์
file_put_contents('datas.php', '<?php return array("test");');

// อ่านข้อมูลจากไฟล์ ครั้งที่สอง ยังไม่มีอะไรเปลี่ยนแปลง ถึงแม้เนื้อหาของไฟล์จะถูกเขียนใหม่แล้วก็ตาม
$result = require('datas.php');
// array ( )
var_export($result);

// เคลียร์แคช
opcache_invalidate('datas.php');

// อ่านข้อมูลจากไฟล์ หลังจากเคลียร์แคชแล้ว ถึงจะเห็นความเปลี่ยนแปลง
$result = require('datas.php');
// array ( 0 => 'test', )
var_export($result);
?>


เนื้อหาในไฟล์ datas.php เริ่มต้น
<?php return array();

หมายเหตุ การล้างนี้เป็นการล้างข้อมูลในหน่วยความจำเท่านั้น ไม่ใช่เป็นการล้างแคชของไฟล์
0SHAREFacebookLINE it!
^