0

这是我的情况。我有以下脚本:

<?php
// ... other code ...
switch($_GET['request'])    {
        case "firstPage":
            $file = APP_ROOT. "pages/firstPage.php";
            $hndle = fopen($file,"r");
            $right_column = fread($hndle, filesize($file));
            fclose($hndle);
            break;
        case "secondPage":
            $file = APP_ROOT. "pages/secondPage.php";
            $hndle = fopen($file,"r");
            $right_column = fread($hndle, filesize($file));
            fclose($hndle);
            break;
    }
}
?>
<div id="right_column">
    <?php echo $right_column;?>
</div>
// ... other code ...

根据 $_GET['request'] 的值,我将 php 文件的内容分配给变量 $right_column。然后,我在最后一个 div 中回显该变量。firstPage.php 和 secondPage.php 文件包含混合的 html 和 php 代码。我在 Zend 中寻找像“部分”这样的解决方案。谢谢

4

4 回答 4

2

首先,你的代码很糟糕,应该是这样的:

$pages = array(
   'firstPage'   => 'pages/firstPage.php',
   'secondPage'  => 'pages/secondPage.php'
);

$request = 'firstPage';
if ( array_key_exits($_GET, 'request') 
 &&  array_key_exists($pages, $_GET['request']) )
{
   $request = $_GET['request'];
}
?>
<div id="right_column">
    <?php include  APP_ROOT . $pages[ $request ]; ?>
</div>

请阅读http://codeangel.org/articles/simple-php-template-engine.html,您可能会觉得这很有趣。它应该向您解释如何轻松利用 php 的原生模板功能。

于 2011-11-22T17:02:59.610 回答
1

实际上,读取和转储文件并不是一个解决方案。您只是向最终用户显示代码。

您需要的是解析 PHP 文件并显示结果。你可以通过两种方式做到这一点:

首先,而不是

 $file = APP_ROOT. "pages/firstPage.php";
 $hndle = fopen($file,"r");
 $right_column = fread($hndle, filesize($file));
 fclose($hndle);

你可以做:

$right_column = include(APP_ROOT . "pages/firstPage.php");

因此,您的 firstPage.php 必须返回代码。像这样的东西:

// firstPage.php
return "my html";

但你也可以像这样包含它:

<div id="right_column">
    <?php include(APP_ROOT . "pages/firstPage.php"); ?>
</div>

或者,您可以使用ob_get_contents。PHP 有一个关于如何使用它的很好的文档。

我会为您的情况使用 include 。

于 2011-11-22T16:56:49.253 回答
0

如果您设置一个变量来指示要包含的 PHP 文件,然后不读取文件,只需包含它,这可能会更简单。例如:

<?php
// ... other code ...
switch($_GET['request'])    {
        case "firstPage":
            $file = APP_ROOT. "pages/firstPage.php";
            break;
        case "secondPage":
            $file = APP_ROOT. "pages/secondPage.php";
            break;
    }
}
?>
<div id="right_column">
    <?php include($file);?>
</div>
// ... other code ...

如果您的 firstPage.php 和 secondPage.php 文件只有 HTML,那么您正在做的事情会起作用。如果它有 PHP,那么你需要include()它;或者你可以eval()这样做,但这又做了比你需要的更多的工作。

于 2011-11-22T16:53:51.787 回答
-1

在我看来,您可以按照约定进行编程,而不是使用不断增加的 switch 语句:

<?php
// ... other code ...

$file = '';
if (isset($_GET['request'])) {
    $safeFileName = sanitizeRequestForFileName($_GET['request']);
    $file = APP_ROOT. 'pages/' . $safeFileName . '.php';
}
?>
<div id="right_column">
    <?php 
        if (file_exists($file)) {
            include($file);
        }
    ?>
</div>
// ... other code ...
于 2011-11-22T17:18:29.453 回答