2015-01-16 3 views
0

Я хотел бы архивировать все файлы журналов месяца в конце этого месяца. для этого я использую следующий код:проверить формат файла с регулярным выражением (php)

<?php 

error_reporting(E_ALL); 

set_time_limit(0); 
ob_implicit_flush(); 
date_default_timezone_set('Europe/Berlin'); 

function archive_file($overwrite) 
{ 
    //$log_file_name = date('Y-m-d',strtotime('-1 days')).'.log'; 
    $log_file_name = date('Y_m_d').'.log'; 
    $zip_file = date('Y_m').'_Update_log.zip'; 
    if(file_exists($zip_file) && !$overwrite) 
     return false; 
    $zip = new ZipArchive(); 

    if($zip->open('E:\\'.$zip_file,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) 
    return false; 
    $package_dir = 'E:\log'; 
    $files = scandir($package_dir); 
    foreach ($files as $file_name) 
    { 
     echo "\n *******\n"; 
     echo $file_name; 
     echo "****************\n"; 
     //log file format = Y-m-d.log 
     //if(file format = format) { 
     $zip->addFile('E:\\'.$log_file_name, $log_file_name); 
     //} 
    } 
    $zip->close(); 
} 
echo "*****************************Archive files***************\n"; 
archive_file(false); 

?> 

Интересно, могу ли я использовать регулярные выражения, чтобы проверить формат файла журнала Ymd.log (2015-01-07.log) архивировать только все файлы журнала одного месяца (пример январь).

Любая помощь будет оценена

ответ

1

попробовать это будет соответствовать вашей логике:

preg_match('/'.date('Y_m').'_\d.*/', $file_name) 
1

Попробуйте это:

$regex = '/[0-9]{4}\-(.*?)\-/'; 
$matches = null; 
preg_match($regex, $file_name, $matches); 

if(isset($matches[1]) && $matches[1] == '01') { 
    echo $file_name.' file is a log of january'; 
} 

Или, если вам не нужно, чтобы получить матчи:

if(preg_match('/[0-9]{4}\-01\-/', $file_name)) { 
    echo $file_name.' file is a log of january'; 
} 
Смежные вопросы