>  기사  >  백엔드 개발  >  PHP 고급 기능 2: 파일 처리

PHP 고급 기능 2: 파일 처리

WBOY
WBOY원래의
2016-08-08 09:23:13779검색

PHP의 파일 처리도 매우 중요한 모듈입니다. 이 글의 주요 내용은 PHP의 파일 시스템에 대한 소개입니다.

파일 시스템의 용도

1. 프로젝트 처리와 파일 처리는 불가분의 관계입니다

파일은 장기간 데이터를 저장하는 데 사용할 수 있습니다

3.캐시 생성, 서버

파일 시스템 기능 사용법 상세 설명

기본 판단 기능

is_dir — 지정된 파일 이름이 디렉터리인지 확인

is_file — 지정된 파일 이름이 파일인지 확인

is_executable — 지정된 파일 이름이 실행 가능한지 확인

is_link — 지정된 파일 이름이 심볼릭 링크인지 확인

is_readable — 지정된 파일 이름을 읽을 수 있는지 확인

is_uploaded_file — 파일이 HTTP를 통해 업로드되었는지 확인 POST

is_writable — 주어진 파일 이름이 쓰기 가능한지 확인

is_writeable — is_writable의 별칭

2. 파일 관련 가져오기 information

file_exists — 파일 또는 디렉터리가 존재하는지 확인

fileatime — 파일의 마지막 액세스 시간을 가져옵니다.

filectime — 파일의 inode 수정 시간을 가져옵니다. file

filegroup — 파일 그룹 가져오기

fileinode — 파일의 inode 가져오기

filemtime — 파일 수정 시간 가져오기

fileowner — 파일 소유자 가져오기

fileperms — 파일 권한 가져오기

filesize — 파일 크기 가져오기

filetype — 파일 형식 가져오기

아래 예를 작성하고 파일 이름을 전달하고 자세한 정보를 인쇄해 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

    함수getFileInfo($파일 이름){

        if(!file_exists( $파일 이름)){

            에코'文件'.($파일 이름).' 불存재';

          반환;

       }

         if(is_file($파일 이름)){

           에코$파일 이름.'是一个文件';

        }

        if(is_dir($파일 이름)){

           에코$파일 이름.'是一个目录';

        }

        if(실행 가능($파일 이름)){

            에코$파일명.'是可执行文件';

        }else{

            에코$ 파일 이름.'不是可执行文件';

        }

        if(읽을 수 있음($파일 이름)){

            에코$파일 이름.'是可读的';

        }else{

            에코 $파일 이름.'不是可读的';

        }

        if(쓰기 가능($ 파일명)){

          에코$파일 이름.'是可写入的';

        }그 외{

            에코$파일 이름.'不是可写入的';

        }

echo' 파일 '.$filename.'의 크기는 '. getFileSize(파일 크기($파일 이름)).'';

 echo''.$파일 이름.' 형식입니다. '.파일 형식($파일 이름).'';

  echo'파일의 소유자는 '.$filename.'은 '.fileowner ($파일명).'';

 

에코' '.$filename.' 파일의 마지막 액세스 시간은 '.getTime(fileatime입니다. ($파일 이름)).'';

            🎜>echo

' 파일 '.$filename.'의 inode는 '.fileinode입니다. ( >$파일 이름).'';  

에코

'파일'.$filename.'의 수정 시간은 '.getTime(filemtime($파일 이름)).'';

echo

' file '.$filename.'의 권한은 '.fileperms( $파일 이름).''; 

}

함수

getTime($시간){         

반품

날짜 ('Y-m-d H:i:s',$시간);  

}

 

기능

getFileSize($크기){ 

$

dw='B';  

if

($size>=전력 (2,40)){                                                     >/

(2,40),2);                                                                         >  }else

if($size> ;=전력(2,30)){

           $크기=둥근($크기/(2 ,30),2);

            $dw='TB';

        }elseif($size>=전력(2 ,20)){

           $크기=둥근( $사이즈/마력(2,20),2);

            $dw='GB';

        }elseif($크기>=(2,10)){

            $크기=둥근($크기/(2,10),2);

           $dw ='MB';

        }

        반품$size.$dw;

    }

    getFileInfo('1.php');

실행 결과

1.php는 파일입니다
1.php는 실행 파일이 아닙니다
1.php는 읽을 수 있습니다
1.php는 쓸 수 없습니다
파일 1.php의 크기는 2MB입니다
파일 1.php의 유형은 file입니다
파일 1.php의 소유자는 1000입니다
파일 1. PHP의 마지막 액세스 시간은 2015-03-04 12:58:33
파일 1.php의 inode는 536185입니다
파일 1.php의 수정 시간은 2015-03-04 12:58:32입니다.
1.php 파일의 권한은 33204입니다

