[2]ディレクトリ・ファイルの操作
【ディレクトリ・ファイルの操作関数】 ディレクトリ・ファイルの操作には「 ファイルシステム関数 」または「 ディレクトリ関数 」を 使います。 まず、カレントディレクトリを読むプログラムを作成してみましょう。 このプログラムはソースをコピーしたりせずに、ご自分でタイプしてみてください。
<?php
さて、全てタイプし終わったら、「readdir.php」などという名前をつけて、FTP
でアップロードしてみてください。ディレクトリの内容は読み込めたでしょうか?/////////////////////////////////////////// //PHPプログラムの動作テスト //ディレクトリの内容を読んでみる /////////////////////////////////////////// //このスクリプトを設置するカレントを指定 $url="./"; //初期化項目 $filecount=0; $dircount=0; $erorr=""; //ディレクトリのオープン if ($dir = @opendir($url)) { //繰り返しディレクトリ内のファイルを読む while($file = readdir($dir)) { //ディレクトリを数える if (is_dir($file)){ //ディレクトリの更新日時を所得 $localday = date("Y年m月d日 H時i分s秒",filemtime ($file)); //ディレクトリをカウント $dircount++; //ディレクトリ名に更新日時をつけて配列に格納 $dirname[$dircount]="$localday,$file"; } //ファイルを数える else{ //ファイルの更新日時を所得 $localday = date("Y年m月d日 H時i分s秒",filemtime ($file)); //ファイルをカウント $filecount++; //更新日とファイルネームをつける $filename[$filecount]="$localday,$file"; } } closedir($dir); } else{ $erorr="ディレクトリのオープンに失敗しました!!"; } //これで$urlで指定したディレクトリが開かれ、ディレクトリは配列$dirname[$dircount]に //ファイルは配列$filename[$filecount]に格納されました。 //ディレクトリが開かれなかった場合は$erorrにエラーメッセージが格納されます。 //$erorrが空だった場合(ディレクトリが読み込めた場合) if($erorr==""){ //ディレクトリ配列に値があった場合 if(isset($dirname)){ foreach($dirname as $key => $value){ list($dirdays,$dirnames)=explode(",",$value); print "■".$key.":".$dirnames.":".$dirdays."<br>"; } } else{ print "ディレクトリはありません<br>"; } //ファイル配列に値があった場合 if(isset($filename)){ foreach($filename as $key => $value){ list($fildays,$filnames)=explode(",",$value); print "□".$key.":".$filnames.":".$fildays."<br>"; } } else{ print "ファイルはありません<br>"; } } //$erorrが空ではなかった場合(ディレクトリが読み込めなかった場合) else{ print $erorr; } ?> うまく動かない場合はタイプミスを確認してください。 エラーメッセージが表示されている場合はエラーの行が表示されます。 【表示の解説】 「.」はこのディレクトリを表すものです。 「..」は一つ上のディレクトリを表すものです。 ■はディレクトリを表し、□はファイルを表しています。ソースをよくみてください。 ここで使用しているPHP関数は以下の関数です ・opendir() ディレクトリ関数で、指定したディレクトリを開きます。先頭の@は「エラー制御演算子」です。 ・readdir() ディレクトリ関数で、開かれたディレクトリの中を読み、配列に格納します。 ・is_dir() ファイルシステム関数で、指定されたものがディレクトリかどうか調べます。ディレクトリ の場合はTRUEを返し、他の場合はFALSEを返します。 ・date() 日付・時刻関数で、日付・時刻をファーマットするのに使用します。 ・filemtime () ファイルシステム関数で、ファイルの更新時刻を取得します。時間はUNIXタイムスタンプとして返します ので、先のdate()関数でフォーマットしなおさないと日時として使用できません。 ・closedir() opendir()で開いたディレクトリをクローズします。 ※開いたディレクトリは必ずクローズします。 ・isset() 変数用の関数で、指定した変数に値があるかどうか調べます。値がある場合はTRUEを、ない場合は FALSEを返します。 ・list() 配列用の関数で、配列をexplode()関数などで分解して別の変数に分けて代入します。 ・explode() 文字列関数で、指定した条件で配列または文字列を分解します。 より詳細な説明はPHPマニュアルのそれぞれの項目を見てくださいね。 ちなみに「.」と「..」を表示させない場合はソースに以下の条件分岐を追加します。
<?php
青字が追加した条件分岐です。「.」と「..」は読まないという条件をつけています。
/////////////////////////////////////////// //PHPプログラムの動作テスト //ディレクトリの内容を読んでみる /////////////////////////////////////////// //このスクリプトを設置するカレントを指定 $url="./"; //初期化項目 $filecount=0; $dircount=0; $erorr=""; //ディレクトリのオープン if ($dir = @opendir($url)) { //繰り返しディレクトリ内のファイルを読む while($file = readdir($dir)) { if($file!="."&&$file!=".."){ //ディレクトリを数える if (is_dir($file)){ //ディレクトリの更新日時を所得 $localday = date("Y年m月d日 H時i分s秒",filemtime ($file)); //ディレクトリをカウント $dircount++; //ディレクトリ名に更新日時をつけて配列に格納 $dirname[$dircount]="$localday,$file"; } //ファイルを数える else{ //ファイルの更新日時を所得 $localday = date("Y年m月d日 H時i分s秒",filemtime ($file)); //ファイルをカウント $filecount++; //更新日とファイルネームをつける $filename[$filecount]="$localday,$file"; } } } closedir($dir); } else{ $erorr="ディレクトリのオープンに失敗しました!!"; } //これで$urlで指定したディレクトリが開かれ、ディレクトリは配列$dirname[$dircount]に //ファイルは配列$filename[$filecount]に格納されました。 //ディレクトリが開かれなかった場合は$erorrにエラーメッセージが格納されます。 //$erorrが空だった場合(ディレクトリが読み込めた場合) if($erorr==""){ //ディレクトリ配列に値があった場合 if(isset($dirname)){ foreach($dirname as $key => $value){ list($dirdays,$dirnames)=explode(",",$value); print "■".$key.":".$dirnames.":".$dirdays."<br>"; } } else{ print "ディレクトリはありません<br>"; } //ファイル配列に値があった場合 if(isset($filename)){ foreach($filename as $key => $value){ list($fildays,$filnames)=explode(",",$value); print "□".$key.":".$filnames.":".$fildays."<br>"; } } else{ print "ファイルはありません<br>"; } } //$erorrが空ではなかった場合(ディレクトリが読み込めなかった場合) else{ print $erorr; } ?> |
TOPへ |