PHP로 tail 명령과 같은 움직임을 만들고 싶습니다 ( ). 어떻게 파일에 추가를 볼 수 있습니까?PHP에서 파일 쓰기를 보는 방법은?
답변
의 사용을 고려하는 것이 좋습니다. 파일 크기를 지속적으로 폴링하고 새로운 데이터를 출력하면됩니다. 이것은 실제로 매우 쉽고주의해야 할 유일한 사실은 파일 크기와 다른 통계 데이터가 PHP에 캐시된다는 것입니다. 이에 대한 해결책은 데이터를 출력하기 전에 clearstatcache()
으로 전화하는 것입니다.
function follow($file)
{
$size = 0;
while (true) {
clearstatcache();
$currentSize = filesize($file);
if ($size == $currentSize) {
usleep(100);
continue;
}
$fh = fopen($file, "r");
fseek($fh, $size);
while ($d = fgets($fh)) {
echo $d;
}
fclose($fh);
$size = $currentSize;
}
}
follow("file.txt");
많은 CPU (내 테스트 설정에서 + 40 %). 폴더를보다 효율적으로 볼 수있는 방법이 있습니까? – Coyote
'usleep (100)'이 1 초 당 100 만분의 1 초 또는 0.0001 초 동안 잠자고 있습니다. 매우 낮은 대기 시간을 필요로하지 않는 한 CPU 사용량을 줄이려면 'usleep (10000)'(0.01s)로 늘리십시오. 'usleep (2000000)'또는'sleep (2)'(2s)는 당신이 흘끗 보았을 때 합리적으로 신선한 것을 원한다. – ReactiveRaven
이 코드를 시도했지만 성공하지 못했습니다 ... 브라우저가 계속 로딩을 계속합니다 ... 그리고 아무 반응이 없습니다 .. – ihtus
$handler = fopen('somefile.txt', 'r');
// move you at the end of file
fseek($handler, filesize());
// move you at the begining of file
fseek($handler, 0);
그리고 아마도 당신은 내가 그것을 할 몇 가지 마법의 방법이 있다고 생각하지 않습니다 stream_get_line
체크 아웃 php-tail on Google code을
여기에 오류 처리를 포함하지 않는 빠른 샘플입니다. PHP와 Javascript를 사용하는 2 파일 구현이며, 테스트시 오버 헤드가 거의 없습니다.
grep 키워드로 필터링을 지원합니다 (프레임 속도 등을 매초마다 울리는 ffmpeg에 유용합니다).
$handle = popen("tail -f /var/log/your_file.log 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer\n";
flush();
}
pclose($handle);
아파치 서버가 충돌합니다 .. 나만이 일을합니까? – dctremblay
에러 로그에서 단서를 확인하십시오.하지만 아파치 프로세스를 중단해서는 안됩니다. –
다음은 위에서 변경 한 내용입니다. 주기적으로 Ajax 호출로 호출하고 'holder'(textarea)에 추가하십시오. 희망이 있습니다 ... stackoverflow 및 기타 포럼에 기여하는 여러분 모두에게 감사드립니다!
/* Used by the programming module to output debug.txt */
session_start();
$_SESSION['tailSize'] = filesize("./debugLog.txt");
if($_SESSION['tailPrevSize'] == '' || $_SESSION['tailPrevSize'] > $_SESSION['tailSize'])
{
$_SESSION['tailPrevSize'] = $_SESSION['tailSize'];
}
$tailDiff = $_SESSION['tailSize'] - $_SESSION['tailPrevSize'];
$_SESSION['tailPrevSize'] = $_SESSION['tailSize'];
/* Include your own security checks (valid user, etc) if required here */
if(!$valid_user) {
echo "Invalid system mode for this page.";
}
$handle = popen("tail -c ".$tailDiff." ./debugLog.txt 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer";
flush();
}
pclose($handle);
- 1. PHP에서 jasperserver의 보고서를 보는 방법
- 2. php에서 링크가 클릭 된시기를 알아 보는 방법
- 3. 파일 읽기 및 쓰기를 병렬화하는 방법
- 4. stdout이 파일 쓰기를 끝낼 때까지 기다리는 방법
- 5. 파일 시스템은 동시 읽기/쓰기를 어떻게 처리합니까?
- 6. 별도의 스레드에서 순차 파일 쓰기를 수행하는 방법
- 7. 웹 서버의 모든 파일을 보는 방법은 무엇입니까?
- 8. PHP에서 하위 파일 수를 얻는 방법은 무엇입니까?
- 9. PHP에서 두 파일 구조를 비교하는 방법은 무엇입니까?
- 10. PHP에서 SWF 파일 크기를 얻는 방법은 무엇입니까?
- 11. PHP에서 jqgrid로 파일 업로드
- 12. 자식으로 커밋하기 전에 파일 크기를 보는 방법은 무엇입니까?
- 13. PHP에서 ASX 파일 보호
- 14. PHP에서 htaccess 파일 변경하기
- 15. PHP에서 dll 파일 실행
- 16. PHP에서 xlsx 파일 읽기
- 17. PHP에서 CSV 파일 내보내기
- 18. PHP에서 파일 편집
- 19. 무작위로 PHP에서 파일 선택
- 20. PHP에서 텍스트 파일 인덱싱
- 21. PHP에서 XML 파일 채우기
- 22. 강제로 PHP에서 파일 다운로드
- 23. PHP에서 오디오 파일 변환
- 24. PHP에서 odt 파일 읽기
- 25. PHP에서 파일 업로드가 중지됩니다.
- 26. Google지도를 '인쇄'모드로 보는 방법은 무엇입니까?
- 27. 변수의 데이터를 보는 방법은 무엇입니까?
- 28. Eclipse PDT에서 파일 시스템을 보는 방법
- 29. 서블릿에서 파일 경로를 알아 보는 방법
- 30. 스트림에 읽기/쓰기를 동기화하는 방법은 무엇입니까?
는 http://code.google.com/p/php-tail/ – Peeter
는 Packagist에서 사용 가능 : https://packagist.org/packages/icyapril/tail 안녕, 귀하의 솔루션은 불타는 것 같다 – mjsa