3. 파일 경로 관련 기능

상대 경로: 현재 디렉터리의 상위, 하위 디렉터리에 대한 상대 경로

. 현재 디렉터리
.. 이전 디렉터리

경로 구분 기호

linux/Unix “/”
windows “ ”
어떤 운영체제이든 상관없이 PHP의 디렉터리 구분 기호는 /(Linux)를 지원합니다.

절대 경로: 운영체제의 루트나 문서 루트 디렉터리를 참조할 수 있습니다.

서버(PHP 파일처리 함수를 통해 실행) 경로에서 실행되는 경우 "루트"는 운영체제의 루트를 의미합니다
프로그램이 다운로드된 클라이언트인 경우 서버의 파일에 액세스할 때 Apache를 통해서만 해당 파일에 액세스할 수 있습니다. "루트"는 문서 루트 디렉터리

세 가지 관련 함수

basename — 경로의 파일 이름 부분을 반환합니다.

dirname — 경로의 디렉터리 부분을 반환합니다.

pathinfo — 파일 경로 정보를 반환합니다.

예를 들어 다음 예

1
2
3
4
5
6
7
8

    $url1="./aaa/bbb/index.php";

    $url2="../www/yyy/login.rar";

    $url3="c:/appserv/www/demo.html";

    $url4="http://localhost/yyy/www.gif";

    echo basename($url1);

    echo basename($url2);

    echo basename($url3);

    echo basename($url4);

1
2
3
4
5
6
7
8
 $url1="./aaa/bbb/index.php"; $url2="../www/yyy/login.rar";  $url3="c:/appserv /www/demo.html"; $url4= "http://localhost/yyy/ www.gif";  echo 기본 이름( $url1); echo 기본 이름($url2); echo 기본 이름($url3);  echo 기본 이름($url4 );

결과 실행

index.php
login.rar
demo.html
www.gif

basename 함수는 마지막 항목인 파일 이름을 반환하는 것을 볼 수 있습니다.
dirname의 사용법을 살펴보겠습니다

1
2
3
4
5
6
7
8

    $url1="./aaa/bbb/index.php";

    $url2="../www/yyy/login.rar";

    $url3="c:/appserv/www/demo.html";

    $url4="http://localhost/yyy/www.gif";

    echo dirname(dirname($url1));

    echo dirname($url2);

    echo dirname($url3);

    echo dirname($url4);

1
2
3

4
5
6

7

8

 $url1

=

"./aaa/bbb/index.php";

 

$
url2

=

"../www/yyy/login.rar"

;

 

$
url3

=

1
2
3
4
5

touch("./php.apahce");//创建文件

unlink("C:/AppServ/www/xsphp/apache.php");  //删除文件

rename("./test.txt","d:/test2.txt");    //重命名文件

copy("cache.txt","./cache5.txt");   //复制文件

chmod("a.txt",755);   //设置文件权限

"c:/appserv/www/ 데모.html"; $url4= "http ://localhost/yyy/www.gif"; 에코 디렉토리 이름 (디렉토리 이름($url1));  echo dirname($url2) ; echo dirname( $url3); echo 디렉토리 이름($url4);
결과 실행./aaa.. /www /yyyc:/appserv/wwwhttp://localhost/yyydirname 함수는 여러 수준의 중첩에서 사용될 수 있습니다. , 해당 항목이 위치한 경로, 즉 마지막 항목을 제외한 모든 항목이 반환됩니다. 또한 파일명과 확장자를 포함하여 pathinfo의 위의 모든 정보를 얻을 수 있습니다. 예를 들면 다음과 같습니다. 결과 배열( [dirname] => ../www/yyy [basename] => login.rar [extension] => rar [filename] => login ) 4. 파일 생성, 삭제 및 수정터치 — 파일 생성 연결 해제 — 파일 삭제 이름 바꾸기 — 이름 바꾸기 파일 또는 디렉터리복사 — 파일 복사예를 들어 다음 예는
1
2
3
4
5
터치("./php.apahce"); //파일 생성 연결 해제("C: /AppServ/www/xsphp/apache.php"); //파일 삭제 이름 바꾸기("./test.txt","d:/test2.txt") ;  //파일 이름 바꾸기 복사("cache.txt","./cache5.txt"); // 파일 복사chmod(" a.txt" ,755); //파일 권한 설정

권한 관련 콘텐츠

