Есть ли способ в PHP, чтобы сохранить файл открытым и обрабатывать каждую строку и последующие строки? - PullRequest
3 голосов
/ 22 марта 2010

Я хочу написать php-скрипт, который держит файл apache_log открытым и «прослушивать» журнал, и обрабатывать каждую запись журнала, как это происходит.

Я думаю, что мне нужно открыть файл, получите количество строк, затем сделайте это снова в цикле - и когда размер будет другим, прочитайте новые строки и обработайте их.

Я лаю не на том дереве, или это глупо легко?решение, которое я пропустил?

Крис

Ответы [ 3 ]

1 голос
/ 22 марта 2010

Быстрый и грязный способ состоит в том, чтобы как-то использовать tail -f (при условии, что оно доступно):

Вы можете передать вывод в PHP: tail -f file | php myscript.php, а затем прочитать из php://stdin.

Или вы можете использовать popen в самом скрипте:

$res = popen('tail -f file_name', 'r');

while (!feof($res)) {
  $line = fgets($res);
  echo $line;
}
0 голосов
/ 22 марта 2010

Мне приходит в голову возможность запускать скрипт из задания cron каждую минуту или около того, и просто помнить последнюю строку, в которой вы были каждый раз.

0 голосов
/ 22 марта 2010

вы должны посмотреть на php inotify , вы можете вызывать функцию обратного вызова каждый раз, когда происходит изменение в файле, который вы наблюдаете. если вы открыли файл еще раз и прочитали все, что было, повторное чтение в файле должно получить новый контент.

...