ホームページ  >  記事  >  バックエンド開発  >  PHP の高度な機能 2: ファイル処理

PHP の高度な機能 2: ファイル処理

WBOY
WBOYオリジナル
2016-08-08 09:23:13817ブラウズ

PHP のファイル処理も非常に重要なモジュールです。この記事の主な内容は、PHP のファイル システムの紹介です。

ファイルシステムの目的

1. プロジェクト処理はファイル処理と切り離せない

2. ファイルはデータを長期間保存するために使用できます

3. サーバーでファイル操作を実行します ファイルシステム関数 使い方詳細

1. 基本判定関数

is_dir — 指定されたファイル名がディレクトリかどうかを判定

is_file — 指定されたファイル名がファイルかどうかを判定

is_executable — 指定されたファイル名がディレクトリであるかどうかを判定実行可能です

is_link — 指定されたファイル名がシンボリック リンクかどうかを判断します

is_readable — 指定されたファイル名が読み取り可能かどうかを判断します

is_uploaded_file — ファイルが HTTP POST 経由でアップロードされたかどうかを判断します

is_writable — 指定された

ファイルを判断しますname 書き込み可能かどうか

is_writeable — is_writable のエイリアス

2. ファイル関連の情報を取得する

file_exists — ファイルまたはディレクトリが存在するかどうかを確認する

fileatime — ファイルの最終アクセス時刻を取得する

filectime — ファイルの変更時刻を取得します

filegroup — ファイルのグループを取得します

fileinode — ファイルの i ノードを取得します

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($ファイル名) ){

f;

} if(is_file ($ファイル名)){

はファイルです;

「はディレクトリです」 $ファイル名)){ echo

$

filename.. $filename.' は実行可能ファイルではありません ';

if (is_readable

(

$ファイル名)) { hecho $ ファイル名

.

」読めます '; }} Lse {

echo

$

filename.' は読み取れません'; ($ ファイル名)){

は書き込み可能です';

} } Lse {

エコー $ ファイル名..

echo'ファイル「.$filename.」のサイズは「.getFileSize(filesize($filename))」です;

"File". $ファイル名のタイプ.' は '.ファイルタイプ( $ ファイル名).''; echo

'ファイル'.$ファイル名.'の所有者は '.fileowner($filename).''です。ファイル「.$filename.」の最終アクセス時刻は「.getTime」です(fileatime($ファイル名)).'';

のオードは「」です。 fileinode($ファイル名) .'';

「ファイル」の変更時刻.$ファイル名.' は' .getTime(filemtime($ファイル名).'';

echo' ファイル '.$filename.' の権限は '.fileperms($filename).'';

}

機能getTime($ 時間){ return date('Y-m-d',$time

)

;

} 関数getFileSize ($サイズ){

($サイズ

>=

pow (2,40

)

){

(

$サイズ/ パウ(2,40) )2);

dw ='PB';

サイズ>=pow(2, 30)){

$サイズ=round($size/pow(2,30),2);

$dw='TB';

}elseif($サイズ> ;=pow(2,20)){

$サイズ=ラウンド($ サイズ/パウ(2,20),2);

$dw ='GB';

}elseif($サイズ>= パウ(2,10) ){

$サイズ=round($ サイズ/パウ(2,10 $$$ dw='MB'; } 返品

$サイズ.$dw;

}

getFileInfo ('1.php');

実行結果

1.phpはファイルです
1.phpは実行可能ファイルではありません
1.phpは読み取り可能です
1.phpは書き込み可能ではありません
ファイル1.phpのサイズは2MBです
タイプファイル 1.php のファイルです
ファイル 1.php の所有者は 1000 です
ファイル 1.php の最終アクセス時刻は 2015-03-04 12:58:33 です
ファイル 1.php の i ノードは 536185 です
ファイル1.phpの更新時刻は2015-03-04 12:58:32です
ファイル1.phpのパーミッションは33204です

3.ファイルパス関連機能

相対パス: 上位ディレクトリと下位ディレクトリからの相対パス現在のディレクトリ

. 現在のディレクトリ
... 前のレベルのディレクトリ

パス区切り記号

linux/Unix “/”
windows “”
どのオペレーティングシステムでも PHP のディレクトリ区切り記号は / (Linux)

絶対パス: オペレーティング システムのルートを参照することも、Web サイトが保存されているドキュメント ルート ディレクトリを参照することもできます

サーバーで実行される場合 (PHP ファイル処理 関数によって実行される) 、パス「ルート」はオペレーティング システムのルートを指します
プログラムがダウンロードされたクライアントの場合、サーバー内のファイルにアクセスするときは、Apache 経由でのみアクセスできます。「ルート」はドキュメントのルート ディレクトリも指します。

3つの関連関数

basename — パスの

ファイル名部分を返します

dirname — パスのディレクトリ部分を返します

pathinfo — ファイルパス情報を返します

次の例

1

2
3
4
5
6
7
8

; $url2=

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

; $url3=

"c:/appserv/www/demo .html"

; エコーベース名 (

$

url1);

echo basename($url2);

echo basename ($url3);

エコー ベース名($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";

echodirname(dirname($url1));

echo dirname($url2);

echo dirname( $url3);

エコー dirname($url4);

ランニング結果

./aaa
../www/yyy
c :/appserv/www
http://localhost/yyy

dirname 関数は複数レベルのネストで使用できることがわかります。返されるのは、それが配置されているパス、つまりすべての項目です。最後の項目を除いて。

さらに、

ファイル名と拡張子を含む上記のパス情報のすべての情報を取得できます

例えば、次の結果は

Array ( [dirname] => ../www/yyy) [ベース名] =>login.rar [拡張子] =>rar [ファイル名] =>ログイン)

タッチ — ファイルを作成

ファイルを削除
rename — ファイルまたはディレクトリの名前を変更します

copy —

ファイルをコピーします

たとえば、次の例は

12touch

3

4
5
(

"./php.apahce"

);//ファイルを作成リンク解除( 「C:/AppServ/www/」 xsphp/apache.php"

)

; //ファイルを削除("./test.txt",

"d:/test2.txt") ); // ファイルの名前を変更しますcopy("cache.txt",