rwx는 이 파일의 소유자를 나타냅니다. r 읽기 w 쓰기 x 실행
rwx는 이 파일의 소유자 그룹을 나타냅니다. r 읽기 w x 쓰기 및
rwx 실행 다른 사용자는 이 파일에 대한 권한이 있습니다. r read w write >파일 이름을 입력하고 파일의 텍스트 정보를 직접 가져옵니다. 반환되는 내용은 파일의 텍스트입니다.

예를 들어

1

2
3

4

1
2
3
4

$str=file_get_contents("1.txt");

echo$str;

?>

$ str=file_get_contents("1.txt");

에코$str ;

?>

은 1.txt 파일의 콘텐츠를 직접 열고 파일의 텍스트 정보를 반환합니다.

파일이 없으면

경고: file_get_contents(2.txt): 스트림을 열지 못했습니다: 해당 파일 또는 디렉터리가 없습니다

라는 메시지가 표시됩니다.

마찬가지로 해당 파일은 원격 파일일 수도 있습니다. 예를 들어 http://www.qq.com

에 매개변수를 전달하면 Tencent의 홈페이지 콘텐츠가 표시될 수 있습니다.

1
2
3

echofile_put_contents("2.txt",'abcd');

?>

단점: 내용의 지정된 부분을 읽을 수 없고, 한꺼번에 읽을 수 없습니다. 2.file_put_contents(filename,content)

파일에 쓰기, filename은 작성된 파일의 파일 이름, content는 작성된 내용, 반환 값은 문자 길이입니다. 성공적으로 작성되었습니다.

1

2

3

1
2
3
4
5

$str=file("1.txt");

var_dump($str);

echocount($str);

?>

<🎜><🎜>echofile_put_contents("2.txt",'abcd');<🎜><🎜>?> 2 .txt 파일이 없으면 파일이 생성되고 abcd 문자열이 기록되며 문자열 길이인 4가 반환됩니다. 파일이 존재하면 파일이 비워지고 문자열이 기록되고 기록된 길이가 반환됩니다. 단점: 추가 모드에서는 파일을 쓸 수 없습니다. 3.file(filename)file은 파일을 직접 열고, 반환된 결과는 배열이며, 각 줄은 배열의 요소입니다. 즉, 행 수를 얻으려면 배열 크기만 출력하면 됩니다. 예를 들어
1
2
3
4
5
< 🎜><🎜>$str=파일("1.txt");<🎜><🎜> var_dump ($str);<🎜><🎜> 에코횟수($str);< /스팬><🎜><🎜>?>

은 행 내용을 배열 형태로 가져와서 행 수를 출력할 수 있습니다.

단점: 지정한 부분의 내용을 읽을 수 없습니다.

4.fopen(filename,mode)

filename은 파일 이름으로, 경로와 이름을 합친 것일 수도 있고 원격 서버 파일일 수도 있습니다.

모드는 파일을 여는 방식입니다

r, 읽기 전용 모드로 파일을 엽니다
r+, 읽는 것 외에도 쓸 수도 있습니다.
w, 쓰기 전용 모드로 엽니다. 파일이 없으면 파일을 만들고 내용을 씁니다. 파일이 존재하고 원래 내용이 있으면 원본 파일의 내용이 모두 지워진 다음 작성됩니다( 기존 중요 파일 열기)
w+, fwrite로 쓰는 것 외에도 쓰기 전용 모드로 열리는 fread
a를 읽을 수도 있습니다. 파일이 없으면 파일이 생성되고 내용이 저장됩니다. 해당 파일이 존재하고, 원본 내용이 있는 경우 원본 파일 내용은 삭제되지 않으며, 원본 파일 내용 끝에 (추가)
a+, 글쓰기 외에 새로운 내용이 작성됩니다. fwrite를 사용하면 fread를 읽을 수도 있습니다
b, 파일(그림, 영화) 열기
바이너리 모드에서

텍스트 모드에서 파일 열기 참고:

r+에는 파일 헤더부터 시작하여 읽기 및 쓰기 속성이 있습니다. 원본 파일에 덮어쓰지 않은 내용을 유지합니다.

w+에는 쓰기 중에 파일이 존재하면 지워집니다. 그리고 처음부터 작성했습니다.

은 파일 리소스를 반환합니다.

5.fwrite(file,content)

파일 쓰기 함수, file은 파일 리소스, fopen 사용 획득 방법 기능, 내용은 작성된 내용입니다. fputs 함수와 동일합니다.

예를 들어

1
2
3
4
5
6
7
8
9

php

$file=fopen("1.txt","r+");

$result=fwrite($file,"xx");

