PHP에서 로컬 파일의 내용을 읽는 것이 일반적인 작업입니다. file_get_contents () 는 파일의 내용을 문자열로 직접 읽을 수있는 매우 편리한 기능입니다. 이 기능은 로컬 파일을 읽을 수있을뿐만 아니라 네트워크 또는 원격 파일의 파일도 읽을 수 있습니다. 이 기사는 File_Get_Contents ()를 사용하여 로컬 파일 내용을 읽고 몇 가지 일반적인 용도와 예방 조치를 소개하는 방법을 자세히 설명합니다.
file_get_contents ()는 파일의 내용을 읽고 파일의 내용을 문자열로 반환 할 수있는 PHP 내장 함수입니다. 함수의 기본 구문은 다음과 같습니다.
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$flags</span></span><span> = </span><span><span class="hljs-number">0</span></span><span> [, resource </span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = -</span><span><span class="hljs-number">1</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$maxlen</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ]]] )
</span></span>$ filename : 읽을 파일 이름은 상대 또는 절대 경로를 지원합니다.
$ 플래그 : 일부 읽기 옵션을 설정하는 선택적 매개 변수 (예 : file_use_include_path 또는 file_binary 로 설정할 수 있음).
$ 컨텍스트 : 스트림의 컨텍스트를 지정하는 유효한 stream_context 리소스는 기본값이 null 입니다.
$ OFFSET : 파일의 시작 위치를 읽고 기본값은 -1 이며 파일의 시작 위치에서 읽습니다.
$ maxlen : 읽을 최대 바이트 수, 기본값은 null 이므로 전체 파일을 읽는 것을 의미합니다.
사용하는 가장 쉬운 방법은 파일 경로를 매개 변수로 직접 전달하는 것입니다. 예는 다음과 같습니다.
<span><span><span class="hljs-variable">$file_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file_content</span></span><span>;
</span></span>위의 코드는 example.txt 파일의 내용을 읽고 페이지에 출력합니다. 파일이 있으면 파일 내용이 문자열로 반환됩니다. 파일이 존재하지 않으면 함수가 False를 반환하고 가능한 오류를 처리해야합니다.
일반적으로 파일을 읽지 않은 후 오류를 피하기 위해 파일이 존재하는지 판단해야합니다. file_exists () 또는 is_file () 함수를 사용하여 파일이 존재하는지 확인할 수 있습니다.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'example.txt'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>)) {
</span><span><span class="hljs-variable">$file_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file_content</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'파일이 존재하지 않습니다'</span></span><span>;
}
</span></span>또는 @ error suppressor를 사용하여 오류 메시지의 출력을 방지 할 수도 있습니다.
<span><span><span class="hljs-variable">$file_content</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_content</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'파일 읽기가 실패했습니다'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file_content</span></span><span>;
}
</span></span>그러나 다른 오류를 숨길 수 있으므로 @를 너무 많이 사용하는 것이 좋습니다.
file_get_contents ()는 기본적으로 전체 파일을 읽습니다. 파일이 매우 크면 과도한 메모리 사용 및 프로그램 충돌이 발생할 수 있습니다. 파일의 일부만 읽거나 블록으로 파일을 읽으려면 $ 오프셋 및 $ maxlen 매개 변수를 사용할 수 있습니다.
예를 들어, 파일의 시작부터 시작하는 100 바이트를 읽으십시오.
<span><span><span class="hljs-variable">$file_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file_content</span></span><span>;
</span></span>file_get_contents () 는 파일 읽기 컨텍스트 설정을 지원하므로 파일에 액세스하는 방법 (예 : 프록시 설정, 시간 초과 등)을 제어 할 수 있습니다. 컨텍스트를 설정 해야하는 경우 stream_context_create () 함수를 사용하여 컨텍스트 리소스를 생성 할 수 있습니다.
예 : 시간 초과 제한을 설정합니다
<span><span><span class="hljs-variable">$options</span></span><span> = [
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">5</span></span><span> </span><span><span class="hljs-comment">// 시간 초과를 설정하십시오 5 두번째</span></span><span>
]
];
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>(</span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-variable">$file_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file_content</span></span><span>;
</span></span>file_get_contents () 는 로컬 파일뿐만 아니라 원격 파일도 읽는 것을 지원합니다. URL 주소를 제공하면됩니다. 예를 들어 웹 페이지의 내용을 읽습니다.
<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://www.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$html_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$html_content</span></span><span>;
</span></span>원격 파일을 읽어야 할 때는 PHP 구성의 allow_url_fopen 옵션이 활성화되어 있는지 확인하십시오. 활성화되지 않으면 php.ini 구성 파일을 통해 활성화 할 수 있습니다.
성능 문제 : 파일이 매우 큰 경우 file_get_contents ()를 사용하여 전체 파일을 한 번에 읽으면 과도한 메모리 사용이 발생할 수 있습니다. fopen () , fgets () 또는 fread () 함수를 사용하여 파일 컨텐츠를 행 또는 블록별로 읽는 것을 고려할 수 있습니다.
오류 처리 : 파일 읽기가 실패하면 file_get_contents ()가 false를 반환합니다. 따라서 사용할 때는 예측할 수없는 오류를 피하기 위해 반환 값을 확인하십시오.
파일 권한 : PHP 프로세스에 특히 부적절한 권한 설정으로 파일을 읽을 수있는 프로덕션 환경에서 읽을 파일에 충분한 권한이 있는지 확인하십시오.
file_get_contents ()는 작은 파일을 읽거나 파일의 전체 내용을 읽는 데 적합한 매우 간단한 파일 읽기 기능입니다. 큰 파일의 경우 메모리를 저장하기 위해 주문형 판독 값을 고려해야합니다. 컨텍스트를 설정하면 파일 읽기의 동작을 유연하게 제어하여 file_get_contents () 의 응용 프로그램 시나리오를 향상시킬 수 있습니다.
라인별로 읽기 또는 대형 파일을 처리하는 것과 같은 복잡한 파일 읽기 요구 사항이있는 경우 fopen () , fread () 또는 file () 과 같은 다른 파일 작동 함수를 사용하는 것을 고려할 수 있습니다.
관련 태그:
file_get_contents