首页 > 解决方案 > 包含文件时传递字符串的最佳方法

问题描述

使用 include() 函数时,我在传递字符串时遇到问题。我有 index.php 作为模板文件并包含任何其他页面。

例如,如果我想去主页,地址是http://somethingsomething.com/index.php?page=home,包含文件是pages/home.php。您可以在下面找到模板系统的工作原理。我想更改您当前所在的页面,但我不知道从页面标题传递该字符串的最佳方式是什么。因此,如果我在目录页面上 - http://somethingsomething.com/index.php?page=catalogue,它将包含文件 pages/catalogue.php 并且我尝试将字符串作为 SESSION 传递,但它没有工作。请你帮助我好吗?

来源网址:http ://somethingsomething.com/index.php?page=catalogue

index.php 文件

<html>
    <head>
        <title><?php echo $title; ?></title>
    </head>
    <body>
        <h1>Welcome, world!</h1>
    <?php
        if (isset($_GET['page'])) {
            $page = $_GET['page'];
        } else {
            $page = 'home';
        }

        if (preg_match('/^[a-z0-9]+$/', $page)) {
            $insert = include('pages/' . $page . '.php');
            if (!$insert) {
                $insert = include('pages/error.php');
            }
        } else if (empty($page)) {
            $insert = include('pages/error.php');
        } else {
            $insert = include('pages/error.php');
        }
    ?>
    </body>
</html>

pages/catalogue.php 文件

    <?php
        $title = "Catalogue";
    ?>

标签: phpsession

解决方案


像这样的东西?

<?php
    ob_start();
        if (isset($_GET['page'])) {
            $page = $_GET['page'];
        } else {
            $page = 'home';
        }

        if (preg_match('/^[a-z0-9]+$/', $page)) {
            $insert = include('pages/' . $page . '.php');
            if (!$insert) {
                $insert = include('pages/error.php');
            }
        } else if (empty($page)) {
            $insert = include('pages/error.php');
        } else {
            $insert = include('pages/error.php');
        }
    $output = ob_get_clean();
?>
<html>
    <head>
        <title><?php echo $title; ?></title>
    </head>
    <body>
        <h1>Welcome, world!</h1>
    <?php
        echo $output;
    ?>
    </body>
</html>

推荐阅读