if($result){

echo"Success";

}else

echo"Failed";

}

?>

1
2
3

4
5

6 7

8
9

1
2
3
4
5

$file=fopen("1.txt","r");

$content=fread($file,filesize("1.txt"));

echo$content;

?>

php<🎜><🎜><🎜><🎜><🎜><🎜>$file < 🎜><🎜>=<🎜><🎜>fopen<🎜>(<🎜>"1.txt"<🎜>,<🎜>"r+"<🎜>)<🎜>;<🎜><🎜> < 🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>$결과<🎜><🎜> = <🎜><🎜>fwrite<🎜>(<🎜>$file<🎜>,<🎜>"xx"<🎜>)<🎜>;<🎜><🎜><🎜><🎜><🎜> < 🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>if<🎜>(<🎜>$result<🎜>)<🎜> { <🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>에코<🎜><🎜>"성공"<🎜>;<🎜><🎜 > <🎜><🎜><🎜><🎜><🎜><🎜><🎜>}<🎜>그밖에<🎜><🎜><🎜><🎜><🎜><🎜><🎜>에코< 🎜 ><🎜>"실패"<🎜>;<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>}<🎜><🎜><🎜>< 🎜 ><🎜>?>
그런 다음 처음부터 리소스를 작성하고, 즉, 처음 두 문자는 xx6으로 설정됩니다. fread(file,size)는 파일의 지정된 부분의 길이를 읽어오는 파일 리소스입니다. fopen에 의해 반환되며 크기는 읽은 문자의 길이입니다. 예를 들어
1
2
3
4
5
< ? php<🎜><🎜><🎜><🎜><🎜>$file<🎜><🎜>=<🎜><🎜>fopen<🎜>(<🎜>"1.txt"<🎜>,< 🎜 >"r"<🎜>)<🎜>;<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>< 🎜 ><🎜><🎜><🎜>$content<🎜><🎜>=<🎜><🎜>fread<🎜>(<🎜>$file<🎜>,<🎜>filesize<🎜>(<🎜 > "1.txt"<🎜>)<🎜>)<🎜>;<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜 > <🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>에코<🎜><🎜>$content<🎜>;<🎜><🎜><🎜><🎜> < 🎜><🎜><🎜><🎜>?>

그러나 위의 파일 크기 방법은 로컬 파일 크기만 얻을 수 있으며, 원격 파일을 읽으려면 다른 방법이 필요합니다.

예를 들어

1
2
3
4
5
6
7
8

$file=fopen("http://www.qq.com","r");

$str="";

while(!feof($file)){ //判断时候到了文件结尾

$str.=fread($file,1024);

}

echo$str;

?>

1
2
3

4
5

6
7
8

1
2
3
4
5
6
7
8
9
10

 

$file=fopen("http://www.qq.com","r");

$str="";

$count=0;

while(!feof($file)){

$str.=fgets($file);

$count++;

}

echo$count;

?>