"./cache5.txt") ;/ /ファイルをコピー chmod("a.txt",

755

); //ファイルのアクセス許可を設定します

権限関連コンテンツ

rwx はこのファイルの所有者を表します r 読み取り w 書き込み x 実行
rwx はこのファイルの所有者のグループを表します r 読み取り w 書き込み x 実行
rwx このファイルに対する他のユーザーの権限 r 読み取り書く

例:

1

23ファイルが存在しない場合は、プロンプトが表示されます

4

$str

=

file_get_contents

( " 1.txt");echo$str;

?>

は、1.txt ファイル内のコンテンツを直接開き、ファイル内のテキスト情報を返します。

警告: file_get_contents(2.txt): ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません

同様に、ファイルはリモート ファイルである場合もあります。 、パラメータは http://www.qq.com に渡されます

は Tencent のホームページ コンテンツを表示できます。

欠点: コンテンツの指定された部分を読むことができず、すべてを一度に読むことができません。

2. file_put_contents(filename,content)

ファイルを書き込みます。filename は書き込まれたファイルのファイル名、content は書き込まれた内容、戻り値は正常に書き込まれた文字の長さです。

1

2

3欠点: 追加モードではファイルを書き込むことができません。 3.file(filename)

echo

file_put_内容("2.txt"

,

'abcd ' );?>

2.txt ファイルが作成されますファイルが存在し、文字 abcd を書き込みます。文字列。文字列の長さである 4 を返します。 ファイルが存在する場合、ファイルは空になり、文字列が書き込まれ、書き込み長が返されます。
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、ファイルをバイナリ モード (写真、ムービー) で開きます
t、ファイルをテキスト モードで開きます

注:

r+ には読み取りおよび書き込み属性があり、ファイルの先頭から書き込みを開始し、元のファイルで上書きされていないコンテンツ;

w+ には読み取りおよび書き込み属性があり、書き込み時にファイルが存在する場合、そのファイルはクリアされて最初から書き込まれます。

ファイルリソースを返します

5.fwrite(file,content)

ファイル書き込み関数、fileはfopen関数で取得したファイルリソース、contentは書き込み内容です。 fputs 関数と同じです。

たとえば

1
2
3
4
5
6
7
8
9

php

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

$結果 =fwrite($file,"xx");

if ($結果){

エコー「成功」; 「失敗」;

}

