【问题标题】:PHP dynamic pages with custom link带有自定义链接的 PHP 动态页面
【发布时间】:2012-10-23 23:56:46
【问题描述】:

下面的代码是这样工作的:

http://www.website.com/?page=home 将从 http://www.website.com/home.php 中提取内容

-- 或--

http://www.website.com/?page=About 将从 http://www.website.com/About.php

中提取内容

代码:

// Set the default name 
$action = 'home'; 

// Specify some disallowed paths 
$disallowed_paths = array('admin'); 

if (!empty($_GET['page'])) { 
    $tmp_action = basename($_GET['page']); 
    // If it's not a disallowed path, and if the file exists, update $action 
    if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php")) 
        $action = $tmp_action; 
} 
// Include $action 
include("$action.php"); 
?>

上面的代码适用于我的所有页面,但现在我有一个 自定义链接,我需要添加 http://www.website.com/?page=Search 以从 @ 中提取内容987654327@ 而不是 http://www.website.com/Search.php

我该怎么做?

谢谢

【问题讨论】:

    标签: php dynamic-pages


    【解决方案1】:

    有 2 个选项,您可以始终在子文件夹中查找文件,或者您可以拥有一个特殊的页面列表,其中包含自己的路径,就像使用 disallowed_pa​​ths 一样。

    $special_paths = array(
        "search" => "search/search.php",
    );
    
    if(in_array($_GET['page'], $special_paths)) {
        $action = $special_paths[$_GET['page']];
    

    这意味着如果将来存在另一个具有不同路径的特殊页面,您可以简单地将其添加到数组中。

    完整的代码是:

    <?php
        // Set the default name
        $action = 'home.php';
    
        // Specify some disallowed paths
        $disallowed_paths = array('admin');
    
        // special paths
        $special_paths = array(
                "search" => "search/search.php",
                "special_b" => "a/different/lengthier/path/file.php",
        );
    
        if (!empty($_GET['page'])) {
                $tmp_action = basename($_GET['page']);
    
                // If it's not a disallowed path, and if the file exists, update $action
                if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php")) {
                        $action = $tmp_action.".php";
                } elseif(isset($special_paths[$tmp_action])) {
                        $action = $special_paths[$tmp_action];
                }
        }
    
        // Include $action
        include("$action");
    

    【讨论】:

    • 另外应该注意的是,您应该考虑在内部将所有字符串强制为小写,而文件全部为小写。我也不会这样写代码,但我希望它尽可能与问题代码相似
    • 好的,谢谢!但只需在$action = 'home'; 中添加.php 即可成为$action = 'home.php';
    • 根据项目的大小,您可能希望通过将这些数据存储在数据库中来扩展此解决方案以使其更加灵活。然后,您可以将此数据缓存在 Web 服务器上,以避免每次加载页面时都查询数据库。但是,是的,将页面硬编码到数组中当然也是一种保持简单的方法。
    猜你喜欢
    • 2016-06-08
    • 2021-09-20
    • 2017-01-27
    • 2021-05-09
    • 2012-04-18
    • 2023-03-30
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多