PHP가 끝부터 파일을 읽는 중입니다. PHP: PHP 파일을 읽습니다. PHP에서 파일 작업: 읽기, 쓰기 및 권장 사항. 파일 생성 및 삭제

PHP

file_exists("test.txt")//파일이 존재합니까? filesize("test.txt");//파일 크기를 알아보세요 //타임스탬프가 반환됩니다: fileatime("test.txt");//파일에 마지막으로 액세스한 날짜 //date("d M Y" , $a시간); filemtime("test.txt");//파일 수정 날짜 //date("d M Y", $mtime); filectime("test.txt");//파일 생성 날짜(Windows) //date("d M Y", $ctime);

파일: 작동 모드

PHP

리소스 fopen (문자열 파일 이름, 문자열 모드) // 리소스 - 성공하면 파일에 대한 포인터를 반환하고, 오류가 발생하면 FALSE를 반환합니다.
작동 모드 설명
아르 자형 파일을 읽기 전용으로 엽니다.
r+ 읽고 쓰기 위해 파일을 엽니다.
쓰기 전용으로 파일을 엽니다. 존재하는 경우 파일의 현재 내용이 삭제됩니다. 현재 위치는 시작 부분으로 설정됩니다.
w+ 읽고 쓰기 위해 파일을 엽니다. 존재하는 경우 파일의 현재 내용이 삭제됩니다. 현재 위치는 시작 부분으로 설정됩니다.
쓰기 위해 파일을 엽니다. 현재 위치는 파일의 끝으로 설정됩니다.
에이+ 읽고 쓰기 위해 파일을 엽니다. 현재 위치는 파일의 끝으로 설정됩니다.
바이너리 파일을 처리합니다. 이 플래그는 Windows에서 바이너리 파일로 작업할 때 필요합니다.

PHP에서 파일 열기 및 닫기

PHP

$fi = fopen("test.html", "w+") 또는 die("오류"); //예 $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //fclose($fi) 닫기

PHP에서 파일 읽기

PHP

//파일 읽기 fread(int fi, int length) $str = fread($fi, 5); // 처음 5자를 읽습니다. echo $str; // 커서가 이동했기 때문에 $str = fread($fi, 12); // 다음 12자를 읽습니다. echo $str; fgets(int fi[, int length]) // 파일에서 한 줄 읽기 fgetss(int fi, int length [, string allowed]) // 파일에서 한 줄을 읽고 HTML 태그 삭제 // 허용되는 문자열 - 태그 fgetc(int fi) //파일에서 문자를 읽습니다.

처음에는 기존 데이터를 덮어쓰면서 파일 시작 부분에 쓰기가 발생합니다. 따라서 파일 끝에 무언가를 써야 하는 경우 적절한 설정을 해야 합니다. 읽기 모드, 예를 들어 a+ .

PHP 파일의 커서 조작

PHP

int fseek(int fi, int offset [, int whence]) //커서 설정 // int fi - 파일에 대한 포인터 //offset - 이동할 문자 수. //whence: //SEEK_SET - 파일의 시작 부분부터 이동이 시작됩니다. //SEEK_CUR - 현재 위치에서 이동이 시작됩니다. //SEEK_END - 파일의 끝부터 이동이 시작됩니다. fseek($fi, -10, SEEK_END); //마지막 10자를 읽습니다. $s = fread($fi, 10); $pos = ftell($fi); //현재 위치 알아내기 rewind($f)//커서 재설정 bool feof($f) //파일 끝

PHP에서 파일(데이터)로 직접 작업

PHP

array file(string filename) // 파일의 내용을 배열 형태로 가져옵니다 // 데이터를 직접 작업하는 또 다른 옵션 file_get_contents(string filename) // 읽기(전체 파일을 한 줄로 가져오기) // 쓰기 파일 (초기 덮어쓰기) file_put_contents(string filename, Mixed data[,int flag]); //FILE_APPEND // 파일 끝에 쓰기: file_put_contents("test.txt", "data", FILE_APPEND); //배열을 작성하면 $array = array("I", "live"); file_put_contents("test.txt",$array); //그런 다음 "Ilive"를 얻습니다.

PHP에서 파일 관리하기

PHP

copy(문자열 소스, 문자열 대상); // 파일 복사 rename(str oldname, str newname); // 파일 이름을 바꿉니다. unlink(string filename); // 파일 삭제

