@Cpa

Как сделать цикличное чтение файла с ожиданием появления строки на php?

Как сделать чтение файла каждые 2 секунды, и проверку появилась ли нужная строка в нем?Считываем первый раз,строки нет,второй раз снова нет,считываем 10 раз-строка появилась,выводим сообщение что строка появилась и завершаем работу.Пробовал такой неслишком правильный код, файл нужно каждый раз считывать заново.
<?php

function check_file(){

$file = fopen("textforparsing", "r");  
$buffer = fread($file, filesize("textforparsing"));  
fclose($file);  
if (substr_count($buffer, 'textforfind')>0){ 
    //echo "Найден!"; 
    $text_find_result = "true";
    return $text_find_result;
} 
else{ 
     $text_find_result = "none";
    return $text_find_result;

}}
$count = 0;
while ($count != 10){


echo $count,"<br>";
$result = check_file();

if ($result == "true")
{
	echo "Текст найден.";
	break;
}


if ($result == "none")
{
	echo "Текст ненайден";
	$count++;
	sleep(2);
}

}
?>
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@haramba
Почему вопросы о про битрикс такие тупые?
Попробовать примерно так?

$count = 0;
$found = false;
$last_position = 0;
$last_string = "";
$search = "abrakadabra";

$fp = fopen('somefile.txt', 'r');

do {
    fseek($fp,  $last_position);
    $last_string = "";
    while (($buffer = fgets($fp)) !== false)  {
        $last_string .= $buffer;
    }

    if (strpos($last_string, $search) !== false) {
        $found = true;
    }

    $last_position += strlen($last_string);
    $count += 1;
    sleep(2);
} while($found == false && $count < 10);

if ($found == true) {
   echo "Текст найден!";
}


Можно также попробовать с вызовом system('tail -n 100 path/to/file'). Вместо 100 может быть другое значение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Есть функция file, она читает строки в массив. В цикле и вызывайте её.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы