목차
如果初始文件太大或者改变内容太多
如何检测文件大小的变化
代码实现
오늘 문득 예전에 누군가 나에게 물었던 질문이 생각났습니다. PHP tail -f를 통해 Linux의 명령을 분석하고 구현해 보겠습니다.
초기 파일이 너무 크거나 변경된 내용이 너무 많은 경우
파일 크기 변화를 감지하는 방법
코드 구현🎜rrreee🎜코드 구현 여기서 첫 번째 줄은 #!/usr/bin/env php는 실행 파일 php가 시스템 PATH에서 검색되어야 함을 알려줍니다. 이 방법의 장점은 이식성이 좋다는 것입니다. 🎜🎜🎜2016-02-22 11:28:51Improvement🎜🎜🎜PHP 공식 매뉴얼을 확인한 결과 fseek 함수를 개선할 수 있는 것으로 나타났습니다. 이 함수는 세 번째 매개변수도 허용합니다. 오프셋 포인터 유형, $ignore_size, $ignore_size);🎜🎜다음은 결과입니다🎜🎜🎜🎜🎜추천 학습: "🎜PHP 비디오 튜토리얼🎜"🎜
백엔드 개발 PHP 문제 PHP에서 Linux 명령을 구현하는 방법

PHP에서 Linux 명령을 구현하는 방법

Dec 08, 2021 am 11:00 AM
linux php

PHP에서 Linux 명령을 구현하는 방법: 1. PHP 샘플 파일을 만듭니다. 2. 첫 번째 줄에 "#!/usr/bin/env php"를 입력합니다. 3. "if(2 != count($argv) )" ){...}" 및 기타 코드는 Linux 명령 "tail -f"를 구현할 수 있습니다.

PHP에서 Linux 명령을 구현하는 방법

이 기사의 운영 환경: linux5.9.8 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

PHP에서 Linux 명령을 구현하는 방법은?

PHP에서 Linux 명령을 구현하는 방법 tail -ftail -f

今天突然想到之前有人问过我的一个问题,如何通过PHP实现linux中的命令tail -f,这里就来分析实现下。

这个想一想也挺简单,通过一个循环检测文件,看文件的大小是否有变化,如果有变化,输出文件变化的部分,当然了这里面会有好多的细节,这里具体分析下。

如果初始文件太大或者改变内容太多

这个时候一下输出好多内容可能看不清,因此我这里设置了一个阈值8192,当内容长度超过这个阈值的时候,只输出最后面的8192个字节,这样就不会出现大面积的刷新导致看不清的问题。

如何检测文件大小的变化

这个问题是这个程序的核心,能不能成功,性能的好坏就靠这部分了。
我在这里的实现是下面这样:

  • 打开文件句柄$fp,这里要注意,这里的文件句柄全程需中只打开一次关闭一次,因此要将他放在循环的外面。
  • 初始化当前文件大小file_sizefile_size_new都为0。
    • 循环里面更新file_size_new文件大小,这里要注意,php中获取文件大小之前一定要运行函数clearstatcache(),清除文件状态缓存,否则获取文件大小可能会有偏差。
    • 计算add_size = file_size_new - file_size,看文件大小是否有变化,如果有变化,将文件指针移动到指定位置,然后输出新加的内容,更新file_size值为new_file_size
    • usleep(50000),睡眠1/20秒。

代码实现

#!/usr/bin/env php 
<?php
if(2 != count($argv)){
    fwrite(
        STDERR,
        "调用格式错误!使用格式 ./tail filename".PHP_EOL
    );  
    return 1;
}

$file_name      = $argv[1];
define("MAX_SHOW", 8192);

$file_size      = 0;
$file_size_new  = 0;
$add_size       = 0;
$ignore_size    = 0;
$fp = fopen($file_name, "r");
while(1){
    clearstatcache();
    $file_size_new  = filesize($file_name);
    $add_size       = $file_size_new - $file_size;
    if($add_size > 0){ 
        if($add_size > MAX_SHOW){
            $ignore_size    = $add_size - MAX_SHOW;
            $add_size       = MAX_SHOW;
            fseek($fp, $file_size + $ignore_size);
        }   
        fwrite(
            STDOUT,
            fread($fp, $add_size)
        );  
        $file_size  = $file_size_new;
    }
    usleep(50000);
}

fclose($fp);
로그인 후 복사

代码实现这里第一行的#!/usr/bin/env php 是告诉可执行文件,可执行文件php在系统PATH中查找,这样的好处就是移植性好。

2016-02-22 11:28:51改进

查了PHP官方手册,fseek函数这里可以改进改进,这个函数还接受第三个参数,表示偏移指针的类型,默认是SEEK_SET,从开始偏移,还可以设置为SEEK_CUR,表示从当前位置偏移,因此这里改为fseek($fp, $ignore_size, $ignore_size);

오늘 문득 예전에 누군가 나에게 물었던 질문이 생각났습니다. PHP tail -f를 통해 Linux의 명령을 분석하고 구현해 보겠습니다.

생각해보면 아주 간단합니다. 파일 크기가 변경되었는지 확인하기 위해 루프를 통해 파일의 변경된 부분을 출력합니다. 거기에 많은 세부 사항이 있습니다. 여기에 자세한 분석이 있습니다.

초기 파일이 너무 크거나 변경된 내용이 너무 많은 경우