PHP 서버에 파일 업로드

//PHP.ini 설정 file_uploads (on|off) // 파일 업로드를 허용하거나 허용하지 않습니다. upload_tmp_dir // 업로드된 파일을 위한 임시 폴더입니다. 기본적으로 임시 폴더 upload_max_filesize (기본값 = 2Mb) // 최대. 업로드 파일 크기 post_max_size // 제출된 양식의 전체 크기(upload_max_filesize보다 커야 함) // 단순 업로드

HTML

서버의 파일 작업

PHP

//데이터 승인 $tmp = $_FILES["userfile"]["tmp_name"]; $name = $_FILES["사용자파일"]["이름"]; //파일 이동 move_uploaded_file($tmp, name); move_uploaded_file($tmp, "업로드/".name); // 파일을 업로드 폴더로 리디렉션 // 현재 파일에 상대적인 // $_FILES 배열의 내용 $_FILES["userfile"]["name"] // 파일 이름(예: test.html) $_FILES[ "userfile"][" tmp_name"] // 임시 파일 이름(경로) $_FILES["userfile"]["size"] // 파일 크기 $_FILES["userfile"]["type"] // 파일 유형 $ _FILES["userfile"] ["error"] // 0 - 오류 없음, 숫자 - 예 문자열 fgets(리소스 핸들 [, int 길이])

핸들이 가리키는 파일 설명자에서 읽은 길이 - 1바이트의 문자열을 반환합니다. 읽은 바이트 수가 length - 1에 도달할 때, 줄의 끝에 도달할 때(반환 값에 포함됨) 또는 파일의 끝에 도달할 때(둘 중 먼저 도달하는 시점) 읽기가 종료됩니다. 길이를 지정하지 않으면 기본값은 1KB 또는 1024바이트입니다.

오류가 발생하면 함수가 반환됩니다. 거짓 .

가장 흔한 실수:

"C" 함수의 의미에 익숙한 프로그래머 fgets(), EOF(파일 끝) 플래그가 반환되는 방식의 차이를 고려해야 합니다.

파일 포인터는 유효해야 하며 함수가 성공적으로 연 파일을 가리켜야 합니다. fopen()또는 fsockopen() .

다음은 간단한 예입니다.


예제 1. 파일을 한 줄씩 읽기

$handle = fopen("/tmp/inputfile.txt" , "r" );
while (!feof ($handle )) (
$buffer = fgets($handle, 4096);
에코 $버퍼 ;
}
fclose($handle);
?>

논평:길이 매개변수는 PHP 버전 4.2.0부터 선택사항이 되었습니다. 이 매개변수를 생략하면 문자열의 길이는 1024로 간주됩니다. PHP 4.3부터 길이 매개변수를 생략하면 스트림을 문자열 끝까지 읽게 됩니다. 파일의 줄 대부분이 8KB보다 긴 경우 스크립트에서 사용하는 리소스에 관해 가장 효율적인 결정은 최대 줄 길이를 지정하는 것입니다.

논평:이 함수는 PHP 4.3부터 바이너리 데이터를 올바르게 처리할 수 있습니다. 이전 버전에는 이 기능이 없었습니다.

fopen, fclose, feof, fgets, fgetss 및 fscanf 함수 사용 정보

모든 가능성을 나열해보자

PHP와 같은 최신 프로그래밍 언어로 작업할 때의 이점 중 하나는 사용 가능한 기능이 많다는 것입니다. PHP는 특히 파일 처리와 관련하여 "무언가를 수행하는 방법에는 여러 가지가 있습니다"라는 Perl의 모토를 쉽게 채택할 수 있습니다. 그러나 사용할 수 있는 도구가 너무 많아서 작업을 완료하는 데 어떤 도구가 가장 적합한지에 대한 의문이 생깁니다. 물론 이 질문에 대한 답은 파일을 처리할 때의 목표가 무엇인지에 따라 달라지므로 언어의 모든 기능을 배우는 것은 시간을 투자할 가치가 있습니다.

전통적인 fopen 방법

