php框架 - php自己尝试写了模板引擎,最后display方法其实就是require一个html文件,为什么会输出呢?
ringa_lee
ringa_lee 2017-04-11 10:07:32
[PHP讨论组]

php require函数遇到文本就会输出吗?
这是我写的模板类:
<?php

/**
 * User: 火蜥蜴制作
 */

namespace Core;

// 模板类
class Template
{
    private $data = [];
    private $path = ''; // 模板路径

    public function __construct() {
        $this->path = Config::get('project.template_path');
    }

    /**
     * 模板赋值
     * @param $key
     * @param $value
     */
    public function assign($key, $value) {
        if(is_array($key)) {
            $this->data = array_merge($this->data, $key);
        } else {
            $this->data[$key] = $value;
        }
    }

    /**
     * 获取路径
     * @param $file
     */
    private function getFilePath($file) {
        $params = explode('.', $file);
        // 模板路径已经加了分隔符
        $path = ROOT . DIRECTORY_SEPARATOR . $this->path;
        foreach ($params as $key => $param) {
            if($key == count($params) - 1) {
                $path .= $param;
            } else {
                $path .= $param . DIRECTORY_SEPARATOR;
            }
        }
        return $path . '.html';
    }


    public function display($file) {
        if(empty($file)) {
            throw new \Exception("Template Can Not Be Empty");
        }
        $realPath = $this->getFilePath($file);
        if(is_file($realPath)) {
            extract($this->data);
            require($realPath);
        } else {
            throw new \Exception("Template:<code>{$realPath}</code> Not Found");
        }
    }
}
ringa_lee
ringa_lee

ringa_lee

全部回复(3)
大家讲道理
  1. require不是函数

  2. require的功能是把后面的字符串作为文件名,不论文件扩展名是不是.php,都认为那个文件是php程序,引入到当前程序中运行。

  3. php程序如果没有被<?php?>包起来,就会直接输出。

PHP中文网

require会把引用的文件当做PHP文件执行,不管是什么后缀名的文件(没有后缀名都可以),有的PHP木马利用这点来绕过防火墙。
PHP代码需要放在<?php ?>之间才会执行。

黄舟

蟹妖.

当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中需要作为 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。

includerequrie一个文件时, 文件中没有php起始标记和结束标记<?php ?>的位置都被当成html解析.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号