PHP의 다양한 파일 기능을 사용하는 방법을 알아보세요. fopen, fclose 및 feof와 같은 기본 파일 기능을 검토하고 fgets, fgetss 및 fscanf와 같은 읽기 기능에 대해 알아봅니다. 그리고 한두 줄의 코드로 전체 파일을 처리하는 기능을 찾았습니다.
얼마나 많은 방법이 있는지 세어봅시다
PHP와 같은 최신 프로그래밍 언어로 작업하는 즐거움 중 하나는 사용 가능한 옵션이 엄청나게 많다는 것입니다. PHP는 특히 파일 처리와 관련하여 "한 가지 이상의 방법이 있습니다"라는 Perl의 모토를 쉽게 이겼습니다. 하지만 사용할 수 있는 옵션이 너무 많아서 작업에 가장 적합한 도구는 무엇입니까? 물론 실제 답변은 파일 구문 분석 목표에 따라 다르므로 시간을 들여 모든 옵션을 살펴보는 것이 좋습니다.
전통적인 fopen 방법
fopen 방법은 아마도 이전 C 및 C++ 프로그래머에게 가장 익숙할 것입니다. 왜냐하면 여러분이 해당 언어를 사용해 본 적이 있다면 그 언어는 어느 정도 도구에 불과하기 때문입니다. 수년간 그랬어요. 두 방법 중 하나를 사용하면 목록 1에 표시된 대로 fopen(데이터를 읽는 데 사용되는 함수)을 사용하는 표준 방법으로 파일을 연 다음 fclose를 사용하여 닫습니다.
목록 1. fgets를 사용하여 파일을 열고 읽습니다. line = fgets($file_handle);
echo $line;
}
fclose($file_handle);
수년간의 프로그래밍 경험을 가진 대부분의 프로그래머는 이러한 기능에 익숙하지만 이 기능을 분석해 보겠습니다. 다음 단계를 효과적으로 수행하세요.
파일을 엽니다. $file_handle은 파일 자체에 대한 참조를 저장합니다.
파일의 끝에 도달했는지 확인하세요.
파일 끝에 도달할 때까지 계속해서 파일을 읽고, 읽은 대로 각 줄을 인쇄합니다.
파일을 닫습니다.
이러한 단계를 염두에 두고 여기서 사용된 각 파일 기능을 검토하겠습니다.
fopen
fopen 함수는 파일에 대한 연결을 생성합니다. fopen은 파일을 여는 것 외에도 URL을 열 수 있기 때문에 "연결 만들기"라고 말합니다: $fh = fopen("http://127.0.0.1/", "r");
This 코드 줄은 위 페이지에 대한 연결을 생성하고 로컬 파일처럼 읽을 수 있게 해줍니다.
참고: fopen에 사용된 "r"은 파일이 읽기 전용으로 열렸음을 나타냅니다. 파일에 데이터를 쓰는 것은 이 기사의 범위를 벗어나므로 다른 모든 옵션을 나열하지는 않겠습니다. 그러나 크로스 플랫폼 호환성을 위해 바이너리 파일에서 읽는 경우 "r"을 "rb"로 변경해야 합니다. 나중에 이에 대한 예를 볼 수 있습니다.
feof
feof 명령은 파일 끝에 도달했는지 여부를 감지하고 True 또는 False를 반환합니다. 목록 1의 루프는 "myfile" 파일의 끝에 도달할 때까지 계속됩니다. 참고: feof는 URL을 읽는 중이고 읽을 데이터가 더 이상 없기 때문에 소켓 시간이 초과되는 경우에도 False를 반환합니다.
fclose
목록 1의 끝으로 건너뛰면 fclose는 fopen과 반대되는 작업을 수행합니다. 즉, 파일이나 URL에 대한 연결을 닫습니다. 이 함수를 실행한 후에는 더 이상 파일이나 소켓에서 어떤 정보도 읽을 수 없습니다.
fgets
목록 1에서 몇 줄 뒤로 이동하면 파일 처리의 핵심, 즉 실제로 파일을 읽는 단계로 넘어갑니다. fgets 함수는 첫 번째 예에서 선택한 무기입니다. 파일에서 데이터 행을 추출하여 문자열로 반환합니다. 그런 다음 데이터를 인쇄하거나 조작할 수 있습니다. 목록 1의 예에서는 전체 파일을 제대로 인쇄합니다.
처리되는 데이터 덩어리의 크기를 제한하기로 결정한 경우 fgets에 매개변수를 추가하여 최대 행 길이를 제한할 수 있습니다. 예를 들어 다음 코드를 사용하여 줄 길이를 80자로 제한합니다. $string = fgets($file_handle, 81);
"참고: 이 함수의 예에서는 이미 fopen과 약간 다른 매개변수를 사용하고 있습니다. 바이너리 데이터로 작업할 때 항상 fopen에 b 옵션을 포함하는 것을 기억하세요. 이 점을 건너뛰면 Microsoft® Windows® 시스템은 새 줄을 다르게 처리하므로 파일을 올바르게 처리하지 못할 수 있습니다. Linux® 시스템(또는 다른 UNIX® 변형)을 다루는 경우에는 이것이 문제가 되지 않을 수 있습니다. 그러나 Windows용으로 개발하지 않더라도 이렇게 하면 플랫폼 간 유지 관리가 향상되므로 따라야 할 좋은 방법입니다.
위 코드는 4,096바이트(4KB)의 데이터를 읽습니다. 참고: 지정된 바이트 수에 관계없이 fread는 8,192바이트(8KB) 이상을 읽지 않습니다.
다음 코드는 파일 크기가 8KB 이하라고 가정하고 전체 파일을 문자열로 읽어야 합니다. $fh = fopen("myfile", "rb");
$data = fread($fh, filesize("myfile"));
fclose($fh);
if file 길이가 이 값보다 크면 나머지는 루프를 통해서만 읽을 수 있습니다.
fscanf
문자열 처리로 돌아가서, fscanf는 전통적인 C 파일 라이브러리 기능도 따릅니다. 익숙하지 않다면 fscanf는 파일의 필드 데이터를 변수로 읽어옵니다. list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
이 함수에서 사용하는 형식 문자열은 여러 위치(예: PHP. net)이므로 여기서는 자세히 설명하지 않겠습니다. 문자열 형식 지정은 매우 유연합니다. 모든 필드가 함수의 반환 값에 배치된다는 점은 주목할 가치가 있습니다. (C에서는 모두 인수로 전달됩니다.)
fgetss
fgetss 함수는 기존 파일 함수와 다르며 PHP의 성능을 더 잘 이해할 수 있도록 해줍니다. 이 함수는 fgets 함수와 유사하게 작동하지만 발견된 모든 HTML 또는 PHP 태그를 제거하고 일반 텍스트만 남깁니다. 아래 표시된 HTML 파일을 봅니다.
목록 2. 샘플 HTML 파일 🎜> ~ ;