fopen 메소드는 아마도 과거 C 및 C++ 프로그래머에게 가장 친숙할 것입니다. 왜냐하면 해당 프로그래밍 언어로 작업한 경우 수년 동안 쉽게 사용할 수 있었던 도구이기 때문입니다. 이러한 방법 중 하나에 대해 목록 1에 표시된 대로 fopen을 사용하여 파일을 열고 데이터를 읽는 함수를 사용한 다음 fclose를 사용하여 파일을 닫는 표준 절차를 따릅니다.

목록 1. fgets를 사용하여 파일 열기 및 읽기
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

이러한 기능은 대부분의 숙련된 프로그래머에게 익숙하지만 작동 방식을 분석해 보겠습니다. 실제로는 다음 단계를 따르고 있습니다.

  1. 파일을 엽니다. $file_handle은 파일 자체에 대한 링크를 저장합니다.
  2. 파일의 끝에 도달했는지 확인하세요.
  3. 끝까지 파일을 계속 읽고 읽은 각 줄을 인쇄합니다.
  4. 파일을 닫습니다.

이를 염두에 두고 여기에서 사용된 각 파일 기능을 살펴보겠습니다.

fopen 기능

fopen 함수는 파일에 대한 연결을 설정합니다. fopen은 파일을 여는 것 외에도 URL도 열 수 있기 때문에 "연결을 설정합니다"라고 말합니다.

$fh = fopen("http://127.0.0.1/", "r");

이 프로그램 줄은 위 페이지에 대한 링크를 생성하고 이를 로컬 파일로 읽을 수 있도록 해줍니다.

메모: fopen에 사용된 "r" 옵션은 파일이 읽기 전용으로 열려 있음을 나타냅니다. 파일에 쓰는 것은 이 글에서 논의된 문제의 범위에 포함되지 않기 때문에, 매개변수의 가능한 모든 값을 나열하지는 않겠습니다. 그러나 플랫폼 간 호환성을 위해 바이너리에서 읽는 경우 "r"을 "rb"로 변경해야 합니다. 아래는 이 유형의 예입니다.

feof 기능

feof 명령은 읽기가 파일 끝에 도달했는지 여부를 확인하고 True 또는 False를 반환합니다. 에 표시된 루프는 "myfile" 파일의 끝까지 계속됩니다. URL을 읽는 중이고 읽을 데이터가 더 이상 없기 때문에 연결 시간이 초과되는 경우에도 feof는 False를 반환합니다.

함수 fclose

목록 1의 중간 부분을 건너뛰고 끝 부분으로 이동하겠습니다. fclose는 fopen과 반대되는 작업을 수행합니다. 즉, 파일이나 URL에 대한 연결을 닫습니다. 이 함수를 실행한 후에는 더 이상 파일이나 소켓에서 읽을 수 없습니다.

fgets 함수

목록 1의 몇 줄로 돌아가면 파일 처리 프로세스의 핵심, 즉 실제로 파일을 읽는 부분을 알 수 있습니다. fgets 함수는 첫 번째 예에서 선택한 무기입니다. 파일에서 한 줄의 데이터를 가져와서 문자열로 반환합니다. 여기에서 데이터를 표시하거나 처리할 수 있습니다. 목록 1의 예제는 전체 파일을 인쇄합니다.

작업하는 데이터 청크의 크기를 제한하기로 결정한 경우 fgets 인수를 추가하여 캡처되는 데이터 문자열의 최대 길이를 제한할 수 있습니다. 예를 들어 다음 코드를 사용하여 줄 길이를 80자로 제한합니다.

$string = fgets($file_handle, 81);

C의 줄 끝 표시기인 "\0"을 생각하고 길이를 실제로 필요한 것보다 한 문자 더 길게 설정하십시오. 보시다시피 위의 예에서는 81자를 사용하지만 80자가 필요합니다. 특정 기능에 대한 줄 길이 제한을 설정해야 할 때마다 추가 문자를 추가하는 습관을 들이십시오.

fread 함수

fgets 함수는 파일을 읽는 데 사용할 수 있는 많은 함수 중 하나일 뿐입니다. 대부분의 경우 파일을 한 줄씩 처리하는 것이 가장 적합하기 때문에 이는 가장 일반적으로 사용되는 기능 중 하나입니다. 실제로 다른 여러 기능도 유사한 기능을 제공합니다. 그러나 라인별 분석이 항상 필요한 것은 아닙니다.

