U-style PHP独学日記  Since2001 メインメニューに戻る PHPメニューに戻る
タイトルディレクトリを操作する関数
文書管理番号 作成日 分類1 分類2 キーワード

PHP0024

2004-02-16   chdir,opendir,readdir,closedir

本日はディレクトリの操作に関する関数の学習です。ディレクトリの操作だけでも結構いろいろあるのでその中からディレクトリの変更等を学習します。
まずはじめはchdirです。これはUNIXのディレクトリを移動するときのコマンドchdirそのままです。

chdir("ディレクトリ名");

<?

        //ディレクトリの位置変更
        chdir("/var/www/html/test");

        //これだけではわからないので修正
        if(chdir("/var/www/html/test"))
        {
                echo("ディレクトリの変更に成功しました。");
        }
        else
        {
                echo("ディレクトリの変更に失敗しました");
        }
        
?>
実行結果

次はopendirです

変数名 = opendir(”ディレクトリ名”);
変数名で指定した変数はディレクトリハンドルのようです。ハンドル自体よくわからないのでなんともいえませんが、よくわからないときは実行あるのみです。ハンドルは車のハンドルすなわち運転をコントロールするものだとでも覚えておきます。さきへ進もう
下記の例では取得したハンドルを指定してreaddirで戻り値を取得しています。
変数名 = readdir(”ハンドル”);
つまりどこのディレクトリの操作をするかということをopendirで取得してその取得したハンドルに対してreaddirを実行するとそのディレクトリの中のファイルまたはディレクトリ名が取得できるという代物です。ディレクトリ内に複数のファイルもしくはでぃれくとりがあるとreaddirはひとつ読み出します。下記の例ではそれをwhile文を利用して実行しています。そして読むものがなくなったすなわちファイル名またはディレクトリ名の最後までいったときにfalseを返してwhileを抜けるものだと推測します。当然ポインターを使って処理をしているのでしょう。

<?
        //ディレクトリハンドルを取得する
        $myDir = opendir("/home/test");
        
        //取得する変数名(?)は任意で設定可能
        //取得時一番初めは.で2番目が..であることに気をつける。
        //つまりファイル名だけでなくディレクトリ構造も含まれる
        //権限がないディレクトリのアクセスはもちろんエラーとなる。取得時にエラー確認が
        //必要ないのはエラーを出力してくれるから?
        
        while($fname = readdir($myDir))
        {
                echo("ファイル名は" . $fname . "です<br>");
        }
        
        //ディレクトリハンドルを閉じる
        closedir($myDir)
        
?
実行結果

最後にclosedirで取得したハンドルを開放しています。
この点は私も今ひとつわかりませんがやはりメモリーとかの関係なのでしょうか?取得したままだとどうなるのでしょうか?
実験でハンドル名を変更しつつ無限ループをかけたいところですがサーバーを止めるわけにもいかないのでこの案は止めておきます。

本日の参考文献

  •  MySQL&PHPでつくるWebデータベース Spencer K Ogawa著 エーアイ出版
  •  http://www.php.net/manual/ja/