PHP การค้นหารายชื่อไฟล์ที่มีการแก้ไขล่าสุดโดยเทียบกับวันที่กำหนดเอาไว้

โดย SONGCHAI SAETERN
ตัวอย่างการอ่านไฟล์จากโฟลเดอร์ที่ต้องการ เพื่อหารายชื่อไฟล์ที่มีการแก้ไขหลังวันที่ที่กำหนดไว้ เพื่อใช้ร่วมกับโปรเจ็กต์ PHP CI MANIA ในการค้นหาไฟล์ล่าสุดที่ต้องการนำไปใช้งาน



ตัวอย่างซอร์สโค้ด PHP

<?php
function show($data){
echo '<pre>';
print_r($data);
echo '</pre>';
}
$path = array();
$dirname = dirname(__FILE__);
$timestamp = 1570843687;
echo 'ค้นหาไฟล์ที่แก้ไขหลังวันที่ : ', date('Y-m-d H:i:s', $timestamp);
function list_dir($dirname, $timestamp, &$path=array()){
$dir = new DirectoryIterator($dirname);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
if ($fileinfo->isDir()) {
list_dir($fileinfo->getPathname(), $timestamp, $path);
}
if ($fileinfo->getMTime() > $timestamp) {
// current file has been modified more recently
// than any other file we've checked until now
$path[] = $fileinfo->getPathname() . ' : ' . date('Y-m-d H:i:s', $fileinfo->getMTime());
//$timestamp = $fileinfo->getMTime();
}
}
}
return $path;
}
show(list_dir($dirname, $timestamp));
echo '<hr/>';
?>


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

ดังนั้นอาจจะต้องเทียบเพิ่มเติมดังนี้

1. วันที่แก้ไขล่าสุด
2. ค่า md5 ของไฟล์
3. ขนาดของไฟล์ (ขนาดใหญ่กว่าคือมีซอร์สโค้ดใหม่กว่าหรือมากกว่า)

เคสที่อาจจะมีการหลุดจากการตรวจสอบคือ

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

หรืออาจจะเพิ่มเติมอย่างอื่นเข้าไปด้วยเพื่อให้ได้ไฟล์ที่ถูกต้องและนำไปอัพเดตได้อย่างปลอดภัย

อ้างอิง

Anonymous recursive PHP functions
https://stackoverflow.com/questions/2480179/anonymous-recursive-php-functions

What in layman's terms is a Recursive Function using PHP
https://stackoverflow.com/questions/2648968/what-in-laymans-terms-is-a-recursive-function-using-php

Recursion and passing by reference
https://stackoverflow.com/questions/4322650/recursion-and-passing-by-reference/49402002

PHP Passing by Reference
https://www.php.net/manual/en/language.references.pass.php




PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
สนใจสั่งซื้อราคาสุดคุ้ม 1,500 บาท
http://fastcoding.phpcodemania.com