파일 및 디렉터리 작업
PHP는 로컬 서버의 파일 및 디렉터리를 처리하는 데 매우 편리하지만 때로는 권한 및 경로 관련 문제가 발생할 수 있습니다
1.파일을 엽니다
리소스 fopen ( 문자열 파일 이름, 문자열 모드 [, bool use_include_path [, 리소스 zcontext]] )
$handle = fopen(filename,mode)//파일을 열고 이 파일의 리소스를 나타내는 핸들을 반환합니다.
파일 이름은 상대 경로나 절대 경로 또는 네트워크 프로토콜 모드를 사용할 수 있습니다. 열기 모드는 rr ww aa xx b
입니다.
바이너리 파일로 작업할 때 'b' 플래그를 지정하지 않으면 손상된 이미지 파일과 rn 문자의 이상한 문제를 포함하여 몇 가지 이상한 문제가 발생할 수 있습니다.
이식성의 이유로 fopen()으로 파일을 열 때 항상 'b' 플래그를 사용하는 것이 좋습니다.
다음은 파일을 여는 여러 가지 방법입니다
$fp = @fopen('log.txt',"rb")
$fp = @fopen('../log.txt',"rb")
$fp = @fopen("http://www.runer.com.cn/default.htm","rb");//ftp 및 ghoper와 같은 프로토콜을 사용할 수도 있습니다. php.ini의 허용_url_fopen 옵션.
파일을 활성화해야 합니다.
//////////////////////////////코드 부분/////////////////// /// /////////////////////
$filename1 = "userinfo.txt";//이 파일은 디렉터리 또는 include_path에 존재합니다
$filename2 = "test.txt";//이 파일은 디렉터리나 include_path에 존재하지 않습니다
$resource1 = fopen($filename1,"rb")
@$resource2 = fopen($filename2,"rb");//이 파일이 디렉터리에 존재하지 않고, 포함된 파일의 경로를 찾는 데 include_path 또는 include_path가 사용되지 않기 때문에 이 작업에서는 오류가 보고됩니다. 오류 억제기 @를 사용하면 브라우저가 오류 메시지가 출력되지 않도록 강제할 수 있습니다.
if($resource1)
echo "{$filename1} 파일을 성공적으로 열었습니다.
if(!@fopen($filename2,"r"))
echo "{$filename2} 파일을 열지 못했습니다.
";
///////////////////////////////////////////////// /// /////////////////////////
--------출력 결과--------------- - ------------
userinfo.txt 파일을 성공적으로 열었습니다
------------------------------------- ------------------
2. 파일을 사용한 후에는 운영 체제가 파일의 모든 내용이 버퍼에서 하드 디스크로 올바르게 플러시되도록 PHP에 파일이 사용되었음을 명시적으로 알려야 합니다.
fclose()를 사용하여 파일을 닫습니다.
bool fclose (리소스 핸들)//열린 파일 포인터 닫기
3. 파일 읽기. fopen 함수의 모드 매개변수는 읽기를 허용합니다.
string fgets( int handler [, int length] )는 파일 포인터에서 한 줄을 읽습니다. 바이너리 파일에서 fgets를 시도하면 예측할 수 없는 결과가 발생합니다.
길이를 지정하지 않으면 기본적으로 1K 데이터를 읽고 개행 문자(반환 값에 포함), EOF 또는 길이가 나타나면 중지됩니다. - 1바이트를 읽었습니다.
string fgetss( 리소스 핸들 [, int length [, string allowed_tags]] )는 파일 포인터에서 한 줄을 읽고 HTML 태그를 필터링합니다.
fgetc()는 단일 문자를 읽습니다
fread()는 임의의 바이너리 데이터를 읽습니다
//////////////////////////////코드 부분/////////////////// /// /////////////////////
$handle = fopen("test.jpg", "rb")
$c
while (!feof($handle)) {
$contents .= @fread($handle, 8192);//읽기를 반복하고 큰 파일로 병합
}
fclose($핸들)
///////////////////////////////////////////////// /// /////////////////////////
--------출력 결과--------------- - ------------
------------------------------------- ------------------
4. 파일 읽기 상태 확인
각 파일 핸들에는 fopen 함수의 모드 매개변수에 따라 파일에서 다음 작업이 발생할 위치를 나타내는 파일 포인터 또는 커서가 있습니다.
파일 포인터는 처음에 파일의 시작 부분(0) 또는 파일의 끝 부분에 위치합니다
feof()는 파일이 끝에 도달했는지 여부를 확인할 수 있습니다(끝에 도달한 후 함수는 TRUE를 반환합니다)
filesize() 함수는 파일의 크기를 반환합니다. 5. 파일 쓰기
fwrite() 함수는 파일 쓰기를 실행합니다
//////////////////////////////코드 부분/////////////////// /// /////////////////////
$파일명 = '테스트.txt'
$somec;
// 먼저 파일이 존재하고 쓰기 가능한지 확인해야 합니다.
if (is_writable($filename)) {
// 이 예에서는 추가 모드를 사용하여 $filename을 엽니다.
// 따라서 파일 포인터는 파일의 시작 부분에 있게 됩니다.
// fwrite()를 사용할 때 $somecontent가 기록되는 곳입니다.
if (!$handle = fopen($filename, 'a')) {
echo "$filename 파일을 열 수 없습니다.";
종료
}
// 우리가 연 파일에 $somecontent를 씁니다.
if (fwrite($handle, $somecontent) === FALSE) {
echo "$filename 파일에 쓸 수 없습니다.";
종료
}
echo "$filename 파일에 $somecontent를 성공적으로 기록했습니다.";
fclose($핸들)
} 다른 {
}
echo "$filename 파일에 쓸 수 없습니다";
///////////////////////////////////////////////// /// /////////////////////////
--------출력 결과--------------- - ------------
이 텍스트를 파일에 성공적으로 추가하고 test.txt 파일에 썼습니다.
------------------------------------- ------------------
바이너리 데이터의 경우 디스크에 기록된 데이터 바이트 수를 포함하는 세 번째 매개변수를 지정해야 합니다.
$result = @fwrite($fp,$binary_data,mb_strlen($binary_data,'8bit'));
|
||
|