>  기사  >  백엔드 개발  >  PHP의 C와 유사한 파일 읽기 및 구문 분석 구현 기능에 대한 자세한 설명

PHP의 C와 유사한 파일 읽기 및 구문 분석 구현 기능에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-02 09:11:581714검색

이 문서의 예에서는 PHP가 C 언어와 유사한 파일 읽기 및 구문 분석 기능을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.


$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log';
//$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log';
if(!file_exists($log_file_name)) return;
$handle = fopen($log_file_name,'rb');
 if (FALSE === $handle) {
   exit("Failed to open stream to URL");
 }
//    $stream = fread($handle, $length);//从文件当前指针位置,往后读取n个字节长度
//重置文件指针的位置。指定指针的位置,指针位置修改后。读取文件,后面是从这个位置开始读取了
//fseek($handle,105);
//fgets表示每次读取文件的一行
$error_log_array = [];
while( ($line = fgets($handle) ) !==false){
   //每次读取一行
   //匹配出现[1],tp日志中用这种表示致命错误类型
   if(preg_match("/\[1\]/", $line)){
     $error_log_array[] = $line;
   }
}
fclose($handle);

몇 가지 참고 사항:

1 fwrite를 사용하는 경우 원본 파일의 내용이 지워지지 않도록 주의하세요. . 핵심은 fopen을 여는 방법입니다. r 또는 w.

append 방식을 사용하면 마크가 됩니다.

2. 열 때 파일이 성공적으로 열렸는지 주의하세요. feof를 사용할 때 무한 루프에 들어가지 않도록 하세요. 이 함수는 포인터가 아니기 때문에 항상 false를 반환합니다. feof의 원래 의도는 파일의 끝인지 확인하는 것입니다. 끝이면 true를 반환합니다. 끝이 아닌 경우 false를 반환합니다. 잘못된 포인터가 전달되면 파일의 끝이 아니며 항상 false가 반환됩니다.

feof() 함수에서 입력이 포인터형이 아닌 경우

while(!feof($fp)){
}

3, fread 및 fgets 판단을 사용하여 무한 루프가 발생합니다. 파일을 한 줄씩 읽으려면 fgets를 사용하십시오. 한 줄씩 읽는 대신 fread()를 사용하여 읽으십시오.

이 세부 사항에 주의하세요. 더 이상 콘텐츠가 없으면 false가 반환됩니다. 즉, 두 가지 경우에 내부 콘텐츠가 비어 있으면 반환됩니다. 또한 false를 반환합니다. 파일의 끝을 읽으면 이 두 함수도 false를 반환합니다. (이 세부 사항을 발견하지 못하도록 feof()를 사용하는 것은 당연합니다. 왜냐하면 이 함수는 이미 파일의 끝을 결정하는 데 도움이 되었기 때문입니다)

4. 추가 방법(예: 마크)을 사용하십시오. 이 방법을 사용하면 파일 내용을 읽을 수 없고 파일에 쓸 수만 있습니다. 따라서 이 핸들의 fread()는 false가 됩니다

요약하자면 파일의 내용만 읽는다면 읽기 모드로 열면 됩니다. 새 내용을 쓰려면 a 모드로 열어야 합니다

이제 나는 왜 여러 모드를 구별해야 하는지 이해합니다. 전에는 쓸모없다고 생각했어요. 이제 파일을 여는 방식에 따라 파일로 무엇을 할 수 있는지(새 콘텐츠 추가 또는 콘텐츠 읽기)가 결정되는 것 같습니다.

위 내용은 PHP의 C와 유사한 파일 읽기 및 구문 분석 구현 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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