请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

楼主: jake

speed.php问题求助

[复制链接]
发表于 2015-10-26 09:18:04 | 显示全部楼层
凡是通过$this->xxx指定的模板变量,在进行调用的时候都会过滤掉html代码。看了下缓存,框架貌似在每个变量都会自动加这个echo htmlspecialchars   的函数。
有些变量不需要转义,比如友情链接、自定义底部信息(会包含hr  br   p  等标签),有什么办法可以解决这个问题么?@jake
 楼主| 发表于 2015-10-26 09:47:26 | 显示全部楼层
passionxlife 发表于 2015-10-26 09:18
凡是通过$this->xxx指定的模板变量,在进行调用的时候都会过滤掉html代码。看了下缓存,框架貌似在每个变量 ...

这是默认的安全策略:防止XSS攻击,所以会自动进行过滤。
如果变量不需要过滤,可以在后面加入nofilter标记,比如说 <{$myhtml nofilter}>这样就不会被转码了。


发表于 2015-10-28 16:30:06 | 显示全部楼层
希望J大加入在修改模板后自动编译的功能,现在每次修改模板后都要去手动删缓存。
 楼主| 发表于 2015-10-28 17:22:45 | 显示全部楼层
xzp44 发表于 2015-10-28 16:30
希望J大加入在修改模板后自动编译的功能,现在每次修改模板后都要去手动删缓存。 ...

请问一下是旧版还是新版,不过新旧版都没有这样的问题,除非旧版情况下开启了模板缓存。

1. 新版是自动判断模板文件修改时间,如果有更新就会重新编译。具体代码在:https://github.com/SpeedPHP/spee ... /lib/speed.php#L386
流程是先根据模板的filemtime(修改时间),来拼装新的编译文件的地址,然后删除原模板的编译文件,最后按新地址生成新的编译问题。

PS:filemtime在win和*nix上面都运作正常http://cn.php.net/manual/zh/function.filemtime.php,stats的缓存也是在同一次php执行中发现——但是修改文件并不是php执行行为,所以stats不会缓存。http://cn.php.net/manual/zh/function.clearstatcache.php

2. 开启APC的OPCODE缓存情况下,会需要清理OPCODE才能更新内容,但是不涉及模板,模板生成还是按修改时间。

3. 旧版的默认情况下不开缓存的,默认编译的话,也是用类似监控filemtime的方式,所以也没有这样的情况。


唯一会发生修改模板后,不马上生效的情况,只有旧版用的smarty,在开启了caching选项后,会产生这样的情况。

对于caching的说明在这里:http://www.speedphp.com/smarty/variable.caching.html

综上,新版没有用到smarty,所以可能楼上说的是旧版的情况。旧版可以关闭caching就不会有这样的问题了。


发表于 2015-10-29 10:50:57 | 显示全部楼层
jake 发表于 2015-10-28 17:22
请问一下是旧版还是新版,不过新旧版都没有这样的问题,除非旧版情况下开启了模板缓存。

1. 新版是自动 ...

我指的是新版,我再去研究一下。谢谢回复。
发表于 2015-11-11 16:36:01 | 显示全部楼层
使用set_error_handler()后,error_reporting ()将会失效。也就是所有的错误(除上述的错误)都会交给自定义的函数处理。 是不是error_reporting这个就不需要了吧 http://www.jb51.net/article/43089.htm
 楼主| 发表于 2015-11-12 08:09:21 | 显示全部楼层
sp_lin 发表于 2015-11-11 16:36
使用set_error_handler()后,error_reporting ()将会失效。也就是所有的错误(除上述的错误)都会交给自定 ...

也不算是失效,error_reporting指的是页面输出错误级别,如果用了set_error_handler,那么错误就不一定是页面输出了。所以也就不属于error_reporting可以控制的范围。

http://cn.php.net/manual/zh/function.set-error-handler.php
发表于 2015-11-12 08:49:41 | 显示全部楼层
jake 发表于 2015-11-12 08:09
也不算是失效,error_reporting指的是页面输出错误级别,如果用了set_error_handler,那么错误就不一定是 ...

恩 是的

发表于 2015-11-16 14:14:44 | 显示全部楼层
新版如何分页????
发表于 2015-11-17 11:49:14 | 显示全部楼层
默认demo下,如何给admin分支设置layout?
controller/admin/BaseController.php
<?php
class BaseController extends Controller{
    public $layout = "admin/layout.html";

    function init(){
        header("Content-type: text/html; charset=utf-8");
        $this->set = $GLOBALS['hb']['set']['pub']+$GLOBALS['hb']['set']['ht'];
    }
}

controller/admin/MainController.php
<?php
class MainController extends BaseController {
   // 首页
   function actionIndex(){
   }
   function actionLogin(){
      echo "login";
   }
   function actionLoged(){
      echo "loged";
   }
}

view/admin/layout.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title><{$set['title']}></title>
    <link href="<{$set['public']}>css/bootstrap.min.css" rel="stylesheet">
    <script src="<{$set['public']}>js/jquery.min.js"></script>
    <script src="<{$set['public']}>js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <{include file=$__template_file}>
</div>
</body>
</html>

view/admin/main_index.html
<div class="test">
    测试内容
</div>


最终浏览器输出的,只有“view/admin/main_index.html”的内容,何故?求解!@jake
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-6-3 07:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表