PHP_php 기술의 feof() 함수 예제 테스트
이 기사의 예에서는 PHP에서 feof() 함수의 사용법을 설명합니다. feof() 함수에 대한 특정 테스트를 수행했는데 이는 매우 실용적인 가치가 있습니다. 구체적인 분석은 다음과 같습니다.
이 기사의 실행 환경 예시:
OS: Mac OS X 10.8.4
PHP: 5.3.15
공식 PHP 매뉴얼에는 feof() 함수에 대한 논의가 많이 있습니다.
테스트 코드는 다음과 같습니다.
<?php print <<<EOF <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试PHP中的feof()函数效果</title> </head> <body> <div> EOF; function bool2str($bool) { if ($bool == TRUE) { return "TRUE"; } else { return "FALSE"; } } /* * 请随便创建一个文件。 * 比如:本测试中,在脚本文件的相同路径下创建了一个文本文件, * 文件内容为“abcdefg”,文件名为“7bytesfile”。 */ $filename = './7bytesfile'; $handle = fopen($filename, 'r'); if (!$handle) { die("文件打开失败"); } for($i = 0; $i <= filesize($filename); $i++) { fseek($handle, $i); echo "文件位置" . ftell($handle) . ":<br />\n"; echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n"; echo "当前位置字符:" . fgetc($handle) . "<br />\n"; echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n"; } /* * 通过上面一段代码可以观察到, * 随着循环的执行,文件指针从文件头一直移动到文件末尾。 * 但是当完成了字符“g”的读取输出,文件指针继续向后移动,这是feof()依然返回False。 * 只有当执行了一次fgetc()操作之后,才返回true,表示到达文件末尾。 */ echo "ftell()结果:". ftell($handle). "<hr />\n"; //输出一下,很郁闷的发现文件指针的位置还是7。+_+ fseek($handle, 4); echo "文件位置" . ftell($handle) . ":<br />\n"; echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n"; echo "当前位置字符:" . fgetc($handle) . "<br />\n"; echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n"; fseek($handle, 7); echo "文件位置" . ftell($handle) . ":<br />\n"; echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n"; echo "当前位置字符:" . fgetc($handle) . "<br />\n"; echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n"; fclose($handle); //再次移动文件指针,效果依旧。 //再用另外一段代码测试一下: $handle = fopen($filename, 'r'); if (!$handle) { die("文件打开失败"); } while (!feof($handle)) { $char = fgetc($handle); if ($char === FALSE) { echo 'FALSE'; } else { echo $char; } } fclose($handle); //依然是输出了字符g之后,再次执行读取操作,才终止循环。 print <<<EOF </div> </body> </html> EOF; ?>
이러한 상황에 대한 추측은 PHP에서 feof() 구현이 파일을 기준으로 파일 포인터의 위치를 직접 확인하지 않고 특정 식별자를 기반으로 결과를 반환한다는 것입니다. 이 플래그는 각 fseek() 후에 "False"로 설정됩니다. 파일 내용 읽기 작업이 수행된 후에만 플래그는 파일 읽기 결과에 따라 설정됩니다.
이러한 추측을 바탕으로 두 가지 코드 논리를 사용할 수 있습니다.
feof() 감지를 수행하지 않고 콘텐츠 읽기 함수(예: fgetc(), fgets())의 실행 결과를 직접 감지하는 방법도 있습니다.
샘플 코드는 다음과 같습니다.
while (($content = fgets($fileHandle)) !==FALSE) { //文件内容处理…… }
이 처리 방법은 PHP의 비판적인 함수 반환 방법을 활용하므로 감지를 위해 "===" 또는 "!=="를 사용해야 합니다. 코드는 다음과 같이 단순화될 수 없습니다.
while ($content = fgets($fileHandle)) {}
또 다른 방법은 아래와 같이 먼저 파일을 읽은 다음 feof() 루프를 입력하는 것입니다.
$content = fgets($fileHandle); while (!feof($fileHandle)) { //处理文件内容…… $content = fgets($fileHandle); }
테스트해본 결과 전자의 방법이 더 효율적이었습니다.
이 기사의 예제가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
