この記事では、PHP でよく使用されるフォルダー/ファイル ディレクトリの操作関数をいくつか紹介します。これらは、初心者の方の参考になれば幸いです。
phpフォルダ操作機能
文字列ベース名 (文字列パス [, 文字列サフィックス] )
ファイルへのフルパスを含む文字列を指定すると、この関数は基本ファイル名を返します。ファイル名が接尾辞で終わる場合、この部分も削除されます。
Windows では、スラッシュ (/) とバックスラッシュ () の両方をディレクトリ区切り文字として使用できます。他の状況では、スラッシュ (/) になります。
文字列ディレクトリ名 (文字列パス)
ファイルへのフルパスを含む文字列を指定すると、この関数はファイル名を削除した後のディレクトリ名を返します。
Windows では、スラッシュ (/) とバックスラッシュ () の両方をディレクトリ区切り文字として使用できます。他の状況では、スラッシュ (/) になります。
配列パス情報 (文字列パス [, int オプション] )
pathinfo() は、パス情報を含む連想配列を返します。次の配列要素が含まれます: dirname、basename、および extension。
パラメータオプションを通じてどの単位を返すかを指定できます。これらには、PATHINFO_DIRNAME、PATHINFO_BASENAME、および PATHINFO_EXTENSION が含まれます。デフォルトでは、すべての単位が返されます。
文字列実パス (文字列パス)
realpath() はすべてのシンボリック リンクを展開し、入力パス内の「/./」、「/../」、および冗長な「/」を処理し、正規化された絶対パス名を返します。返されたパスには、シンボリック リンク、「/./」または「/../」コンポーネントはありません。
realpath() は、ファイルが存在しない場合など、失敗した場合に FALSE を返します。 BSD システムでは、パスが単に存在しない場合、PHP は他のシステムのように FALSE を返しません。
bool is_dir (文字列ファイル名)
ファイル名が存在し、ディレクトリである場合は TRUE を返します。 filename が相対パスの場合、その相対パスは現在の作業ディレクトリに対してチェックされます。
注: この関数の結果はキャッシュされます。詳細については、clearstatcache() を参照してください。
resource opendir (文字列パス [, リソースコンテキスト] )
後続のclosedir()、readdir()、rewinddir()呼び出しで使用できるディレクトリハンドルを開きます。
文字列 readdir (リソース dir_handle)
ディレクトリ内の次のファイルのファイル名を返します。ファイル名はファイル システム内の順序で返されます。
void Closedir (リソース dir_handle)
dir_handle で指定されたディレクトリ ストリームを閉じます。ストリームは、opendir() によって事前に開かれている必要があります。
void rewinddir (リソース dir_handle)
dir_handle で指定されたディレクトリ ストリームをディレクトリの先頭にリセットします。
配列 glob (文字列パターン [, int フラグ] )
glob() 関数は、一般的なシェルで使用されるルールと同様に、libc glob() 関数で使用されるルールに従って、パターンに一致するすべてのファイル パスを検索します。略語展開やパラメータ置換は行われません。
一致するファイル/ディレクトリを含む配列を返します。エラーが発生した場合は FALSE を返します。
有効なタグは次のとおりです:
GLOB_MARK - 返品された各商品にスラッシュを追加します
GLOB_NOSORT - ファイルをディレクトリ内の元の出現順序で返します (ソートされていません)
GLOB_NOCHECK - 一致するファイルがない場合の検索に使用されるパターンを返します
GLOB_NOESCAPE - バックスラッシュはメタ文字をエスケープしません
GLOB_BRACE - {a,b,c} を展開して「a」、「b」、または「c」に一致させます
GLOB_ONLYDIR - パターンに一致するディレクトリ エントリのみを返します
注: PHP 4.3.3 より前では、GLOB_ONLYDIR は、GNU C ライブラリを使用しない Windows またはその他のシステムでは使用できません。
GLOB_ERR - エラー メッセージ (読み取り不能なディレクトリなど) を停止して読み取ります。デフォルトではすべてのエラーを無視します
注: GLOB_ERR は PHP 5.1 で追加されました。
phpファイルディレクトリ操作
新しいファイルを作成します
1.まずファイルに書き込む内容を決定します
$content = 'こんにちは';
2. このファイルを開きます (システムはこの空のファイルを自動的に作成します)
//新しく作成されたファイルは file.txt という名前で、上位ディレクトリにあるとします。 w は「書き込みファイル」を意味し、$fp の下で開いているファイルを指すために使用されます。
$fp = fopen('../file.txt', 'w');
3. コンテンツ文字列をファイルに書き込みます
//$fp は書き込まれるファイルをシステムに指示し、書き込まれる内容は $content です
fwrite($fp, $content);
4. ファイルを閉じます
fclose($fp);
注: PHP5 には、より便利な関数 file_put_contents が用意されており、上記の 4 つの手順は次のように完了できます。$content = 'こんにちは';
file_put_contents('file.txt',$content);
ファイルを削除する
//カレントディレクトリのarchディレクトリにあるファイルabc.txtを削除します
リンク解除('arch/abc.txt');
注: システムは、成功した場合は操作結果を TRUE、失敗した場合は FALSE を返し、削除が成功したかどうかを確認するために変数を使用できます。
$deleteResult = unlink('arch/abc.txt');
ファイルの内容を取得する
//取得した対象ファイル名はfile.txtで、上位ディレクトリにあるものとする。取得したコンテンツは$contentに格納されます。
$content = file_get_contents('../file.txt');
ファイルの内容を変更する
操作方法は新規コンテンツ作成と基本的に同じです
ファイルまたはディレクトリの名前を変更する
//現在のディレクトリのサブディレクトリ a にあるファイル 1.gif の名前を 2.gif に変更します。
名前を変更('/a/1.gif', '/a/2.gif');
注: ディレクトリについても同様です。システムは操作結果を返します。成功した場合は TRUE、失敗した場合は FALSE を受け取り、名前の変更が成功したかどうかを知ることができます。
$renameResult = rename('/a/1.gif', '/a/2.gif');
ファイルまたはディレクトリを移動したい場合は、名前を変更したパスを新しいパスに設定するだけです:
//現在のディレクトリのサブディレクトリ a にあるファイル 1.gif を現在のディレクトリのサブディレクトリ b に移動し、名前を 2.gif に変更します。
名前変更('/a/1.gif', '/b/2.gif');
ただし、ディレクトリ b が存在しない場合、移動は失敗することに注意してください。
ファイルをコピーする
//現在のディレクトリのサブディレクトリ a にあるファイル 1.gif を現在のディレクトリのサブディレクトリ b にコピーし、2.gif という名前を付けます。
copy('/a/1.gif', '/b/1.gif');
注: この操作はディレクトリに対して実行できません。
対象ファイル(上記/b/1.gif)が既に存在する場合、元のファイルは上書きされます。
システムは操作結果を返します。成功した場合は TRUE、失敗した場合は FALSE を受け取り、コピーが成功したかどうかを知ることができます。
$copyResult = copy('/a/1.gif', '/b/1.gif');
ファイルまたはディレクトリを移動する
操作方法は名前変更と同じです
ファイルまたはディレクトリが存在するかどうか
//上位ディレクトリにlogo.jpgというファイルが存在するか確認します。
$existResult = file_exists('../logo.jpg');
説明: ファイルが存在する場合、システムは true を返し、存在しない場合は false を返します。ディレクトリに対しても同様の操作が可能です。
ファイルサイズを取得する
//上位ディレクトリにあるlogo.pngファイルのサイズを取得します。
$size = ファイルサイズ('../logo.png');
説明: システムはファイルのサイズをバイト単位で示す数値を返します。
新しいディレクトリを作成する
//現在のディレクトリのディレクトリ a の下に新しいディレクトリ b を作成します。
mkdir('/a/b');
注: システムは、成功した場合は操作結果を TRUE、失敗した場合は FALSE を返し、新しい作成が成功したかどうかを知ることができます。
$mkResult = mkdir('/a/b');
ディレクトリを削除
//現在のディレクトリのディレクトリ a の下にあるサブディレクトリ b を削除します。
rmdir('/a/b');
注: 削除できるのは空ではないディレクトリのみです。それ以外の場合は、まずディレクトリの下のサブディレクトリとファイルを削除してから、ディレクトリ全体を削除する必要があります
システムは、成功した場合は操作結果を TRUE、失敗した場合は FALSE を返し、削除が成功したかどうかを知ることができます。
$deleteResult = rmdir('/a/b');
ディレクトリ内のすべてのファイル名を取得します
1. まず操作したいディレクトリを開き、変数を使用してそれを指します
//現在のディレクトリ内のディレクトリ pic の下にあるサブディレクトリ common を開きます。
$handler = opendir('pic/common');
2. ディレクトリ内のすべてのファイルをループで読み取ります
/* このうち $filename = readdir($handler) はループするたびに読み込んだファイル名を $filename に代入します。これは無限ループに陥らないようにするために $filename !== false も必要です。必ず !== を使用してください。ファイル名が「0」である場合、またはシステムが false を表すとみなした場合、!= を使用するとループが停止します*/
while( ($filename = readdir($handler)) !== false ) {
3. ディレクトリには「.」と「..」という名前の 2 つのファイルがありますが、これらは操作しないでください
if($filename != "." && $filename != "..") {
4. プロセス
//ここでは単に echo を使用してファイル名を出力します
$ファイル名をエコー;
}
}
5. ディレクトリを閉じます
closedir($handler);
オブジェクトがディレクトリかどうか
//上位ディレクトリにある対象オブジェクトlogo.jpgがディレクトリかどうかを確認します。
$checkResult = is_dir('../logo.jpg');
説明: ターゲット オブジェクトがディレクトリ システムの場合は true を返し、それ以外の場合は false を返します。もちろん、上記の例の $checkResult は false です。
オブジェクトがファイルかどうか
//上位ディレクトリにある対象オブジェクトlogo.jpgがファイルであるか確認します。
$checkResult = is_file('../logo.jpg');
説明: ターゲット オブジェクトがファイルの場合、システムは true を返し、それ以外の場合は false を返します。もちろん、上記の例の $checkResult は true です。