查看近期目錄變化檔案,並且每日寄信通知
// 將 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);
}