2012-06-19 2 views
3

서버에서 특정 작업이 수행 될 때 클라이언트에서 페이지를 다시로드해야하는 PHP 스크립트가 있습니다 (서버 푸시). 그래서 나는 변화에 귀 기울여야한다. 내 생각은 현재 페이지의 페이지로드 수를 포함하는 텍스트 파일을 갖는 것입니다. 그래서 나는 파일을 모니터하고 클라이언트의 내용을 업데이트하기 위해 서버 푸시를 사용하도록 수정하자마자 변경하려고합니다. 문제는 PHP에서 파일의 변경 사항을 추적하는 방법입니다. 이 지속적으로 파일마다 두 번째의 수정 시간의 변화를 볼 것이다PHP를 사용하여 텍스트 파일의 변경 내용 추적

<?php 
while(true){ 
    $file = stat('/file'); 
    if($file['mtime'] == time()){ 
     //... Do Something Here ..// 
    } 
    sleep(1); 
} 

:

+1

PHP는 타임 스탬프/크기가 변경되었는지 지속적으로 파일을 폴링하지 않는 메커니즘이 없습니다. 대부분의 최신 운영 체제에는 잠재적으로 연결할 수있는 알림 시스템이 있지만, 그 일은 무거운 짐을 덜어줍니다. 하지만 어떤 OS를 사용하고 있는지 말하지 않기 때문에 ... –

+0

http://en.wikipedia.org/wiki/Comet%5F%28programming%29 도움이 될만한 질문이 있습니다. – Tivie

+0

하지만 페이지가 새로 고침되지는 않습니다. 카운터도 바꿀까요? 그래서 당신은 끊임없이 상쾌한 페이지로 끝날 것입니다. –

답변

1

당신이 뭔가를 할 수 있습니다. 당신이 그것을 제한하지 않으면 당신은 당신의 디스크 IO를 죽일 수 있고 귀하의 ulimit을 조정해야 할 수도 있습니다.

<?php 
    $current_contents = ""; 

    function checkForChange($filepath) { 
    global $current_contents; 

    $new_contents = file_get_contents($filepath); 
    if (strcmp($new_contents, $current_contents) { 
     $current_contents = $new_contents; 
     return true; 
    } 

    return false; 
    } 

을하지만 그 문제가 해결되지 않습니다 :

+0

그 루프를 끝내기 위해 무언가를 포함 시켰는지 확인하십시오! 그것은 곧 기계 고장을 가져올 것입니다. –

0

이 변화에 대한 파일을 확인합니다. 클라이언트에게 제공되는 PHP 파일은 렌더링 된 html이 클라이언트로 보내지기 전에 실행을 끝냅니다. 해당 클라이언트는 변경 사항을 확인하기 위해 일부 PHP 파일을 다시 호출해야합니다 ... 또한 HTTP 요청이기 때문에 파일은 실행을 끝내고 메모리의 내용을 모두 잊어 버립니다.

이 문제를 올바르게 해결하려면 파일을 검사해야 할 수도 있습니다. 서버는 현재 연결된 클라이언트에 연락하는시기와 방법을 알아야하거나 정기적 인 간격으로 경량 서비스를 폴링해야합니다.

0

이것은 일종의 해킹이지만 페이지에서 짜증나거나 범위 또는 테이블에 저장하는 cron 작업을 만든 다음 30 초마다 간단히 비교합니다.