그리고 여기서 우리는 fread 에 접근합니다. fread 함수는 fgets와 약간 다른 목적을 가지고 있습니다. 이진 파일(즉, 처음에는 사람이 읽을 수 있는 텍스트로 구성되지 않은 파일)에서 읽는 것이 목적입니다. "라인" 개념은 바이너리 파일과 관련이 없으므로(논리적 데이터 구조는 일반적으로 라인으로 구분되지 않음) 읽을 바이트 수를 지정해야 합니다.

$fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

위의 예에서는 4096바이트(4KB)의 데이터를 읽습니다. 지정한 값에 관계없이 fread는 최대 8192바이트(8KB)를 읽습니다.

파일이 8KB보다 크지 않다고 가정하면 아래 프로그램 조각은 전체 파일을 한 줄로 읽어야 합니다.

$fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose($fh);

파일 크기가 더 큰 경우 루프를 사용하여 나머지 부분을 읽어야 합니다.

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 파일
내 제목

"너에게 고통을 줄 사람은 아무도 없으니까"라는 말이 무슨 뜻인지 이해한다면, 미국 밴드의 음악을 너무 많이 듣는 것입니다.

fgetss 함수를 통해 전달해 보겠습니다.

목록 3. fgetss 사용
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

다음은 출력으로 얻을 수 있는 것입니다.

내 제목 "당신에게 고통을 줄 사람이 아무도 없으니까"라는 말의 의미를 이해한다면 밴드 아메리카(America)의 노래를 너무 많이 듣는 것입니다.

fpassthru 기능

파일에서 데이터를 읽는 방법에 관계없이 fpassthru 함수를 사용하면 표준 출력 채널을 사용하여 나머지 데이터를 인쇄할 수 있습니다.

fpassthru($fh);

이 함수는 데이터를 인쇄하므로 변수에 넣을 필요가 없습니다.

비선형 파일 처리: 파일을 통해 이동

물론 위에서 설명한 기능을 사용하면 파일에서 순차적으로 읽을 수만 있습니다. 더 복잡한 파일은 파일의 시작이나 끝에서 파일의 다른 부분으로 이동해야 할 수도 있습니다. 이를 위해서는 fseek 기능이 필요합니다.

fseek($fh, 0);

위의 예는 파일의 시작 부분으로 돌아갑니다. 파일의 맨 처음으로 이동하고 싶지 않은 경우(예: 1KB이면 충분함) 다음과 같이 작성하면 됩니다.

fseek($fh, 1024);

PHP V4.0부터는 몇 가지 다른 옵션도 사용할 수 있습니다. 예를 들어 현재 위치에서 100바이트 앞으로 이동해야 하는 경우 다음 코드를 사용할 수 있습니다.

fseek($fh, 100, SEEK_CUR);

마찬가지로 100바이트 뒤로 이동하는 방법은 다음과 같습니다.

fseek($fh, -100, SEEK_CUR);

파일이 끝나기 전의 100바이트 위치로 돌아가고 싶다면 대신 SEEK_END를 사용하세요.

fseek($fh, -100, SEEK_END);

새 위치에 도달하면 fgets, fscanf 또는 다른 함수를 사용하여 데이터를 읽을 수 있습니다.

메모: URL을 참조하는 파일 설명자에는 fseek를 사용할 수 없습니다.

전체 파일 캡처

이제 우리는 PHP의 고유한 파일 처리 기능 중 일부를 살펴보겠습니다. 즉, 하나 또는 두 줄의 큰 데이터 블록을 처리합니다. 예를 들어, 파일을 가져와 웹 페이지에 전체 내용을 표시하려면 어떻게 해야 할까요? 글쎄, 당신은 fgets와 함께 루프를 사용하는 예를 보았습니다. 하지만 어떻게 하면 더 쉽게 할 수 있을까요? 전체 파일을 한 줄에 배치하는 fgetcontents를 사용하면 프로세스가 거의 터무니없을 정도로 쉽습니다.

$my_file = file_get_contents("내파일이름"); 에코 $my_file;

이것이 최선의 선택은 아니지만 이 명령을 더 짧게 작성할 수 있습니다.

echo file_get_contents("파일명");

이 문서에서는 주로 로컬 파일 처리에 중점을 두지만 설명된 기능을 사용하여 다른 웹 페이지를 캡처, 표시 및 구문 분석할 수도 있다는 점은 주목할 가치가 있습니다.

echo file_get_contents("http://127.0.0.1/");

