2017-01-11 1 views
-1

5 시간의 시험 후 나는 당신에게 간다.파일의 텍스트가있는 라이브 업데이트 페이지

파일을 변경하면 자동으로 자신을 업데이트하고 파일 내용을 표시하는 페이지를 만들어야합니다. foo.txt가 있다고 가정 해 봅시다. 계속 업데이트 중입니다. 페이지가 n 초마다 다시로드되는 것을 원하지 않습니다. 또한이 파일의 마지막 30 줄만 표시하면됩니다. 나는 이걸 생각해 냈다 :

<?php //live.php 
$handle = popen("tail -30l foo.txt 2>&1", 'r'); 
while(!feof($handle)) { 
    $buffer = fgets($handle); 
    echo "$buffer<br/>\n"; 
    ob_flush(); 
    flush(); 
} 
pclose($handle); 
?> 

무엇이 마지막 30 줄의 파일을 성공적으로 표시하지만 업데이트하지 않는가? - 내가 붙어있어 어디 그건 내가 작업 이하로 달성하는 방법을 모른다 : 파일 업데이트

  1. 확인,
  2. 디스플레이 live.php 파일 변경.

Ajax 업데이트 기능을 함께 사용할 수 있습니까?

+0

,?. 즉시 또는 일정 기간 후에? – squiroid

+0

최대한 빨리. – Bielecki

+0

이제 아약스 호출을 통해 서버에서 변경 사항을 확인하는 경우에만이 작업을 수행 할 수 있습니다. 변경 사항이있는 경우에만 페이지를 업로드하십시오. 그래서 한 가지 할 것이 현재 30 라인의 해시를 생성하고 서버로 보내고 서버 측의 현재 30 라인과 그 해시를 비교할 것을 제안합니다. 변경이 있으면 새로운 30 줄을 보내고 그렇지 않으면 false 값을 가진 플래그를 보냅니다. 그리고 다른 방법을 원할 경우 서버에서 프론트 엔드로 소켓 연결을 만들어야합니다. 파일에 변경 사항 (CRON 작업 사용)이 있으면 소켓을 통해 프론트 엔드와 디스플레이로 보내십시오. – squiroid

답변

0

두 가지 방법이 있습니다.

1) 풀링 주로 프론트 엔드별로 수행됩니다. 프런트 엔드에서 매초마다 데이터를 변경해야합니다. 변경 사항이 감지되면 서버에서 새 데이터를 보내고 현재 데이터를 새 데이터로 바꿉니다. 변경 사항이없는 경우 교체 할 필요가 없습니다.

장점 : 이 밀기

i) Page will only refresh if there is any change on server. 
ii) Client is responsible for detection manily. 

2)은 주로 서버에 의해 달성 될 수있다. 파일에 변경이있을 때마다 PHP 끝에서 감지합니다 (CRON 작업을 통해). 소켓을 통해 프런트 엔드에 데이터를 보냅니다.

총 :

i) Only data will send if there is change in data. No extra network calls. 

이 문서가 도움이 될 것입니다. 당신이 마지막으로 업데이트 된 세 줄을 보여주고 싶어 먼저

In what situations would AJAX long/short polling be preferred over HTML5 WebSockets?

관련 문제