Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Потоковое чтение из файла...
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Потоковое чтение из файла...

Страниц (1): [1]
 

1. Kolgarn - 23 Апреля, 2012 - 04:34:24 - перейти к сообщению
Собственно имеется файл со строками:

Цитата:
[07:07:59.503] [SomeBody {123445}:123] [Something {3213}] [Here you are] [oO Kill:0 {123df}] ()



В этот файл постоянно(порой по 5-10 строк в секунду) сторонняя программа пишет подобные строки.
Задача прочитать, обработать и выдать результат проанализировав текст.

На данный момент чтение из файла реализовано как:
PHP:
скопировать код в буфер обмена
  1.  
  2. $handle = fopen($file,'r');
  3. do
  4.         {
  5.         unset($data,$string);
  6.         $string = trim(stream_get_line($handle, 10000,"\n"));
  7.         if($string) $data = ParsString($string);
  8.         if(!empty($data)) { /* Добавляем текст */ }
  9.         if(!$string) delay($config['timeout']);
  10.         }
  11. while(true);
  12.  

Нет, оно не падает и етк. Вопрос лишь в том, что я совсем не уверен в разумности такого метода безостановочного чтения. Неужели не существует метода проверить наличия новой строки не вызывая нагрузку, которая превзойдет постоянное повторное чтение?

Пробовал с filesize, но как результат увеличение времени обработки в 10 раз, что не приемлемо.
Feof в моем случае почему-то по достижению конца единожды попросту переставал работать.

Собственно 2 вопроса:
1) Может есть более разумный способ читать данные из файла?
2) Каким образом на ваш взгляд можно удобнее и быстрее разбирать указанную строку на составляющие?

Так же заметил особенность при такой реализации - оно порой попросту пропускает последн(ие)юю строку, если одновременно много записалось.

 

Powered by ExBB FM 1.0 RC1