이 명령은 실제로 다음과 동일합니다.

$fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

여러분은 이러한 예를 보고 "정말 힘든 일이군요."라고 생각할 수도 있습니다. PHP 개발자는 귀하의 의견에 동의합니다. 따라서 위 명령을 다음과 같이 단축할 수 있습니다.

readfile("http://127.0.0.1/");

readfile 함수는 파일이나 웹 페이지의 전체 내용을 기본 출력 버퍼에 출력합니다. 기본적으로 이 명령은 실패할 때 오류 메시지를 표시합니다. 이 동작을 방지하려면(원하는 경우) 다음 명령을 시도해 보십시오.

@readfile("http://127.0.0.1/");

물론, 파일의 내용을 처리해야 한다면 file_get_contents가 반환하는 한 줄이 너무 많을 것입니다. 먼저 Split() 함수를 사용하여 여러 부분으로 분할할 수 있습니다.

$array = 분할("\n", file_get_contents("myfile"));

하지만 당신에게 딱 맞는 기능이 있다면 왜 이 모든 복잡성이 필요할까요? PHP file() 함수는 이 작업을 한 단계로 수행합니다. 즉, 요소가 파일의 라인인 문자열 배열을 반환합니다.

$array = file("myfile");

위의 두 예에는 약간의 차이가 있다는 점에 유의해야 합니다. Split 명령은 개행 문자를 제거하는 반면, file 명령은 fgets와 마찬가지로 배열 행을 개행 문자로 끝냅니다.

그러나 PHP의 기능은 위에서 설명한 것보다 훨씬 더 뛰어납니다. 단 하나의 parse_ini_file 명령을 사용하여 전체 .ini 파일을 PHP 스타일로 구문 분석할 수 있습니다. parse_ini_file 명령은 목록 4에 표시된 것과 유사한 파일에 적용됩니다.

목록 4. 예제 .ini 파일
; 댓글 이름 = "아서 왕" 퀘스트 = 성배 좋아하는 색을 찾기 위해 = 블루 사무엘 클레멘스 = 마크 트웨인 카린 존슨 = 우피 골드버그

다음 명령은 파일을 배열로 나타낸 다음 배열을 인쇄합니다.

$file_array=parse_ini_file("holy_grail.ini"); print_r $file_array;

결과는 다음과 같이 출력됩니다.

목록 5. 출력
배열( => 아서왕 => 성배를 찾으러 => 파란색 => 마크 트웨인 => 우피 골드버그)

물론 이 명령이 섹션을 병합했음을 알 수 있습니다. 이는 기본 작업이지만 부울 변수인 pars_ini_file의 두 번째 인수인 process_sections를 사용하여 쉽게 사용자 정의할 수 있습니다. process_sections를 True로 설정합니다.

$file_array =parse_ini_file("holy_grail.ini", true); print_r $file_array;

결과는 다음과 같습니다.

목록 6. 출력
배열( => 배열( => 아서 왕 => 성배를 찾기 위해 => 파란색) => 배열( => 마크 트웨인 => 우피 골드버그))

PHP는 데이터를 쉽게 구문 분석할 수 있는 다차원 배열에 넣습니다.

그러나 이것은 PHP의 파일 처리에 있어서 빙산의 일각에 불과합니다. tidy_parse_file 및 xml_parse와 같은 보다 복잡한 함수는 각각 HTML 및 XML 문서를 구문 분석하는 데 도움이 될 수 있습니다. 이러한 기능의 작동 방식에 대한 자세한 내용은 해당 섹션을 참조하세요. 이러한 파일 형식으로 작업할 경우 두 가지 모두 고려할 가치가 있지만 가능한 모든 파일 형식을 검토하는 대신에 대한 몇 가지 유용한 일반 규칙이 있는 이 문서의 내용을 자세히 살펴보는 것이 좋습니다. 지금까지 설명한 기능을 사용하여 작업합니다.

좋은 프로그래밍 스타일

프로그램의 모든 것이 의도한 대로 작동할 것이라고 가정하지 마십시오. 예를 들어, 찾고 있는 파일이 이동되었다면 어떻게 될까요? 권한 변경으로 인해 파일 내용을 읽을 수 없게 되면 어떻게 됩니까? file_exists, is_readable 메소드를 이용하면 파일의 존재 여부와 파일을 읽을 수 있는 권한을 미리 확인할 수 있습니다.

