觉得这样快!$act = isset($_GET['act'] ? $_GET['act'] : '';
$rFile = array('hit', 'about', 'article', 'adview', ...);
if (in_array($act, $rFile))
{
include $act.'.php';
}
else
{
include 'default.php';
}

解决方案 »

  1.   

    xxx_once多了一个判断。不过这个效率影响应该几乎为0。
    require失败则产生一个致命错误,或许这才是我们选择include_once的原因。
    php的数组使用起来非常的爽。呵呵。
      

  2.   

    require会fatal error,对类库更合适。
      

  3.   

    我是学PHPE。NET的代码,他的首页就是这样子结构的。
    听说这叫MVC对不对??
    我觉得这个结构做站点非常有用,而且拓展新版块也不是很麻烦。如果在执行效率上这四个都没有什么影响的话那就放心多了。。
      

  4.   

    还有一个问题,我的这种结构代码,如果$act为空的时候,是不是只有default.php文件被包含执行呢?
    最主要是担心这个问题,因为如果所有的文件都被包含的问肯定会影响效率。。
      

  5.   

    如果ACT是空,肯定只包含一次default.php。
    不过,二楼的办法更精妙。
      

  6.   

    switch( $act ) {
    case "hit"          :  require_once("hit.php");             break;
    case "about"        :  require_once("about.php");           break;一楼你这样的代码,我记得应该是不管怎样都会被运行吧。test下先。
      

  7.   

    奇怪。我以前记得谁说过,require是不管条件是否成立都运行……刚刚测试了一下不是这样。require还是遵循条件判断的。用这种结构会比较容易管理文件。回可爱种,没有那种担心。不会所有文件都被包含。不过建议你用inclucdeonce。gudai怎么到处说php数组好阿,我晕。你是才发现还是有什么新发现?
      

  8.   

    楼主的代码不够智能,事实上完全可以做到智能包括,类似于二楼的代码,但二楼的代码也有一个多余的数组创建,事实上不用创建也可以
    可以这样$act = isset($_GET['act'] ? $_GET['act'] : '';
    $page = file_exists($act.".php") ?  $act.".php" : "default.php";
    require_once( $page );
      

  9.   

    to zairwolft:你逻辑混淆了。require不管什么条件都预先包含,是指这种包含是在运行前的预处理。实际运行的时候,当然不会忽略你的if语句。
      

  10.   

    ice_berg16(寻梦的稻草人) :      你的代码虽然短了 但是安全性也降低了 什么文件都有可能被包含进来的
      

  11.   

    to: hax(海曦)
    不要害人,先看看手册再说话
      

  12.   

    skystar008(疯花血月) 
    效率应该不比1楼的差,或许还要好一点。
    不过就那么点东西,效率差异可以完全忽略
      

  13.   

    请所有对新事物接受能力不强的朋友们看下这个贴吧,真的希望不要再有人来误导php的新人了,给他们一点实实在在的支持,不要为了显摆自己,故意讲的多少深奥了,在此,代表新人谢谢你们了,放他们一马吧:
    http://community.csdn.net/Expert/topic/4593/4593236.xml?temp=.6188318
      

  14.   

    稻草人的写法是安全问题的一个范例include,require是绝对不能出现无法预知的变量
      

  15.   

    你的代码虽然短了 但是安全性也降低了 什么文件都有可能被包含进来的
    在不知道目录结构的情况下,你知道都有哪些文件吗?
    如果被包含文件全是class的话,被包含进来也没有什么影响吧,
    不知道ashchen(輝輝)说的无法预知的变量是什么意思
      

  16.   

    to: hax(海曦):
    预包含的概念可能是很old的,我在现在的手册里面没有发现。to 稻草人:
    这的确是安全隐患。不能因为认为他人无法知道文件夹结构就这样省懒。好的编程习惯问题。
      

  17.   

    不拿出来讨论一下还真不知道其中问题这么多。
    其实越讨论越迷糊呀不晓得哪个说得对。
    有一点可以肯定的是我这种结构中哪个条件成立就是哪个文件被处理,其它的文件中的变量都没有实施传递。。
    我其它的文件都不能单独运行的,只有和INDEX。PHP相配对才可以执行一定的功能。稻草人的代码我不觉得会有安全问题。
    就算你都知道我使用到的文件,但这些文件都是要运行的,反正你多访问几下就能知道,我不一定都是按照这种规则,或者我给每个包含文件名加上一点修饰,比如hit.php===>hit.inc.php,除非你把自己的文件上传到我的空间里,然后通过这种方法运行自己的文件,实现特定目的,但这样做的条件就是要先知道我是用这样子的结构和你得先有上传文件的权限,这个很容易做到吗?还有一个最重要的问题,我现在的act变量都和文件名一样,实际运用当中可能会更简单些。
      

  18.   

    www.china-mt.net
    这个网站是前段时间的一个项目,我用的是IBArticle2.0的架构,
    处理的方式和我刚才所与的有些类似,但并不完全相同。
    如果有安全隐患,希望大家指点一下,我好改进.
    程序结构可以给你:
    所有页面都过一个controller来控制
    index.php
    ----------------------
    require_once( "config.php" );
    require_once( IB_CLASS_PATH . "core/IBSystem.php" );
    require_once( IB_CLASS_PATH . "logic/LQStat.php" );$lathe = new IBSystem();
    $stat = new LQStat( $lathe->getDatabase() );//记录访问信息
    $stat->startLog();$lathe->run();$lathe->close();-------------------
    在IBSystem中有一个run方法function run()
    {
    //取得请求的页面
    $request = $this->getRequest(); //是否为非法请求
    if( $this->isValidRequest( $request ) )
    {
    //包含请求页面
    $page = $request . IB_REQUEST_EXT;
    require_once( $page ); //初始化请求的类
    $module = new $request( $this );

    //执行请求
    $module->process();
    }
    else //非法请求
    {
    $this->halt( "invalid request" );
    }
    }
    $module就是一个一个的应用类,比如新闻版块的地址为
    http://www.china-mt.net/?request=news
    就是说我根目录下有一个news.php,里面有一个名为news的类,所有的操作都在这个类中进行
    所有的应用类都从IBPage类继承,IBPage类有一个方法叫process
    用来处理对该模块不同的操作
    function process()
    {
    //取得请求的页面
    $action = $this->getAction(); //判断是否非法
    if( $this->isValidAction( $action ) )
    {
    $this->$action();
    }
    else //非法动作
    {
    $this->halt( "invalid action" );
    }
    }
    $action就是一个一个的类方法了。基本流程就是这样,
    详细情况见IBArticle2.0,
      

  19.   

    稻草人的代码简化一下就是这样
    require_once($_GET['act']);
    相当于对get过来的变量未做任何处理,这就是无法预知的变量最近xmlrpc.php的安全漏洞儒虫已经敲响了警钟
      

  20.   

    to ashchen(輝輝) 
    不能这么简化吧,我要判断的,如果文件不存在就会设置为默认的动作.