<🎜><🎜>$file=fopen("http:// www .qq.com","r");<🎜><🎜>$str=" " ;<🎜><🎜>동안( !feof($file)){ //파일 끝에 도달할 시간을 판단 스팬>< /span><🎜>< 🎜>$str.=fread($file,1024);<🎜><🎜> }<🎜><🎜>에코$str;< /span> <🎜><🎜>?>
7.fgets(file)file은 한 번에 한 줄씩 읽는 파일 리소스입니다. 예를 들어 Tencent의 홈페이지에 몇 줄이 있는지 읽습니다.
12
3
4
5
6
7
8
9
10
<🎜><🎜> $file=fopen("http://www.qq.com","r"); <🎜><🎜>$str="";< /span><🎜><🎜>$count=0;<🎜><🎜>동안(!feof( $file)){< /span><🎜><🎜>$str.=fgets($file); <🎜><🎜>$count++;<🎜>< 🎜>}<🎜><🎜>에코$count; <🎜><🎜>?>

은 결과 8893을 출력합니다. 소스 파일을 확인하여 총 줄 수를 확인하고 확인할 수 있습니다.

7.fgetc(file)

file은 파일 리소스이며 매번 문자를 읽는 fgets 메서드와 매우 유사합니다. 예를 들어 Tencent의 홈페이지에 몇 개의 문자가 있는지 읽습니다.

1
2
3
4
5
6
7
8
9
10

$file=fopen("http://www.qq.com","r");

$str="";

$count=0;

while(!feof($file)){

$str.=fgetc($file);

$count++;

}

echo$count;

?>

12
3
4
5
6
7
8
9
10
<🎜><🎜> $file=fopen("http://www.qq.com","r"); <🎜><🎜>$str="";< /span><🎜><🎜>$count=0;<🎜><🎜>동안(!feof( $file)){< /span><🎜><🎜>$str.=fgetc($file); <🎜><🎜>$count++;<🎜>< 🎜>}<🎜><🎜>에코$count; <🎜><🎜>?>

위 코드는 모든 문자를 출력합니다.

8.ftell(file)

ftell은 현재 읽은 파일의 포인터 위치를 반환하고, file은 파일 리소스이며 fopen이 반환하는 객체입니다.

9.fseek(file,offset,whence)

file

파일 시스템 포인터는 일반적으로 fopen()에 의해 생성되는 리소스입니다.

오프셋

오프셋.

파일 끝 이전 위치로 이동하려면 오프셋에 음수 값을 전달하고 whence를 SEEK_END로 설정합니다.

whence

SEEK_SET – 위치를 오프셋 바이트와 동일하게 설정합니다.

SEEK_CUR – 위치를 현재 위치에 오프셋을 더한 값으로 설정합니다.

SEEK_END – 위치를 파일 끝에 오프셋을 더한 값으로 설정합니다.

10.rewind($file)

파일 헤더로 돌아가서, file은 파일 리소스입니다.

예:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

php

$file=fopen("1.txt", "r");

에코ftell($file)."
"; //읽기 전 포인터 위치 출력

에코fread($file,10)."
";//10자 읽기, 포인터를 10단위 이동

에코ftell($file)."
";//읽은 후 현재 포인터 위치 출력

fseek($file, 20,SEEK_CUR);//현재 포인터가 20단위 앞으로 이동합니다

에코ftell($file )."
";//이동 후 포인터 위치 출력

에코fread($file ,10)."
";//읽은 10자를 출력

에코ftell($file)."
";//10자를 읽은 후 포인터 출력 위치

fseek ($file,-20,SEEK_END);//포인터가 끝으로 이동합니다. 파일 처음 20자

에코ftell($file)."
";/ /이동 후 포인터 위치 출력

에코fread($file,10)."
" ;//파일 끝 20자를 출력

에코ftell($file)."< br>";//10자를 읽은 후 포인터 위치 출력

되감기($file);//답글 파일헤더 바로가기

에코ftell($file)."
"; //이동 후 포인터 위치 출력

?>

실행 결과:

0
cuiqingcai
10
30
uiqingcai.
40
374
i.comcuiqi
384
0

11.flock(file,Operation[,wouldblock])

file

파일 리소스 포인터. 일반적으로 fopen()에서 생성되는 리소스(리소스)입니다.

작업

작업은 다음 값 중 하나일 수 있습니다.

LOCK_SH는 공유 잠금(읽기 프로그램)을 획득합니다.

LOCK_EX는 배타적 잠금을 획득합니다(프로그램 작성.

LOCK_UN은 잠금(공유 또는 배타적)을 해제합니다.

flock()을 원하지 않는 경우 잠긴 동안 실행됩니다. 차단되면 LOCK_NB입니다(Windows에서는 아직 지원되지 않음).

차단

잠금이 차단되면(EWOULDBLOCK 오류 코드의 경우) 선택적 세 번째 매개변수 (Windows에서는 지원되지 않음)

예를 들어

1
2
3
4
5
6
7

php

$file=fopen("1.txt","a");

if(flock($file,LOCK_EX)){

fwrite($file,"xxx");

flock($file,LOCK_UN);

}

?>

1
2
3

4
5

6
7
php<🎜> <🎜><🎜><🎜><🎜><🎜>$file<🎜><🎜>=<🎜><🎜>fopen<🎜>(<🎜>"1.txt"<🎜 >,<🎜> "a"<🎜>)<🎜>;<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>< 🎜><🎜> <🎜><🎜><🎜>if<🎜>(<🎜>flock<🎜>(<🎜>$file<🎜>,<🎜>LOCK_EX<🎜>)<🎜>)<🎜 >{<🎜> <🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>fwrite<🎜 >(<🎜> $file<🎜>,<🎜>"xxx"<🎜>)<🎜>;<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>< 🎜><🎜> <🎜><🎜>군집<🎜>(<🎜>$file<🎜>,<🎜>LOCK_UN<🎜>)<🎜>;<🎜><🎜><🎜><🎜>< 🎜><🎜> <🎜><🎜><🎜><🎜><🎜><🎜>}<🎜><🎜><🎜><🎜><🎜>?> 위에서는 PHP 고급 기능 2, 파일 처리에 대한 내용을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.