목록 7. file_exists 및 is_reader 사용
$filename = "내파일"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # 처리 fclose($fh); )

그러나 실제로는 이 프로그램이 작업에 너무 과할 수 있습니다. fopen에서 반환된 값을 처리하는 것이 더 간단하고 정확합니다.

if ($fh = fopen($filename, "r")) ( # fclose($fh) 처리; )

fopen이 실패하면 False를 반환하므로 파일을 열 수 있는 경우에만 파일이 처리됩니다. 물론 파일이 존재하지 않거나 읽을 수 없는 경우 반환 값은 음수일 것으로 예상할 수 있습니다. 따라서 이러한 점검은 모든 잠재적인 문제가 빠지는 함정입니다. 또는 파일을 열 수 없는 경우 프로그램을 종료하거나 오류 메시지를 표시할 수 있습니다.

fopen과 마찬가지로 file_get_contents, file 및 readfile 함수는 파일을 열거나 처리할 수 없으면 False를 반환합니다. fgets, fgetss, fread, fscanf 및 fclose 함수도 오류가 발생하면 False를 반환합니다. 물론, fclose를 제외하고는 아마도 반환된 결과를 이미 처리했을 것입니다. fclose 의 경우 파일 핸들이 제대로 닫히지 않으면 수행할 수 있는 작업이 많지 않으므로 fclose 의 반환 값을 확인하는 것은 일반적으로 과잉입니다.

선택은 당신의 것입니다

PHP에는 파일을 읽고 구문 분석하는 효율적인 방법이 부족하지 않습니다. fread와 같은 고전적인 기능은 대부분의 경우 안정적으로 서비스를 제공할 수 있습니다. 또는 작업을 완료하는 데 필요한 경우 readfile의 단순성에 더 매력을 느낄 수도 있습니다. 선택은 실제로 달성하려는 목표에 따라 달라집니다.

많은 양의 데이터를 처리하는 경우, file을 후속 분할 및 sprintf 명령과 함께 사용하는 것보다 fscanf가 더 유용하고 효율적이라는 것을 알게 될 것입니다. 그러나 단지 사소한 변경으로 많은 양의 텍스트를 표시하는 경우 file , file_get_contents 또는 readfile 함수를 사용하는 것이 더 합리적일 수 있습니다. 캐싱을 위해 PHP를 사용하거나 임시 프록시 서버를 생성할 때 이 솔루션이 아마도 정확할 것입니다.

PHP는 파일 작업을 위한 다양한 도구를 제공합니다. 각 도구에 대해 더 자세히 알아보고 작업 중인 프로젝트에 가장 적합한 도구가 무엇인지 알아보세요. 다양한 소프트웨어 도구가 제공되며, 이를 가장 효과적으로 사용하고 PHP를 사용하여 파일을 처리하는 즐거움을 누려보세요.

PHP에서는 종종 파일 생성을 처리해야 합니다... 매우 간단합니다. 디스크에 파일이 없고, 코드가 실행되고 파일이 나타난 다음, 이 파일을 다른 변수 또는 심지어 페이지의 모든 페이지로 읽을 수 있습니다. 인터넷에 글을 쓰고... 하지만 이를 위해서는 특별한 기능을 알아야 합니다... 이에 대한 자세한 내용은 이 기사에서...

실행 가능한 스크립트에서 PHP로 파일을 생성하려면 몇 가지 기능만 지정하면 됩니다.

예를 살펴보겠습니다.

$text = "파일에 쓸 텍스트 종류";
$fp = fopen("file.txt", "w");
fwrite($fp, $text);
fclose($fp);
?>

여기서 당신은 알아야합니다:

fopen()- 이 기능은 읽기, 쓰기 및 설명을 위해 파일을 엽니다.

이 설명(fopen 함수의 모드 매개변수)은 매우 중요합니다.

  • "아르 자형" - PHP에서 파일 열기 읽기 전용. 커서는 처음에 위치합니다.
  • "r+" - PHP에서 파일 열기 읽기와 쓰기를 위해. 커서는 처음에 위치합니다. !!! - r과 r+ 두 가지 모드를 사용하면 파일이 이미 생성되어 있어야 합니다. 그렇지 않으면 오류가 나타납니다. 경고: fopen(file.txt): 스트림을 열지 못했습니다: 해당 파일이나 디렉터리가 없습니다...), 우리는 읽기만 하거나 추가할 기회가 있습니다.
  • "" - 파일은 쓰기용으로만 열립니다. 파일 길이가 0으로 잘립니다. 즉, 덮어씁니다. 필요한 내용이 기록되고 커서가 처음에 배치됩니다.
  • "w+" - 쓰기 및 읽기를 위해 파일을 엽니다. 나머지는 "w" 모드와 동일합니다. !!! - 이 두 가지 모드에서 - 파일이 생성되지 않은 경우 - 파일을 생성하려는 시도가 이루어집니다!
  • "" - 쓰기용으로만 파일을 엽니다. "w"와 달리 이 옵션은 파일 내용을 덮어쓰지 않고 커서를 줄 끝에 놓고 추가하려는 내용을 끝에 추가합니다.
  • "에이+" - 쓰기 및 읽기를 위해 파일을 엽니다.

