English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、PHPのファイルシステム関数を使用して、ファイルを動的に作成、アクセス(または読み取る)および操作する方法を学びます。
PHPはサーバーサイドのプログラミング言語であるため、Webサーバー上に保存されているファイルとディレクトリを使用できるようにします。このチュートリアルでは、PHPのファイルシステム関数を使用して、Webサーバー上でファイルを作成、アクセス、操作する方法を学びます。
ファイルを使用するには、まずファイルを開く必要があります。PHPのfopen()関数はファイルを開くために使用されます。この関数の基本的な文法は以下のように示されます:
fopen(filename, mode)
fopen(filename, mode)に渡される最初の引数は、開くファイルの名前を指定し、次の引数はファイルをどのモードで開くかを指定します。例えば:
<?php $handle = fopen("data.txt", "r"); ?>テストしてみてください‹/›
以下のいずれかの方法でファイルを開くことができます:
モード | それは何ができますか |
---|---|
r | ファイルを只読みで開きます |
r+ | 読み書き用にファイルを開きます |
w | 書き込み用にのみ使用するファイルを開き、ファイルの内容をクリアします。ファイルが存在しない場合、PHPはそれを生成しようとします。 |
w+ | 読み書き用にファイルを開き、ファイルの内容をクリアします。ファイルが存在しない場合、PHPはそれを生成しようとします。 |
a | 追加します。書き込み用にのみ使用するファイルを開きます。ファイルの末尾に書き込みを行うことでファイルの内容を保持します。ファイルが存在しない場合、PHPはそれを生成しようとします。 |
a+ | 読み取り/追加します。読み書き用にファイルを開きます。ファイルの末尾に書き込みを行うことでファイルの内容を保持します。ファイルが存在しない場合、PHPはそれを生成しようとします。 |
x | 書き込み用にのみ使用するファイルを開きます。ファイルが存在する場合、Falseを返しエラーを生成します。ファイルが存在しない場合、PHPはそれを生成しようとします。 |
x+ | 読み書き用にファイルを開きます;それ以外の場合は、'x'と同じ動作です。 |
存在しないファイルを開こうとすると、PHPは警告メッセージを生成します。そのため、ファイルやディレクトリにアクセスする前に、PHPのfile_exists()関数を使用して存在を簡単にチェックするのが良いです。
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ // ファイルを開くことを試みます $handle = fopen($file, "r"); } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
ヒント:ファイルやディレクトリの操作はエラーが発生しやすいです。そのため、何らかの形式のエラーチェックを実行するのは良い習慣です。エラーが発生した場合、スクリプトがエラーハンドリングをうまく行うことができます。以下を参照してください。PHPエラーハンドリングのチュートリアル。
ファイルを使用した後は、それを閉じる必要があります。fclose()関数は以下の例のようにファイルを閉じます:
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //読み込むファイルを開きます $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); /* 以下に実行するコードがあります */ //ファイルハンドルを閉じます fclose($handle); } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
注意:PHPはスクリプト終了時に自動的にすべての開いたファイルを閉じますが、操作が終わった後はファイルを閉じるのが良いです。
ファイルを開き、閉じる方法を理解したことになります。次のセクションでは、ファイルからデータを読み取る方法について学びます。PHPにはファイルからデータを読み取るためのいくつかの関数があります。一つの操作でファイル全体を読み取ることができます。
fread()関数は、ファイルから指定された数の文字を読み取るために使用できます。この関数の基本的な语法を使用できます。
fread(file handle, length in bytes)
この関数は2つの引数を受け取ります-ファイルハンドルと読み込むバイト数。以下の例では、"data.txt"ファイルから読み込みます。20バイト、スペースを含めて。例えば、ファイル“data.txt”には“The quick brown fox jumps over the lazy dog.”というテキストが含まれています。
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //読み込むファイルを開きます $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); //ファイルから固定のバイト数を読み取ります $content = fread($handle, "20 //ファイルのハンドルを閉じます fclose($handle); //ファイル内容を表示 echo $content; } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
上記の例は以下のような出力を生成します:
The quick brown fox
fread()関数はfilesize()関数と組み合わせて使用できます。fread()関数は、ファイル全体を読み込むことができます。filesize()関数の機能は、ファイルのサイズをバイト単位で返すことです。
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //読み込むファイルを開きます $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); //ファイル全体を読み込みます $content = fread($handle, filesize($file)); //ファイルハンドルを閉じます fclose($handle); //ファイル内容を表示 echo $content; } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
上記の例は以下のような出力を生成します:
The quick brown fox jumps over the lazy dog.
PHPでファイルのすべての内容を読み込む最も簡単な方法はreadfile()関数を使用することです。この関数はファイルをオープンする必要なくファイルの内容を読み込むことができます。以下の例は、上記の例と同じ出力を生成します:
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //ファイル全体を読み出し、出力 readfile($file) or die("ERROR: Cannot open the file."); } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
上記の例は以下のような出力を生成します:
The quick brown fox jumps over the lazy dog.
file_get_contents()関数を使用してファイルのすべての内容を読み込むもう一つの方法はあります。この関数はファイルの名前とパスを受け取り、すべてのファイルを文字列変数に読み込みます。以下はその例です:
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ // 整个ファイルを文字列として読み込む $content = file_get_contents($file) or die("ERROR: Cannot open the file."); //ファイル内容を表示 echo $content; } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
ファイルのすべてのデータを読み込むもう一つの方法は、PHPのfile()関数です。この関数の機能はfile_get_content()関数に似ていますが、ファイル内容を行の配列として返し、単一の文字列として返しません。返される配列の各要素は、ファイル内の各行に対応しています。
ファイルデータを処理するには、以下を使用する必要があります:foreachループ配列をループします。この例では、ファイルを読み込んだ配列を使用して、ループを通じて表示する方法を示しています:
<?php $file = "data.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //ファイル全体を配列に読み込みます $arr = file($file) or die("ERROR: Cannot open the file."); foreach($arr as $line){ echo $line; } } else { echo "ERROR: File does not exist."; } ?>テストしてみてください‹/›
同様に、PHPのfwrite()関数を使用してデータをファイルに書き込んだり、既存のファイルに追加したりできます。この関数の基本的な構文は以下のように示されます:
fwrite(file handle, string)
fwrite()関数は以下の例のように、ファイルハンドルと書き込むデータ文字列を2つの引数として受け取ります:
<?php $file = "note.txt"; //書き込むデータの文字列 $data = "The quick brown fox jumps over the lazy dog."; //ファイルを書き込み用に開きます $handle = fopen($file, "w") or die("ERROR: Cannot open the file."); //データをファイルに書き込みます。 fwrite($handle, $data) or die ("ERROR: Cannot write the file."); //ファイルハンドルを閉じます fclose($handle); echo "データが成功してファイルに書き込まれました。"; ?>
上記の例では、「note.txt」ファイルが存在しない場合、PHPは自動的にファイルを作成しデータを書き込みます。ただし、「note.txt」ファイルが既に存在する場合、PHPは新しいデータを書き込む前にファイルの内容(あれば)をクリアしますが、ファイルに追加し現存する内容を保持したい場合は、上記の例を使用してください。モード aではなくwです。
もう一つの方法はfile_put_contents()関数を使用することです。それはfile_get_contents()関数の対応機能であり、データをファイルに書き込む際にファイルをオープンする必要がなく便利な方法を提供します。この関数はファイルの名前とパス、およびファイルに書き込むデータを受け取ります。以下がその例です:
<?php $file = "note.txt"; //書き込むデータの文字列 $data = "The quick brown fox jumps over the lazy dog."; //データをファイルに書き込みます。 file_put_contents($file, $data) or die("ERROR: Cannot write the file."); echo "データが成功してファイルに書き込まれました。"; ?>
file_put_contents()関数で指定されたファイルが既に存在する場合、デフォルトでPHPはそれを上書きします。ファイルの内容を保持したい場合は、file_put_contents()関数に特別なFILE_APPENDフラグを第3引数として渡します。それは新しいデータをファイルに追加分として追加しますが、上書きしません。以下がその例です:
<?php $file = "note.txt"; //書き込むデータの文字列 $data = "The quick brown fox jumps over the lazy dog."; //データをファイルに書き込みます。 file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file."); echo "データが成功してファイルに書き込まれました。"; ?>
PHPのrename()関数を使用してファイルやディレクトリをリネームする方法は以下の通りです:
<?php $file = "file.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //ファイルをリネームしようとしました。 if(rename($file, "newfile.txt")){ echo "ファイルのリネームが成功しました。"; } else { echo "エラー:ファイルをリネームできません。"; } } else { echo "エラー:ファイルが存在しません。"; } ?>
PHPのunlink()関数を使用してファイルやディレクトリを削除する方法は以下の通りです:
<?php $file = "note.txt"; //ファイルが存在するか確認します。 if(file_exists($file)){ //ファイルを削除しようとしました。 if(unlink($file)){ echo "ファイルが成功して削除されました。"; } else { echo "エラー:ファイルを削除できません。"; } } else { echo "エラー:ファイルが存在しません。"; } ?>
次の章では、PHPでディレクトリやフォルダのさらに詳しい情報
以下の表は、動的にファイルを読み書きするために使用できる他の有用なPHPファイルシステム関数の概要を示しています。
関数 | 説明 |
---|---|
fgetc() | 一文字を一度に読み取ります。 |
fgets() | 一行を一度に読み取ります。 |
fgetcsv() | カンマで区切られた値の行を読み取ります。 |
filetype() | ファイルのタイプを返します。 |
feof() | ファイルの最後に到達したかどうかを確認します。 |
is_file() | ファイルが通常のファイルかどうかを確認します。 |
is_dir() | ファイルがディレクトリかどうかを確認します。 |
is_executable() | ファイルが実行可能かどうかを確認します。 |
realpath() | 規格化された絶対パス名を返します。 |
rmdir() | 空のディレクトリを削除します。 |
他の有用なPHPファイルシステム関数については、PHPファイルシステムリファレンスを確認してください。