Перебор файлов по маске

ded-mazay

Новичок
Перебор файлов по маске

Доброго времени!

Есть некий код вытягивающий из лога только искомую мной информацию:

PHP:
$file="my_file-$y$m.txt"; //где y-год (гг), m-месяц(мм)

$search='my_str';

$x=0;

if(file_exists($file) && is_readable($file)) {
   echo "<b>Start of file $file</b><p>\r\n";
   $r=fopen($file,'r');
   $log=file_get_contents($file);
   $log_elem=explode("______", $log);
   for($i==0; $i<count($log_elem); $i++) {
	if(strpos($log_elem[$i], "$search")<>"") {
		$x++;
		$cur_log=ereg_replace("[\r]", '<br>', $log_elem[$i]);
		$cur_log=trim($cur_log);
		echo "<b>$x</b>.<font color=\"blue\">------------------------------------------------------------------------------------</font>$cur_log";
	}
   }  
   echo "<b>End of file $file</b><p>\r\n";
   fclose($r);
} else {
   "<i>File <b>$file</b> is not exists</i><br>";
}
Собсно вопрос как попроще для себя и для кода после просмотра одного лога открыть следующий и искать в нем и так до последнего? С датами устал воевать - не хочет пхп их понимать как цыфры в виде '0X', а нодо т.к. xxx-89.txt совсем не xxx-0809.txt... Формат имени изменить не могу.
Сам могу додуматься токо разбить $file на цыфры и с ними эксперементировать, но мож. можно обойтись более простыми методами... Да и сам цикл не знаю как вставить...
 

Ravanger

Новичок
читай всю директорию, и для каждого файла парси его содержимое.

кста, а зачем ты делаешь
PHP:
$r=fopen($file,'r');
 

ded-mazay

Новичок
*****
подскажите как мне последовательно перебрать все файлы в которых даты описаны как my_sid-0801.log, my_sid-0802.log...
Ravanger
надо последовательно и в директории еще темпфайлы есть...
 

Ravanger

Новичок
ded-mazay
а что мешает например результаты парсинга писать в массив, например, ключем которого будет дата, а потом сортировать как душе угодно?

с темп файлами вообще проблем не вижу, просто написать маску под которую должны/не должны подходить логи/тмп и отсеивать их в процессе прохода по папке(ам) ?

-~{}~ 11.11.08 10:57:

ps так и не услышал ответ по поводу fopen
 

Фанат

oncle terrible
Команда форума
ded-mazay
сначала ты подскажи, что означает "пхп не понимает"

-~{}~ 11.11.08 11:01:

ded-mazay
сначала ты подскажи, что значит "пхп не понимает"

ты задаешь вопрос про работу со строками, про имена файлов. но код при этом приводишь совсем другой.
приведи здесь код, которым ты пытаешься подставить имя файла
 

ded-mazay

Новичок
Автор оригинала: Ravanger
ps так и не услышал ответ по поводу fopen
Сначала с fread() было, щас поправлю..
результаты парсинга писать в массив, например, ключем которого будет дата, а потом сортировать как душе угодно
можно пример?
 

Фанат

oncle terrible
Команда форума
еще рекомендую обратить внимание на функцию glob()
глядишь, вообще манипулировать не придется.
 

ded-mazay

Новичок
еще рекомендую обратить внимание на функцию glob()
эм.. а то что там файлики по 10 мб и их порядка 30 - это не страшно? мне бы как можно легче весь процесс сделать надо..
 

ded-mazay

Новичок
Сделал так:
PHP:
$path="d:\xxx";

$logs_arr=glob($path."\yyy-"."*".txt);

for($i==0; $i<count($logs_arr); $i++) {
	$current_log="$logs_arr[$i]";
	echo "Log file $current_log<p>";
	$log_file=file_get_contents($current_log);
	$log_elem=explode('______', $log_file);
	for($t==0; $t<count($log_elem); $t++) {
		echo "$log_elem[$t]<br>";
	}
}
На печать выводится:

  • Log file



    Log file d:\xxx\yyy-0411.txt

    .....mycontent.........

    Log file d:\xxx\yyy-0412.txt

    Log file d:\xxx\yyy-0501.txt

    .....mycontent.........

    Log file d:\xxx\yyy-0502.txt

    Log file d:\xxx\yyy-0503.txt

    Log file d:\xxx\yyy-0504.txt

    .....mycontent.........

Почему некоторые файлы не попадают под $log_elem=explode("______", $current_log); ? Разделитель 100% во всех файлах одинаковый!

PS
Принцип оказался такой: если размер следующего файла больше текущего - печатает его, те файлы которые меньше - пропускает. Как исправить?
PPS
Переделал немного:
PHP:
foreach(glob($path."\yyy-"."*".txt) as $log_file) {
	echo "$log_file<br>";
	$log=file_get_contents($log_file);
	$log_elem=explode('______', $log);
	for($i==0; $i<count($log_elem); $i++) {
		echo "$log_elem[$i]<p>";
	}
}
ситуация не изменилась - пропускает файлы меньше размером чем текущие...
 

dimagolov

Новичок
ded-mazay, где ты наумелся такому бреду: $current_log="$logs_arr[$i]"; ?
ну и какой оператор присваивания, а какой сравнения?
 

ded-mazay

Новичок
dimagolov
А что таково в том что я назначаю переменную переменной? )
Все равно проехали, вот как работает как мне надо:
PHP:
$cmd="select to_char(my_date, 'YYMM') datein from my_table where my_id = $my_id";
$stmt=OCIParse($conn, $cmd);
OCIExecute($stmt, OCI_DEFAULT);
echo "<!--$cmd-->\r\n\r\n";
OCIFetch($stmt);
$datein=OCIResult($stmt, DATEIN);

$dir="d:\xxx";

$start_log="$dir\abc-$datein.txt";

foreach(glob($dir."\abc-"."*".txt) as $log_file) {
	if($log_file>=$start_log) {
		$logs=file_get_contents($log_file);
		$logs_elems=explode('______', $logs);
		$i=0;
		$x=0;
		do {
		$i++;
		$needed_log=strpos($logs_elems[$i], $my_id);
		if($needed_log<>"") {
			$x++;
			if($x==1) {
				echo "Start of log file <b>$log_file</b><br>";
			}
			$cur_log=ereg_replace("[\r]", '<br>', $logs_elems[$i]);
			$cur_log=trim($cur_log);
			echo "<b>$x</b>.<font color=\"blue\">------------------------------------------------------------------------------------</font>$cur_log";
			}
		}
		while($i<count($logs_elems));
	}
}
 

dimagolov

Новичок
ded-mazay, или ты почитаешь книгу по основам синтакса PHP или попадешь в игнор. объяснять тебе детсадиковские истины и читать твой индусский тут никто не будет кроме таких же извращенцев как и ты.
 

Фанат

oncle terrible
Команда форума
а я так и не понял, что там за проблема была с размерами.

ЗЫ. Стрематься юзать глоб по причине больших файлов и после этого писать file_get_contents($log_file) - жесть =)
 

ded-mazay

Новичок
dimagolov
именно работает!
А что тебя не устраивает в моем примере? названия директорий, файлов, таблиц, полей таблиц я просто скрыл

$dir."\abc-"."*".txt == D:\dir\file-0811.txt где 08 - число года 11 - соот-но месяца... что не так-то???

Фaнaт
я же начинаю их читать с того лога кот. мне нужно, а не все подряд..
 
Сверху