이때 많은 내용이 한꺼번에 출력됩니다 명확하게 표시되지 않을 수 있으므로 여기에8192 임계값을 설정했습니다. 콘텐츠 길이가 이 임계값을 초과하면 마지막 8192 바이트만 출력됩니다. 대면적 갱신으로 인해 시인성이 불분명해지는 문제가 없습니다.

파일 크기 변화를 감지하는 방법

이 질문이 이 프로그램의 핵심입니다. 이 부분의 성능에 따라 성공 여부가 결정됩니다.
여기서 구현한 내용은 다음과 같습니다. 🎜
  • $fp 파일 핸들을 엽니다. 여기에서 파일 핸들은 한 번만 열고 닫아야 한다는 점에 유의해야 합니다. 전체 과정에서 루프 외부에 두십시오.
  • 현재 파일 크기 file_sizefile_size_new를 모두 0으로 초기화합니다.
    • file_size_new 파일 크기는 루프에서 업데이트됩니다. PHP에서 파일 크기를 얻기 전에 clearstatcache() 함수를 실행해야 합니다. 파일 상태 캐시를 지우십시오. 그렇지 않으면 파일 크기를 얻는 데 편차가 있을 수 있습니다.
    • add_size = file_size_new - file_size를 계산하여 파일 크기가 변경되었는지 확인합니다. 그렇다면 파일 포인터를 지정된 위치로 이동한 다음 새로 추가된 내용을 출력하고 file_size 값은 new_file_size입니다.
    • usleep(50000), 1/20초 동안 잠자기.

코드 구현🎜rrreee🎜코드 구현 여기서 첫 번째 줄은 #!/usr/bin/env php는 실행 파일 <code>php가 시스템 PATH에서 검색되어야 함을 알려줍니다. 이 방법의 장점은 이식성이 좋다는 것입니다. 🎜🎜🎜2016-02-22 11:28:51Improvement🎜🎜🎜PHP 공식 매뉴얼을 확인한 결과 fseek 함수를 개선할 수 있는 것으로 나타났습니다. 이 함수는 세 번째 매개변수도 허용합니다. 오프셋 포인터 유형, $ignore_size, $ignore_size);🎜🎜다음은 결과입니다🎜🎜🎜🎜🎜추천 학습: "🎜PHP 비디오 튜토리얼🎜"🎜

위 내용은 PHP에서 Linux 명령을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP : 데이터베이스 및 서버 측 로직 처리 PHP : 데이터베이스 및 서버 측 로직 처리 Apr 15, 2025 am 12:15 AM

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

Centos와 Ubuntu의 차이 Centos와 Ubuntu의 차이 Apr 14, 2025 pm 09:09 PM

Centos와 Ubuntu의 주요 차이점은 다음과 같습니다. Origin (Centos는 Red Hat, Enterprise의 경우, Ubuntu는 Debian에서 시작하여 개인의 경우), 패키지 관리 (Centos는 안정성에 중점을 둡니다. Ubuntu는 APT를 사용하여 APT를 사용합니다), 지원주기 (Ubuntu는 5 년 동안 LTS 지원을 제공합니다), 커뮤니티에 중점을 둔다 (Centos Conciors on ubuntu). 튜토리얼 및 문서), 사용 (Centos는 서버에 편향되어 있으며 Ubuntu는 서버 및 데스크탑에 적합), 다른 차이점에는 설치 단순성 (Centos는 얇음)이 포함됩니다.

PHP의 목적 : 동적 웹 사이트 구축 PHP의 목적 : 동적 웹 사이트 구축 Apr 15, 2025 am 12:18 AM

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP 및 Python : 코드 예제 및 비교 PHP 및 Python : 코드 예제 및 비교 Apr 15, 2025 am 12:07 AM

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

Centos는 유지 보수를 중지합니다. 2024 Centos는 유지 보수를 중지합니다. 2024 Apr 14, 2025 pm 08:39 PM

Centos는 2024 년에 상류 분포 인 RHEL 8이 종료 되었기 때문에 폐쇄 될 것입니다. 이 종료는 CentOS 8 시스템에 영향을 미쳐 업데이트를 계속받지 못하게합니다. 사용자는 마이그레이션을 계획해야하며 시스템을 안전하고 안정적으로 유지하기 위해 Centos Stream, Almalinux 및 Rocky Linux가 포함됩니다.

Centos를 설치하는 방법 Centos를 설치하는 방법 Apr 14, 2025 pm 09:03 PM

CentOS 설치 단계 : ISO 이미지를 다운로드하고 부팅 가능한 미디어를 실행하십시오. 부팅하고 설치 소스를 선택하십시오. 언어 및 키보드 레이아웃을 선택하십시오. 네트워크 구성; 하드 디스크를 분할; 시스템 시계를 설정하십시오. 루트 사용자를 만듭니다. 소프트웨어 패키지를 선택하십시오. 설치를 시작하십시오. 설치가 완료된 후 하드 디스크에서 다시 시작하고 부팅하십시오.

Docker 원리에 대한 자세한 설명 Docker 원리에 대한 자세한 설명 Apr 14, 2025 pm 11:57 PM

Docker는 Linux 커널 기능을 사용하여 효율적이고 고립 된 응용 프로그램 실행 환경을 제공합니다. 작동 원리는 다음과 같습니다. 1. 거울은 읽기 전용 템플릿으로 사용되며, 여기에는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함합니다. 2. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

See all articles