2016-12-28 4 views
1

데이터를 PHP 파일에 쓰는 로그 파일이 있습니다. 이는 그 코드입니다 :업데이트 로그 파일에서 실시간으로 한 줄씩 읽습니다.

$filename='/var/log/siawa/dashboard/iot.log'; 

$source_file = fopen($filename, "r") or die("Couldn't open $filename"); 

while (!feof($source_file)) { 
    $buffer = fgets($source_file, 4096); // use a buffer of 4KB 
    $buffer = str_replace($old,$new,$buffer); 
    echo $buffer. "<br />" . "\n"; 
} 

이이 작동하지만 난은 원래 로그 파일에 기록됩니다 일단 매 10 초마다 말 이후의 PHP 로그 데이터를 업데이트 할. 그렇게하는 방법.

답변

2

무한한 while(true) 루프에서 파일 내용을 읽어야합니다. 코드 주석을 통해 설명하겠습니다.

// read.php 
<?php 

// Last read position 
$last = 0; 

// Path to the updating log file 
$file = 'log.txt'; 

while (true) { 
    // PHP caches file information in order to provide faster 
    // performance; In order to read the new filesize, we need 
    // to flush this cache. 
    clearstatcache(false, $file); 

    // Get the current size of file 
    $current = filesize($file); 

    // Reseted the file? 
    if ($current < $last) { 
     $last = $current; 
    } 
    // If there's new content in the file 
    elseif ($current > $last) { 
     // Open the file in read mode 
     $fp = fopen($file, 'r'); 

     // Set the file position indicator to the last position 
     fseek($fp, $last); 

     // While not reached the end of the file 
     while (! feof($fp)) { 
      // Read a line and print 
      print fgets($fp); 
     } 

     // Store the current position of the file for the next pass 
     $last = ftell($fp); 

     // Close the file pointer 
     fclose($fp); 
    } 
} 

이 테스트 터미널 창을 문제 열려면

while true; do echo `date` >> log.txt; sleep 1; done 

이 각각 하나의 초 파일에 현재 날짜 문자열을 추가 것이다. 이제 다른 터미널을 열고 php read.php을 실행하여 파일이 실시간으로 읽혀지고 있는지 확인하십시오. 이 같은이를 출력 뭔가 :

// While not reached the end of the file 
while (! feof($fp)) { 
    print fgets($fp) . '<br>'; 

    // Flush the output cache 
    ob_flush(); 
} 
: 당신은 HTTP를 통해이 서비스를 제공하는 경향이 경우

Wed Dec 28 18:01:12 IRST 2016 
Wed Dec 28 18:01:13 IRST 2016 
Wed Dec 28 18:01:14 IRST 2016 
Wed Dec 28 18:01:15 IRST 2016 
Wed Dec 28 18:01:16 IRST 2016 
Wed Dec 28 18:01:17 IRST 2016 
Wed Dec 28 18:01:18 IRST 2016 
# Keeps updating... 

하면, 당신은 읽기 버퍼를 인쇄 한 후 ob_flush() 호출을 추가해야합니다