?>

次に、リソースを最初から書き込みます。つまり、最初の 2 文字を xx

6 に設定します。 fread(file,size)read ファイルの指定された部分の長さ、file はファイル リソース、返されるオブジェクトfopen によって、size は読み取られた文字の長さです。

例:

12

3

4

5

$file

=

fopen

(
"1.txt"

,

"r")
;

$content=f読み取り ($ファイル,)ファイルサイズ ("1.txt"));

echo$content ;? >

ただし、上記のファイルサイズメソッドはローカルファイルサイズしか取得できず、リモートファイルを読み取るには別のメソッドが必要です。

1

2

3

4

5

6

7

8

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

$ str ="";

しながら(!feof($file)){ / /ファイルの終わりまでの時間を判断します

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

}

echo$str;

?>

7.fgets(file)

fileはファイルリソースです、毎回読みます 行を取得します。たとえば、テンセントのホームページに何行あるかを読み取ります。

結果は 8893 になります。ソース ファイルをチェックして、合計行数を確認し、それを確認するだけです。

7.fgetc(file)

は、fgetsメソッドと非常に似ており、fileはファイルリソースであり、毎回文字を読み取ります。たとえば、テンセントのホームページに何文字あるのかを読み取ります。

1

2
3
4
5
6
7
8
9
10

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

$str="";

$count=0;

ながら(! feof($file)){

$str.=fgets($file) );

$count++;

}

エコー$count;

? >

1

2

3

4

5

6

7

8

9

10

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

$str="";

$count=0;

ながら(! feof($file)){

$str.=fgetc($file) );

$count++;

}

エコー$count;

? >

上記のコードはすべての文字数を出力します。

8.ftell(file)

ftellは現在読み取られているファイルのポインタ位置を返します。fileはファイルリソースであり、fopenによって返されるオブジェクトです。

9.fseek(file,offset,whence)

file

ファイル システム ポインターは、通常は fopen() によって作成されるリソースです。

オフセット

オフセット。

ファイルの終わりより前の位置に移動するには、offset に負の値を渡し、そこから SEEK_END に設定する必要があります。

whence

SEEK_SET – オフセットバイトに等しい位置を設定します。

SEEK_CUR – 位置を現在位置にオフセットを加えたものに設定します。

SEEK_END – ファイルの末尾にオフセットを加えた位置を設定します。

10.rewind($file)

ファイルヘッダーに戻ります。fileはファイルリソースです

たとえば

11.flock(file,operation[,wouldblock])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 )."
";//読み取り前のポインタ位置を出力

echo フレッド( $file , 10)."
";//10 文字を読み取ると、ポインタが 10 単位移動します

エコー ftell($file)."
";//

fseek ( $file,20,SEEK_CUR);//現在のポインターが 20 単位進みます

エコーftell($ file)."
";//移動後のポインタの位置を出力

echo 読んだ( $file ,10)."
";//読み取った10文字を出力

エコーftell ($file)."
";//10文字読み込んだ後のポインタの位置を出力

fシーク( $file,-20,SEEK_END);// ポインタはファイルの終わりの最初の 20 文字に移動します

echo ftell($file)."
";//移動後のポインタの位置を出力

echofread ($file,10)."
";//ファイルの最後の20文字を出力します

echo ftell($file)."
";//10文字読み取った後のポインタの位置を出力する

rewind($file);//ファイルの先頭に戻る

echoftell($file)."
";//移動後のポインタの位置を出力

> 840

ファイルリソースポインタは、通常は fopen() によって作成されるリソースです。

operation

operation は次の値のいずれかになります:



LOCK_SH は共有ロックを取得します (プログラムの読み取り)。

LOCK_EX 排他的ロック (書き込みを行うプログラム) を取得します。

LOCK_UN ロックを解放します (共有または排他的)。


flock() がロックでブロックしたくない場合は、LOCK_NB (Windows ではまだサポートされていません) )。

wouldblock

ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメーターは TRUE に設定されます (Windows ではサポートされていません)

。 1

2

3

4

5

6

7

php

$file
=
fopen(
"1 .txt ""
))
{

fwrite($file,"xxx"); 群れ($file,LOCK_UN )

;

} ?>

以上、PHP の高度な機能 2: ファイル処理について、その側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。