1

このコードの何が問題なのか誰か教えてもらえますか? のすべてのフォルダを表示するはずですが../files/、空のリストが返されます。これはコードです:

<?php
    $upload_dir  = chdir("./files/" . $userid);
    $dirs = glob($upload_dir, GLOB_ONLYDIR);
    foreach($dirs as $val){
       echo '<option value="'.$val.'">'.$val."</option>\n";
    }       
?>
4

2 に答える 2

2

chdir()ディレクトリの変更が機能したかどうかに応じて、trueまたはを返します。falseしたがって、基本的には、またはのいずれ1かという名前のすべてのファイルを検索しようとします0。これについて明確に定義された動作がある場合。

次のようにしてみてください。

<?php
    if (chdir("./files/" . $userid)) {
       $dirs = glob('*', GLOB_ONLYDIR);
       foreach($dirs as $val){
          echo '<option value="'.$val.'">'.$val."</option>\n";
       }        
    } else {
       echo 'Changing directory failed.';
    }
?>
于 2013-01-11T18:29:08.147 に答える
0

$upload_dirからの戻り値に設定しましたchdir。これは TRUE または FALSE であり、$dirs を設定するときにグロブへの引数としてそれを使用しようとします。

globの最初の引数は、パターンを表す文字列でなければなりません。あなたのケースでは、おそらく * ですべての内容を一覧表示する必要があります (TRUE または FALSE を渡すのではなく)。glob への最初の引数は、dirWindows で渡されるもの、またはlsLinux で渡されるものと考えてください。この場合/files/userid/*、または同様のものです。

代わりに次のようにします。

<?php
    $pattern = "./files/" . $userid . '/*';
    $dirs = glob($pattern, GLOB_ONLYDIR);
    foreach($dirs as $val){
       echo '<option value="'.$val.'">'.$val."</option>\n";
    }       
?>

これには、現在の作業ディレクトリを変更しないという利点があります。理想的には、相対パスではなく絶対パスを使用します。

于 2013-01-11T18:29:55.647 に答える