쓰기($fp, $text) - PHP에서 파일에 쓰기 위한 함수입니다. 즉, $text 변수에 있는 내용이 $fp 변수에 있는 파일에 기록됩니다.

fclose($fp) - $fp 변수에 쓴 파일을 닫는 기능입니다.

이제 PHP에서 쉽게 파일을 올바르게 생성하고, 읽고 편집할 수 있도록 열 수 있습니다.

열린 파일 작업에 유용한 PHP 추가 기능 및 기능:

동안(!feof($fp))(
$mytext = fgets($fp, 99);
$mytext를 에코하세요."
";
}

여기에서는 조건이 충족됩니다. "파일 끝에 도달할 때까지 다음을 수행하십시오." 동안(!feof($fp))

1. 기능 fgets($fp, 99) - 모든 콘텐츠를 99바이트 이상의 섹션으로 나눌 수 있으며 이를 더 명확하게 확인하기 위해 태그를 배치합니다.

이 문자열 함수 fgets(리소스 핸들 [, int length])는 기본적으로 길이 매개변수로 1024바이트(1킬로바이트)를 허용합니다. 지정하지 않으면 그렇게 됩니다. 이 매개변수는 PHP 4.2.0부터 선택사항입니다(오류 발생 시 FALSE를 반환).

파일 열기, 쓰기, 생성을 위한 추가 기능

함수 - 정수 읽기 파일(string filename [, bool use_include_path [, resources context]]) - 파일 전체를 읽습니다.

파일을 읽고 내용을 출력 버퍼에 씁니다. 그리고 출력된 바이트 수를 반환합니다. 오류가 발생하면 개가 사용되지 않으면 @readfile이 반환됩니다.

다음과 같은 일이 일어날 것입니다:

단어 끝에 태그가 있습니다.
.

비. 기능 - 배열 파일(string filename [, int use_include_path [, resources context]]), readfile 함수와 동일한 작업을 수행하지만 한 가지 예외는 파일 내용을 배열에 추가합니다.

이 방법으로 인터넷의 모든 페이지를 읽을 수 있습니다: $lines = file("http://site/"); foreach 함수를 사용하여 배열을 반복합니다.

