觀察WordPress檔案變化小工具

查看近期目錄變化檔案,並且每日寄信通知

// 將 scan_directory 函數移到外部,並加上前綴以避免衝突
function custom_scan_directory($directory, $exclude_extensions, $exclude_directories, $now) {
    $output = '';
    $files_found = false;

    if ($handle = opendir($directory)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $file_path = $directory . $file;

                // 排除指定的目錄
                if (is_dir($file_path) && !in_array(basename($file_path), $exclude_directories)) {
                    // 如果是子目錄,則遞迴掃描
                    $sub_output = custom_scan_directory($file_path . '/', $exclude_extensions, $exclude_directories, $now);
                    if ($sub_output) {
                        $output .= $sub_output;
                        $files_found = true;
                    }
                } else if (!is_dir($file_path)) {
                    // 排除特定副檔名的檔案
                    if (!in_array(pathinfo($file_path, PATHINFO_EXTENSION), $exclude_extensions)) {
                        $file_modified_time = filemtime($file_path);

                        // 如果檔案在最近兩天內被修改過
                        if (($now - $file_modified_time) <= 2 * 24 * 60 * 60) {
                            $output .= '<li>' . $file_path . ' - ' . date("Y-m-d H:i:s", $file_modified_time) . '</li>';
                            $files_found = true;
                        }
                    }
                }
            }
        }
        closedir($handle);
    }

    return $files_found ? $output : '';
}

function list_recent_files_from_directories($send_email = false) {
    $directories = ['/var/www/wp/'];
    $exclude_extensions = ['jpg', 'png'];
    $exclude_directories = ['cache', 'podscache'];
    $now = time();
    $output = '';

    // 設定時區為台北時間
    date_default_timezone_set('Asia/Taipei');

    foreach ($directories as $directory) {
        $directory_output = custom_scan_directory($directory, $exclude_extensions, $exclude_directories, $now);
        if ($directory_output) {
            $output .= '<h3>Directory: ' . $directory . '</h3>';
            $output .= '<ul>';
            $output .= $directory_output;
            $output .= '</ul>';
        }
    }

    // 如果設置了發送郵件
    if ($send_email && !empty($output)) {
        $subject = '近期變更檔案';
        $recipients = ['yourmail@gmail.com'];
        wp_mail($recipients, $subject, $output, ['Content-Type: text/html; charset=UTF-8']);
    }

    return $output;
}

// 添加 shortcode
add_shortcode('recent_files_multiple', 'list_recent_files_from_directories');

// 註冊每日計劃任務
if (!wp_next_scheduled('daily_send_recent_files_report')) {
    wp_schedule_event(strtotime('00:00:00'), 'daily', 'daily_send_recent_files_report');
}

// 定義計劃任務
add_action('daily_send_recent_files_report', 'send_recent_files_report');
function send_recent_files_report() {
    list_recent_files_from_directories(true);
}
瀏覽次數:3