2011-05-29 41 views
2

我试图让我的脚本找到我的包含目录中的所有PHP文件,并将它们放入一个数组(我已经完成数组部分)。然后,脚本执行一个for循环来检查GET请求是否与数组中的当前位置值匹配(或者您想调用它的任何内容)。PHP不停止包括(中断)

但是,如果它根本找不到它,它将包含默认页面,但显然如果它包含它匹配的文件。

问题是.. break命令根本不起作用。所以,如果匹配的话,它会包含默认页面。请帮忙。

<?php 

if(!defined("PLUGIN")){ 
    echo "You cannot view this file directly."; 
} else { 
    $glob = glob("inc/*.php"); 
    $count = count($glob); 
    for($i=0;$i<$count;$i++){ 
     $explode = explode("/", $glob[$i]); 
     $explode2 = explode(".", $explode[1]); 
     if($_GET["page"] == $explode2[0]){ 
      include $glob[$i]; 
      break; 
     } include_once "default.php"; 
    } 
} 
?> 
+4

条件不符合。 – usoban 2011-05-29 17:55:57

+0

你的代码可以用['foreach'](http://php.net/foreach)和['basename()'](http://php.net/basename) – mario 2011-05-29 17:57:12

+0

更简单。另外,include_once“如果在循环中设置了一个标志,default.php应该放在循环外部并运行。否则,在最坏的情况下,您可以运行include_once length-1次。 – rzetterberg 2011-05-29 17:59:17

回答

4

目前的情况是,你的循环将包括在循环的每次迭代的默认页面,直到它匹配GET /爆炸组合。

同样,使用爆炸分析文件路径是不好的做法。相反,使用path_info()

$found = false; 
foreach ($glob as $file) { 
    $basename = path_info($file, PATHINFO_FILENAME); 
    if ($basename == $_GET['page']) { 
     $found = true; 
     break; 
    } else { 
     include($basename); // probably need to adjust this to make it a full filename 
    } 
} 
if (!$found) { 
    include('default.php'); // include this only if no other match was found. 
} 
+0

1+也可以将“default.php”包含在循环之外。否则,当不需要的时候,被包括在内的问题的根源就在于此。 – rzetterberg 2011-05-29 18:00:35