3a. 문자열 함수 file_get_contents(string filename [, bool use_include_path [, resources context [, int offset [, int maxlen]]]] - 내용을 단일 문자열로 가져올 수 있습니다.

이것은 파일 읽기를 위한 보다 보편적인 PHP 함수로, 파일 함수와 유사하며 내용만 배열이 아닌 문자열로 반환되며 조건(어떤 바이트로 시작할 것인지)을 설정할 수 있습니다. 오프셋그리고 어디서 끝날지 - 맥렌. 실패하면 FALSE를 반환합니다.

중요한!!!- 이 경우 함수는 fopen(), fread() 및 fclose() 3개를 동시에 대체하여 표시를 제거합니다.

3b. int 함수 file_put_contents(문자열 파일 이름, 혼합 데이터 [, int 플래그 [, 리소스 컨텍스트]]) - fopen(), fwrite() 및 fclose() 함수에 대한 순차적 호출과 동일 - 작성된 바이트 수를 반환합니다.

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

file_get_contents — 파일의 내용을 문자열로 읽어옵니다.

설명

file_get_contents (문자열 $ 파일 이름 [, bool $use_include_path = 거짓 [, 리소스 $컨텍스트 [, int $offset = -1 [, 정수 $maxlen ]]]])

이 기능은 다음 기능과 유사합니다. 파일()유일한 차이점은 file_get_contents()지정된 오프셋에서 시작하여 최대 maxlen 바이트까지 문자열로 파일 내용을 반환합니다. 실패할 경우, file_get_contents()돌아올 것이다 거짓.

기능 사용 file_get_contents()이 기능은 운영 체제에서 지원하는 경우 성능을 향상시키기 위해 파일-메모리 매핑 기술을 사용하므로 파일의 전체 내용을 가져와야 하는 경우 가장 바람직합니다.

논평:

공백과 같은 특수 문자가 포함된 URI를 여는 경우 다음을 사용하여 URI를 인코딩해야 합니다. Urlencode().

매개변수 목록

읽고 있는 파일의 이름입니다.

Use_include_path

논평:

PHP 5부터 상수를 사용할 수 있습니다 FILE_USE_INCLUDE_PATH포함 경로에서 파일을 검색합니다.

문맥

함수를 사용하여 생성된 유효한 컨텍스트 리소스 stream_context_create(). 특별한 컨텍스트를 사용할 필요가 없으면 값을 전달하여 이 매개변수를 건너뛸 수 있습니다. 없는.

원본 스트림 읽기가 시작되는 오프셋입니다.

원격 파일 작업 시 오프셋 검색은 지원되지 않습니다. 로컬이 아닌 파일에서 오프셋을 찾으려는 시도는 작은 오프셋의 경우 작동할 수 있지만 버퍼링된 스트림에서 실행 중이므로 결과를 예측할 수 없습니다.

읽은 데이터의 최대 크기입니다. 기본적으로 파일 끝에 도달할 때까지 읽기가 수행됩니다. 이 설정은 필터가 있는 스트림에도 적용됩니다.

반환 값

이 함수는 읽은 데이터를 반환하거나 거짓오류가 발생한 경우.

주목

이 함수는 부울로 반환될 수 있습니다. 거짓및 캐스트되는 부울이 아닌 값 거짓. 자세한 내용은 부울 유형 섹션을 참조하세요. 이 함수에서 반환된 값을 확인하려면 === 연산자를 사용하세요.

오류

레벨 오류가 발생합니다 E_경고, filename 매개변수를 찾을 수 없는 경우 maxlength 매개변수가 0보다 작거나 스트림의 오프셋 offset 검색이 실패합니다.

예제 #1 웹 사이트 홈 페이지의 소스 코드 가져오기 및 표시

$homepage = file_get_contents("http://www.example.com/");
에코 $홈페이지 ;
?>

예제 #2 include_path에서 파일 찾기

// <= PHP 5
$file = file_get_contents("./people.txt" , true );
// > PHP 5
$file = file_get_contents("./people.txt" , FILE_USE_INCLUDE_PATH );
?>

예제 #3 파일 섹션 읽기

// 21번째 문자부터 14자를 읽습니다.
$section = file_get_contents("./people.txt" , NULL , NULL , 20 , 14 );
var_dump($섹션);
?>

이 예제를 실행한 결과는 다음과 같습니다.

string(14) "르 비조리 로"

예제 #4 스트리밍 컨텍스트 사용

// 스레드 생성
$opts = 배열(
"http" =>배열(
"방법" => "GET" ,
"header" => "수락 언어: en\r\n" .
"쿠키: foo=bar\r\n"
);

$context = stream_context_create ($opts);

// 위에서 설정한 HTTP 헤더를 사용하여 파일을 엽니다.
$file = file_get_contents ("http://www.example.com/" , false , $context );
?>

닫기_알림. PHP는 데이터 끝에 도달하는 순간 이를 "SSL: Fatal Protocol Error"로 보고합니다. 이 문제를 해결하려면 error_reporting을 E_WARNING을 제외하는 수준으로 설정해야 합니다. PHP 버전 4.3.7 이하에서는 래퍼를 사용하여 스트림을 열 때 서버 측에 문제가 있는 IIS가 있음을 감지할 수 있습니다. https://경고를 표시하지 않습니다. 당신이 사용하는 경우 fsockopen()창조를 위해 SSL://소켓에서 이 경고를 감지하고 억제하는 것은 귀하의 책임입니다.