【问题标题】:Php page callingphp页面调用
【发布时间】:2011-09-20 07:43:08
【问题描述】:

如果我想做这样的事情,最好的方法是什么;

我称之为页面调用。

我有一个 index.php,它将运行 config.php

我想以 index.php 作为我的核心然后做类似的事情

index.php?customer=home  or index.php?customer=viewaccount

index.php?admin=home  or index.php?admin=updateproduct

然后调用特定的 php 文件,例如。 home.php , viewaccount.php

最好的问候 非常感谢您的帮助。=)

【问题讨论】:

  • 嗯.. 这已经过时了。现在你使用类似'/customer/viewaccount'的东西。如果这对您来说是个问题,您最好检查 MVC 框架。
  • 您的意思是通过 GET 变量重定向吗?我不太明白您要达到的目标。代码 sn-ps 真的取决于你想要实现的目标。您必须提供更多关于您实际想要做什么的数据。
  • PHP Frontcontroller 的可能重复项
  • @yi_H 大多数框架都执行 OP 在后台描述的内容。是 mod_rewrite 使 URL 变得“漂亮”。

标签: php indexing


【解决方案1】:

听起来您在谈论一种称为Front Controller Pattern 的设计模式。

当然可以实现自己的前端控制器,但几乎每个 PHP 框架都已经具备这种能力。我建议您尝试 Zend Framework。

【讨论】:

    【解决方案2】:

    我不会在同一个脚本中混合管理和公共领域。
    因此,对于公共区域,您可以执行类似的操作

    <? 
    if (empty($_SERVER['QUERY_STRING'])) { 
      $name="index"; 
    } else { 
      $name=basename($_SERVER['QUERY_STRING']); 
    } 
    $file="pages/$name.htm"; 
    if (is_readable($file)) { 
      include($file); 
    } else { 
      header("HTTP/1.0 404 Not Found");
      readfile("404.html");
    } 
    ?> 
    

    然后像这样index.php?homeindex.php?viewaccount 处理客户页面

    【讨论】:

    • 在编写这样的代码时,请注意远程/本地文件包含漏洞。 index.php?page=/etc/passwd 或 index.php?page=www.myEvilScript.com/evil.php
    • 你注意到basename()函数的使用了吗?
    • 哦,对不起,我实际上没有看到它^_^但我想我还是让它知道
    【解决方案3】:

    最好根据允许的脚本名称的“白名单”数组检查$_GET 参数。之后,您可以只包含该文件。

    if ( in_array( $_GET['admin'], array( 'home', 'updateproduct' ) ) ) {
        include( $_GET['admin'] . '.php');
    }
    

    【讨论】:

      【解决方案4】:

      好的,我懒得在这里评论所有答案,所以我会告诉你,即使这篇文章可能会因为它没有直接帮助而被删除。

      在包含来自 POST 或 GET 请求的文件时需要非常小心。在编写这样的代码时,请注意远程/本地文件包含漏洞。 index.php?page=/etc/passwd 或 index.php?page=www.myEvilScript.com/evil.php

      很多人都可以通过这种方式被黑客入侵,而您不希望这种情况发生在您身上。

      始终清理您的数据,因此 stripslashes($_GET['admin']);或任何你想使用的方法。

      【讨论】:

      • 我很好奇,stripslashes($_GET['admin']) 是干什么用的?
      • 它会从 url 中去除任何斜线,所以如果你有 index.php?admin=/MyInclude.php 或其他东西,它会去除斜线。
      • 这个函数实际上只去除反斜杠
      【解决方案5】:

      此模式的名称是前端控制器。

      您可以在网络服务器上实现多路复用(例如,使用 mod_rewrite)或在您的 PHP 代码中。

      的方法如下:

       <?php
      
       require_once($_REQUEST['customer']);
       require_once($_REQUEST['admin']);
      

      C.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多