2013-10-31 125 views
0

哎我只是在此刻建立一个小PHP脚本列出目录内的文件夹和文件(不担心安全或验证 - 我使用),但出于某种原因 - 它似乎移动到之前扫描的基本目录两次下一个。我曾试过各种方法来解决它,但似乎没有任何工作,你能帮助我吗?为什么这个php文件夹列表脚本重复自己两次?

代码:

function getall() { 
    $base = scandir('files/'); 
    echo "<select>"; 
    foreach ($base as $x) { // main loop start 
    if (strlen($x) > 3) { 
    $x = str_replace(".","",$x); 
     echo "<option class='folder' value='/" . $x . "/'>" . $x ."</option>\n"; // display item as option select 
         } 
     $folders = scandir('files/' . $x . '/'); // scan next folder 
     foreach ($folders as $y) { // get files in folder 
     if (strlen($y) > 3) { 
      $y = str_replace("..","",$y); 
      echo "<option class='file' value='./". $x ."/" . $y . "'>" . $y .     "</option>\n"; // display item as option select 
     } 
     } 
    } 
    echo "</select>"; 
    } 

输出为:

<select> 
    <option class='file' value='./Class'>Class</option> 
    <option class='file' value='./Conditionals'>Conditionals</option> 
    <option class='file' value='./DateTime'>DateTime</option> 
    <option class='file' value='./File'>File</option> 
    <option class='file' value='./Folder'>Folder</option> 
    <option class='file' value='./Functions'>Functions</option> 
    <option class='file' value='./Loops'>Loops</option> 
    <option class='file' value='./MySQL'>MySQL</option> 
    <option class='file' value='./Security'>Security</option> 
    <option class='file' value='./String'>String</option> 
    <option class='file' value='../files'>files</option> 
    <option class='file' value='../files.php'>files.php</option> 
    <option class='file' value='../index.php'>index.php</option> 
    <option class='folder' value='/Class/'>Class</option> 
    <option class='file' value='Class/createclass.txt'>createclass.txt</option> 
    <option class='folder' value='/Conditionals/'>Conditionals</option> 
    <option class='file' value='Conditionals/if.txt'>if.txt</option> 
    <option class='file' value='Conditionals/ifelse.txt'>ifelse.txt</option> 
    <option class='file' value='Conditionals/ifelseif.txt'>ifelseif.txt</option> 
    <option class='file' value='Conditionals/switch.txt'>switch.txt</option> 
    <option class='folder' value='/DateTime/'>DateTime</option> 
    <option class='file' value='DateTime/date.txt'>date.txt</option> 
    <option class='file' value='DateTime/time.txt'>time.txt</option> 
    <option class='folder' value='/File/'>File</option> 

...等等,但你可以看到,顶部目录扫描两次。

+0

有关缩进对不起,我希望你能读它仍然笑 – user2475055

+0

普罗蒂普:使用更具描述性的变量名:'$ file'而不是'$ x'读取方便很多。 –

+2

你永远不会检查文件是文件夹还是文件。 –

回答

1

你应该跳过。和..

也许这样的事情?

function getall() { 
    $base = scandir('files/'); 
    echo "<select>"; 
    foreach ($base as $x) { // main loop start 
    if (strlen($x) > 3) { 
     $x = str_replace(".","",$x); 
     echo "<option class='folder' value='/" . $x . "/'>" . $x ."</option>\n"; // display item as option select 
     // I moved from here the } 
     $folders = scandir('files/' . $x . '/'); // scan next folder 
     foreach ($folders as $y) { // get files in folder 
     if (strlen($y) > 3) { 
      $y = str_replace("..","",$y); 
      echo "<option class='file' value='./". $x ."/" . $y . "'>" . $y .     "</option>\n"; // display item as option select 
      } 
     } 
     } 
    } // to here 
    echo "</select>"; 
    } 

(否则strlen检查不检查这样的事情很安全......它假定你没有真正的短命名的文件。)

+0

感谢,是的,我确实需要清理的代码了升技,目前其原油升技,即时通讯基本上构建PHP函数的数据库,这是在任何时候方便,所以i'l以后需要再次更新它能够编辑/制作新文件,我可以看到我的问题是{,谢谢 – user2475055

相关问题