English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、PHPでディレクトリやフォルダを処理する方法を学びます。
前回の章で、PHPを使用してファイルを操作する方法を学びました。同様に、PHPはファイルシステム上のディレクトリの使用も許可しており、例えば、ディレクトリを開いて内容を読み取ることができます、ディレクトリを作成または削除し、ディレクトリ内のすべてのファイルをリストアップすることができますなどです。
以下のように、mkdir()を使用して、作成するディレクトリのパスと名前を指定してPHP関数を呼び出すことで、新しい空のディレクトリを作成できます。
<?php //ディレクトリパス $dir = "testdir"; // ディレクトリが存在するか確認します if(!file_exists($dir)){ //ディレクトリを作成しようと試みます if(mkdir($dir)){ echo "ディレクトリ作成成功。"; } echo "エラー:ディレクトリを作成できません。"; } } echo "エラー:ディレクトリが存在します。"; } ?>
mkdir()関数が動作するためには、パラメータのディレクトリパスの親ディレクトリがすでに存在する必要があります。例えば、指定したディレクトリパスが testdir/subdir 比 testdir 他の方法で存在すると、PHPはエラーを生成します。
PHPのcopy()関数を呼び出して、ファイルのソースパスとターゲットパスをパラメータとして渡すことで、ファイルを一つの位置から別の位置にコピーすることができます。ターゲットファイルが既に存在する場合、それがオーバーライドされます。これは「example.txt」ファイルのバックアップコピーを作成するための例です。
<?php //ソースファイルパス $file = "example.txt"; //ターゲットファイルパス $newfile = "backup/example.txt"; // ファイルが存在するか確認 if(file_exists($file)){ //ファイルをコピーしようと試みます if(copy($file, $newfile)){ echo "ファイルコピー成功。"; } echo "エラー:ファイルをコピーできません。"; } } echo "エラー:ファイルが存在しません。"; } ?>
この例を実行するには、すでに存在する必要がありますバックアップターゲットディレクトリとソースファイル「example.txt」。そうでない場合、PHPはエラーを生成します。
PHPのscandir()関数を使用して指定されたパス内のファイルとディレクトリをリストアップできます。
今、カスタム関数を作成します。この関数はPHPで再帰的にディレクトリ内のすべてのファイルをリストアップします。深いネストされたディレクトリ構造を使用している場合、このスクリプトは非常に役立ちます。
<?php //ディレクトリ内のファイルを出力するための関数を定義 function outputFile($path){ //ディレクトリが存在するか確認します if(file_exists($path) && is_dir($path)){ //このディレクトリ内のファイルをスキャン $result = scandir($path); // 現在の(.)と親ディレクトリ(..)をフィルタリング $files = array_diff($result, array('.', '..')); if(count($files) > 0){ //ループで再調整された配列を巡回 foreach($files as $file){ if(is_file("$path")/$file"); //ファイル名を表示します echo $file . "<br>"; }/$file"); //ディレクトリが見つかった場合、その関数を再帰的に呼び出します outputFiles("$path",/$file"); } } } echo "エラー:ディレクトリ内にファイルが見つかりません。"; } } echo "エラー:このディレクトリは存在しません。"; } } //関数を呼び出します outputFiles("mydir"); ?>
ディレクトリとファイル構造を処理する際に、特定のタイプのファイル(例えば、.textや.pngファイルなど)を検索する必要がある場合があります。PHPのglob()関数を使用して、簡単にこれを行うことができます。この関数は、パターンに基づいてファイルをマッチングします。
以下のPHPコードは、 documents ディレクトリを並べ、すべての .text 拡張子を持つファイルをリストします。サブディレクトリは検索されません。
<?php /* ディレクトリを検索し、一致するファイルを含む配列を返します */ foreach(glob("documents",/*.txt") as $file){ echo basename($file) . "(サイズ: " . filesize($file) . "バイト)" . "<br>"; } ?>
glob()関数は、ディレクトリやそのサブディレクトリ内のすべてのファイルを検索するために使用できます。以下の例では、ディレクトリ内のすべてのファイルを再帰的にリストする関数が定義されており、これは先ほどの例で使用されたscandir()関数と同様です。
<?php //ディレクトリ内のファイルを出力するための関数を定義します function outputFile($path){ //ディレクトリが存在するか確認します if(file_exists($path) && is_dir($path)){ // ディレクトリ内のファイルを検索します $files = glob($path ."/*"); if(count($files) > 0){ //再構成された配列を巡回します foreach($files as $file){ if(is_file("$file")){ //ファイル名のみを表示します echo basename($file) . "<br>"; } //ディレクトリが見つかった場合、その関数を再帰的に呼び出します outputFiles("$file"); } } } echo "エラー:ディレクトリ内にそのようなファイルは見つかりません。"; } } echo "エラー:このディレクトリは存在しません。"; } } //関数を呼び出します outputFiles("mydir"); ?>