当我在浏览器中显示源代码时,将显示PHP代码

时间:2012-02-18 15:29:18

标签: php

我试图使用模板来创建一个多语言网站,所以我创建了一个名为语言的文件夹,其中包含en.php和fr.php 这是en.php的代码:

<?php
class Index {

    public $filename;
    public $assigned_vars = array();

    public function set($key, $value) {
        $this -> assigned_vars[$key] = $value;
    }

    public function display() {
        if (file_exists($this -> filename)) {
            $output = file_get_contents($this -> filename);
            foreach ($this->assigned_vars as $key => $value) {
                $output = preg_replace('/{' . $key . '}/', $value, $output);
            }
            echo $output;
        } else {
            echo "*** Missing template ***";
        }
    }

}

$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Welcome");
$index -> set('first_name', "Welcome to our website.");
$index -> display();
?>

这是fr.php的代码:

<?php
class Index {

    public $filename;
    public $assigned_vars = array();

    public function set($key, $value) {
        $this -> assigned_vars[$key] = $value;
    }

    public function display() {
        if (file_exists($this -> filename)) {
            $output = file_get_contents($this -> filename);
            foreach ($this->assigned_vars as $key => $value) {
                $output = preg_replace('/{' . $key . '}/', $value, $output);
            }
            echo $output;
        } else {
            echo "*** Disparus modèle ***";
        }
    }

}

$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Bienvenue");
$index -> set('first_name', "Bienvenue sur notre site.");
$index -> display();
?>

然后我创建了一个名为templates的文件夹,并创建了一个名为index1.php的文件

这里是index1.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>{page_title}</title>
    </head>
    <body>
        {first_name}
        <br/>
        <a href="?lang=en-us">english</a>
        <a href ="?lang=fr">French</a><br />
        <?php
        echo strftime("Y", time());
        ?>
    </body>
</html>

然后我创建了常规的index.php 这是index.php的代码:

<?php
if (isset($_GET['lang'])) {
    setcookie('language_test', $_GET['lang'], time() + (60 * 60 * 24 * 7));
    if ($_GET['lang'] == "fr") {
        require ('languages/fr.php');
    } else {
        require ('languages/en.php');
    }
} else {
    require ('languages/en.php');
}
?>

这是我的问题当我尝试在我的浏览器中显示index.php它工作正常但是index1.php中的php代码没有显示任何这个strftime();但是当我尝试查看源代码时这个 的index.php 它告诉我这个:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Welcome</title>
    </head>
    <body>
        Welcome to our website.
        <br/>
        <a href="?lang=en-us">english</a>

        <a href ="?lang=fr">French</a><br />
        <?php
        echo strftime("Y", time());
        ?>
    </body>
</html>
提前谢谢。抱歉这么久,对不起我糟糕的英语。

2 个答案:

答案 0 :(得分:2)

当您调用file_get_contents($this -> filename);时,它只会将strftime("Y", time());部分转换为字符串。所以它不会执行。

index1.php中,您应使用{time}代替

<?php
echo strftime("Y", time());
?>

所以它看起来像

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>{page_title}</title>
</head>
<body>
    {first_name}
    <br/>
    <a href="?lang=en-us">english</a>
    <a href ="?lang=fr">French</a><br />
    {time}
</body>

现在在en.phpfr.php添加时间,如下所示

$index -> set('time', strftime("%Y", time()));

最好不要重新发明模板库。有很多可用的。请参阅此博客文章top 25 php template engines

答案 1 :(得分:0)

感谢所有试图帮助我的人。 我看了另一个问题,我没有使用聪明的

找到答案
<?php
class Index {

    public $filename;
    public $assigned_vars = array();

    public function set($key, $value) {
        $this -> assigned_vars[$key] = $value;
    }

    public function display() {
        if (file_exists($this -> filename)) {
            ob_start();
            include ($this -> filename);
            $output = ob_get_clean();
            foreach ($this->assigned_vars as $key => $value) {
                $output = preg_replace('/{' . $key . '}/', $value, $output);
            }
            echo $output;
        } else {
            echo "*** Missing template error ***";
        }

    }

}

$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Welcome");
$index -> set('content', "Welcome to our website.");
$index -> display();
?>

问题是,Shiplu说我调用了file_get_contents();

现在我可以在index1.php中完成我的for循环而没有任何问题

所以我希望我能给你们一些有用的东西 这真是有史以来最好的网站, 感谢大家试图帮助我。

祝大家度过美好的一天