PHPファイルの扱い
PHP には、ファイルの作成、読み取り、アップロード、編集のためのさまざまな関數(shù)があります。
注意: ファイルは慎重に扱ってください。
ファイルを操作するときは細(xì)心の注意を払う必要があります。間違って行うと、非常に深刻な損害を引き起こす可能性があります。
よくある間違いは次のとおりです:
1. 間違ったファイルを編集する
2. ハードドライブをジャンクデータで埋める
3. ファイルコンテンツを誤って削除する
PHP readfile() 関數(shù)
readfile($filename)
機(jī)能: ファイルパスを渡してファイルを出力します
たとえば、次の內(nèi)容を含むfile.txtという名前のファイルがあります
PHP 中國(guó)語(yǔ)學(xué)習(xí)へようこそ
readfile() 関數(shù)を使用してこのファイルを読み取り、出力ストリームに書(shū)き込みます。PHP コードは次のとおりです (読み取りが成功すると、readfile() 関數(shù)はバイト數(shù)):
単語(yǔ) セクション數(shù): 英語(yǔ)の場(chǎng)合は 1 バイト、gbk でエンコードされた中國(guó)語(yǔ)の場(chǎng)合は 2、utf-8 中國(guó)語(yǔ)の場(chǎng)合は 3、スペースと記號(hào)の場(chǎng)合は 1
<?php echo readfile("D:WWW/item/file.txt"); ?>
プログラムの実行結(jié)果:
ようこそPHP中國(guó)語(yǔ)學(xué)習(xí)ではPHP39
file_get_contentsでファイルが開(kāi)きます
上記は単にファイルを開(kāi)いた直後の出力ですが、開(kāi)いた後に変數(shù)に代入できる操作メソッドはありますか?ファイル?
PHP は確かにこのメソッドを提供します。このメソッドは、PHP がファイルを開(kāi)いてコンテンツを返す方法の 1 つです。関數(shù)を見(jiàn)てみましょう:
file_get_contents (string filename)
関數(shù): ファイルまたはこのファイルを開(kāi)くためのファイル パスは、ファイルの內(nèi)容を返します。ファイルの內(nèi)容は文字列です。
たとえば、次の內(nèi)容を含む file.txt ファイルがあります:
file_get_contents を使用して open
Use file_get_contents to open
<?php $fileName="file.txt"; $filestring = file_get_contents($fileName); echo $filestring; ?>
プログラムの実行結(jié)果:
私は file_get_contents open を使用します
fopen、fread、fclose オペレーションはファイルを読み取ります
fopen ($file name, mode)
fread ($operation resource, read length)
fclose ($Operation Resource)
上記の関數(shù)を通じて、リソース タイプの通常の操作方法を説明します:
1. リソースを開(kāi)きます
2. 関連関數(shù)を使用して操作します
3.リソースを閉じます
fopen fopen 関數(shù)の機(jī)能は、次の 2 つの主なパラメータです:
1 ファイルを開(kāi)くためのモード
このリソース タイプでは、このリソースを操作するために他の機(jī)能が必要です。すべてのリソースは、開(kāi)いたときに閉じる必要があります。fread関數(shù) この関數(shù)の機(jī)能は、開(kāi)いているファイルのリソースを読み取ることです。指定された長(zhǎng)さのファイル リソースを読み取り、その一部を読み取り、一部を後方に移動(dòng)します。ファイルの最後まで。
fclose関數(shù) fclose関數(shù)の機(jī)能はリソースを閉じることです。リソースは開(kāi)いたり閉じたりします。
fopen のモード (下の表):
r | 読み取り専用。ファイルの先頭から開(kāi)始します。 r+ |
w | ただ書(shū)くだけ。ファイルを開(kāi)いて內(nèi)容をクリアします。ファイルが存在しない場(chǎng)合は、新しいファイルを作成します。 |
w+ | 読み取り/書(shū)き込み。ファイルを開(kāi)いて內(nèi)容をクリアし、ファイルが存在しない場(chǎng)合は新しいファイルを作成します。 |
を | 追加しました。ファイルを開(kāi)いて末尾に書(shū)き込みます。ファイルが存在しない場(chǎng)合は新しいファイルを作成します。 |
a+ | 読み取り/追加。ファイルの最後に書(shū)き込むことで、ファイルの內(nèi)容を維持します。 |
× | ただ書(shū)くだけ。新しいファイルを作成します。ファイルが既に存在する場(chǎng)合は、FALSE とエラーが返されます。 |
x+ | 読み取り/書(shū)き込み。新しいファイルを作成します。ファイルが既に存在する場(chǎng)合は、FALSE とエラーが返されます。 |
t | Windowsでnをrnに変換 |
b | バイナリオープンモード |
1. ファイル
file.txtを開(kāi)きます。ファイルの內(nèi)容は次のとおりです
どういたしまして
<?php //你可以創(chuàng)建一個(gè)file.txt,以只讀模式打開(kāi) $fp = fopen('file.txt', "r"); //var_dump()操作一下$fp看看效果,輸出的是不是只有類型提示的是resource var_dump($fp); ?>
2. ファイルを読み取ります
<?php $fp = fopen('file.txt', "r"); //打開(kāi)一個(gè)文件類型后,讀取12個(gè)字節(jié) $contents = fread($fp, 12); ?>
3. ファイルを閉じます
<?php $fp = fopen('file.txt', 'r'); $contents = fread($fp, 1024); fclose($fp); echo $contents; ?>
プログラムの実行結(jié)果:
どういたしまして
fwrite でファイルを書(shū)き込みます
file_put_contents (string $file path, string $write data])
機(jī)能: 指定されたファイルに文字列を書(shū)き込み、ファイルが存在しない場(chǎng)合はファイルを作成します。返されるのは、書(shū)き込まれたバイトの長(zhǎng)さです
インスタンス
<?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $data = "我是一個(gè)兵,來(lái)自老百姓"; $numbytes = file_put_contents('binggege.txt', $data); if($numbytes){ echo '寫(xiě)入成功,我們讀取看看結(jié)果試試:'; echo file_get_contents('binggege.txt'); }else{ echo '寫(xiě)入失敗或者沒(méi)有權(quán)限,注意檢查'; } ?>
プログラムの実行結(jié)果:
書(shū)き込みは成功しました。結(jié)果を読んで見(jiàn)てみましょう: 私は兵士、庶民から
fwrite ( resource $ file resource variable, string $ write string [, int length])
注 : fwrite のエイリアス関數(shù)は fputs です
上記の r モードを試しましたが、これは読み取り時(shí)にのみ使用されました。 次に、fopen で fwrite plus w を使用し、書(shū)き込みモードでファイルを書(shū)き込みます
例
ことができます。新しい test.txt ファイルを作成し、そこにコンテンツを書(shū)き込んでみてください。次に、test.txt を削除してみてください。どのようなヒントがあるのか??見(jiàn)てみましょう。
<?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $filename = 'test.txt'; $fp= fopen($filename, "w"); $len = fwrite($fp, '我是一只來(lái)自南方的狼,一直在尋找心中的花姑娘'); fclose($fp); print $len ."字節(jié)被寫(xiě)入了\n"; ?>
プログラムの実行結(jié)果:
66バイトが書(shū)き込まれました
概要:
1. ファイルが作成されたかどうかに関係なく、ファイルが開(kāi)かれて書(shū)き換えられます
2. 元のファイルの內(nèi)容は上書(shū)きされます
3. ファイルが存在しない場(chǎng)合は作成されます
次のモードの違いを比較してください:
r+wのみ書(shū)き込み機(jī)能可能 | w+ | は読み書(shū)き両方可能||||||||||||||||||||||||||||||||||||||||||||
例 <?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $filename = 'test.txt'; $fp= fopen($filename, "r"); $len = fwrite($fp, '我是一只來(lái)自南方的狼,一直在尋找心中的花姑娘'); fclose($fp); print $len .'字節(jié)被寫(xiě)入了\n'; ?> プログラムの実行結(jié)果:
rだけでの書(shū)き込みは失敗したことが分かりました 一時(shí)ファイルを作成する 以前に作成したファイルは永続ファイルです。 一時(shí)ファイルの作成は、日々のプロジェクト開(kāi)発にも非常に役立ちます。一時(shí)ファイルを作成するいくつかの利點(diǎn) 1. 使用後に削除される 2. このファイルの削除ステータスを維持する必要がありません 例: A のファイルの內(nèi)容を B に転送する必要があります。 B それを C に転送します。 現(xiàn)実世界と同じように、まず一時(shí)的なボトルを使用して B の水を満たし、次に A のデータを B に書(shū)き込むことができます。仮ボトルの水をCに加えます。 この関數(shù)を?qū)W習(xí)しましょう: resource tmpfile ( ) 関數(shù): 一時(shí)ファイルを作成し、リソースタイプを返します。ファイルを閉じると削除されます。 インスタンス <?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $handle = tmpfile(); //向里面寫(xiě)入了數(shù)據(jù) $numbytes = fwrite($handle, '寫(xiě)入臨時(shí)文件的內(nèi)容'); //關(guān)閉臨時(shí)文件,文件即被刪除 fclose($handle); echo '向臨時(shí)文件中寫(xiě)入了'.$numbytes . '個(gè)字節(jié)'; ?> プログラムの実行結(jié)果:
ファイルの移動(dòng)、コピー、削除 ファイルの名前を変更します rename($old name,$new name); この関數(shù)は、古い名前を新しい名前に変更するブール値を返します。 例 <?php $fileName1="text.txt"; $fileName2="text--1.txt"; rename($fileName1,$fileName2); ?> 上記の例は、text.txt ファイルの名前を text-1.txt に変更することです ファイルをコピーしてください copy(source file, target file) 機(jī)能: 指定されたパスを持つソースファイルをターゲットファイルの場(chǎng)所にコピーします。 例 <?php $filename = 'file.txt'; //舊文件名 $filename2 = 'copy-file.txt'; //新文件名 copy($filename, $filename2); //修改名字。 ?> 上記の例は、file.txt という名前のファイルを、同じ內(nèi)容を持つ copy-file.txt という名前のファイルにコピーすることです。 ファイルを削除 リンク解除(指定されたパスのファイル) 例 <?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $filename = 'test.txt'; unlink($filename); ?> 上記の例は、test.txtという名前のファイルを削除します よくあることファイルに使用される関數(shù) filesizeファイルサイズを検出 例 <?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $filename = 'file.txt'; echo $filename . '文件大小為: ' . filesize($filename) . ' bytes'; ?> プログラムの実行結(jié)果:
その他ファイル操作、ファイル読み込み関數(shù)
上記のすべての関數(shù)を使用する例を使用します。 text.txt ファイルにファイルのバッチを書(shū)き込みます:
fgetc は一度に 1 つずつ読み取ります <?php //以增加的r模式打開(kāi) $fp = fopen('text.txt','r+'); //你分發(fā)現(xiàn)每次只讀一個(gè)字符 echo fgetc($fp) ."<br>"; //我要全部讀取可以,讀取一次將結(jié)果賦值一次給$string while($string = fgetc($fp)){ echo $string; } ?> プログラム実行結(jié)果:
fgets は一度に 1 行ずつ開(kāi)きます: <?php //以增加的r模式打開(kāi) $fp = fopen('text.txt','r+'); //你分發(fā)現(xiàn)每次只讀一個(gè)字符 echo fgets($fp)."<br>"; echo fgets($fp)."<br>"; echo fgets($fp)."<br>"; echo fgets($fp); ?> プログラムの実行結(jié)果:
ファイル傍受関數(shù) <?php //打開(kāi)我們上面的text.txt文件 $file = fopen("text.txt", "a+"); //你可以數(shù)數(shù)20個(gè)字有多長(zhǎng),看看是不是達(dá)到效果了 echo ftruncate($file,10); fclose($file); ?> プログラムを?qū)g行すると、text.txtファイルを開(kāi)いて20バイトがあるかどうかを確認(rèn)できます ファイルのtime関數(shù)
インスタンス <?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $filename = 'text.txt'; if (file_exists($filename)) { echo "$filename"."文件的上次訪問(wèn)時(shí)間是: " . date("Y-m-d H:i:s", fileatime($filename))."<br>"; echo "$filename"."文件的創(chuàng)建時(shí)間是: " . date("Y-m-d H:i:s", filectime($filename))."<br>"; echo "$filename"."文件的修改時(shí)間是: " . date("Y-m-d H:i:s", filemtime($filename)); } ?> プログラム実行結(jié)果:
ディレクトリ処理関數(shù) 以前は、すべてでは、ディレクトリとフォルダーをどのように扱うか? ディレクトリまたはフォルダーの処理に関連する関數(shù)を?qū)Wびましょう。 フォルダーの処理の基本的な考え方は次のとおりです。 1. パスを読み取るときに、それがフォルダーであるかどうかを判斷します。 2. フォルダーである場(chǎng)合は、指定されたフォルダーを開(kāi)きます。フォルダーを指定してファイルを返します ディレクトリのリソース変數(shù) 3. readdir を使用してディレクトリ內(nèi)のファイルを 1 回読み取り、ディレクトリ ポインターを一度オフセットします 4. readdir を使用して最後まで読み取ります。読み取り可能なファイル、false を返します 5. ファイル ディレクトリを閉じます より一般的に使用される関數(shù)について學(xué)びましょう:
インスタンス <?php //設(shè)置打開(kāi)的目錄是D盤(pán) $dir = "D:/"; //判斷是否是文件夾,是文件夾 if (is_dir($dir)) { if ($dh = opendir($dir)) { //讀取一次向后移動(dòng)一次文件夾指針 echo readdir($dh).'<br />'; echo readdir($dh).'<br />'; echo readdir($dh).'<br />'; echo readdir($dh).'<br />'; echo readdir($dh).'<br />'; echo readdir($dh).'<br />'; //讀取到最后返回false //關(guān)閉文件夾資源 closedir($dh); } } ?> を?qū)g行できますプログラムをチェックして、それがコンピュータのDドライブのディレクトリではないことを確認(rèn)してください ファイルの種類を決定してください <?php //設(shè)置打開(kāi)的目錄是D盤(pán) $dir = "D:/"; //判斷是否是文件夾,是文件夾 if (is_dir($dir)) { if ($dh = opendir($dir)) { //讀取到最后返回false,停止循環(huán) while (($file = readdir($dh)) !== false) { echo "文件名為: $file : 文件的類型是: " . filetype($dir . $file) . "<br />"; } closedir($dh); } } ?> プログラムを?qū)g行して確認(rèn)してください ファイルパス関數(shù) ファイルパスの処理ケースによく遭遇します。 例: 1. ファイルのサフィックスを取り出す必要があります 2. パスはディレクトリではなく名前から取り出す必要があります 3.パス名にディレクトリパスを入れます 4. または URL に入れます各部分が解析されて獨(dú)立した値が得られます 5. URL を自分で作成することもできます 多くの場(chǎng)所でパス処理の使用が必要ですクラス関數(shù)。 一般的に使用されるパス処理関數(shù)を誰(shuí)でも簡(jiǎn)単に処理できるようにしました:
pathinfo pathinfo ( string $path) 例 <?php header("Content-type:text/html;charset=utf-8"); $path_parts = pathinfo('D:/www/a.html'); echo '文件目錄名:'.$path_parts['dirname']."<br />"; echo '文件全名:'.$path_parts['basename']."<br />"; echo '文件擴(kuò)展名:'.$path_parts['extension']."<br />"; echo '不包含擴(kuò)展的文件名:'.$path_parts['filename']."<br />"; ?> プログラムの実行結(jié)果:
basename basename ( string $path[, string $suffix ]) 例 <?php echo "1: ".basename("d:/www/a.html", ".d")."<br>"; echo "2: ".basename("d:/www/include")."<br>"; echo "3: ".basename("d:/www/text.txt")."<br>"; ?> プログラムの実行結(jié)果:
dirname ディレクトリ名(文字列 $path ) インスタンス <?php $a=dirname(__FILE__); echo$a; ?> プログラムを?qū)g行します parse_url parse_ URL (string $path) 例 <?php $url = 'http://username:password@hostname:9090/path?arg=value#anchor'; var_dump(parse_url($url)); ?> プログラム実行結(jié)果:
|