驳《谁说nginx不支持.htaccess文件?》

今天,有哥们试用了wnmpserver,跟我提了些建议,先表示感谢。

不过最后讨论的一个问题让我很惊讶,建议我让nginx支持.htaccess,我表示没办法,因为我知道.htaccess是apache的东西,nginx没法支持。
继续阅读驳《谁说nginx不支持.htaccess文件?》

Apache 2.4发布 直接瞄准Nginx

最流行的Web Server发布了一个重大升级版,Apache HTTP Server 2.4的一个重要目标是大幅改进性能。新版改进了缓存、代理模块,会话控制,改进异步读写支持,等等。

Apache HTTP Server项目管理委员会和Apache基金会主席Jim Jagielski表示,他们希望终端用户能真正看到性能进步,表示Apache 2.4比许多以速度见长的Web Server更快,例如Nginx。

ThinkPHP中数据操作心得

模板中使用函数,相信大部分的TPer都知道也用过吧。
案例:
获取用户名的方法

function get_username($uid){
    $row = M('User')->getbyUid($uid);
    return $row['username'];
}

在模板中通过uid显示用户名

<volist name="rows" id="row">
<tr>
    <td>{$row.uid}</td>
    <td>{$row.uid|get_username}</td>
</tr>
</volist>

这种方法相信大伙应该很常用吧?这种用法有两个不好的地方:
1、过多数据库操作;
2、数据操作的位置不合理,数据库连接过长。

优化方案:
1、尽可能把能合并的数据库操作;
2、数据操作应该保留在数据层,尽可能避免在视图里操作数据库,建议在视图开始前执行mysql_close(),断开数据库连接。

iframe实现无刷新上传文件

iframe实现无刷新上传文件完整例子。
【html】

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<body>

<img style="border:1px solid #CCC; padding:2px;" src="#" alt="" width="120" height="80" class="iframeupload" />
<img style="border:1px solid #CCC; padding:2px;" src="#" alt="" width="120" height="80" class="iframeupload" />
<img style="border:1px solid #CCC; padding:2px;" src="#" alt="" width="120" height="80" class="iframeupload" />
<img style="border:1px solid #CCC; padding:2px;" src="#" alt="" width="120" height="80" class="iframeupload" />
<img style="border:1px solid #CCC; padding:2px;" src="#" alt="" width="120" height="80" class="iframeupload" />

<!-- uploader start -->
<div style="display:none;">
<form id="uploadform" action="/upload.php" method="post" enctype="multipart/form-data" target="uploadiframe">
    <input type="file" name="photo1" />
</form>
<iframe src="" name="uploadiframe" id="uploadiframe"></iframe>
</div>
<!-- uploader end -->

</body>
</html>

【js】

var $current_img    = null;
// 上传回调方法
function upload_process(info){
    // 控制台调试,可能是因为console没定义导致IE无法使用此功能
    typeof console.log!=='undefined' && console.log(info);
    // 上传成功
    if(typeof info.status!=='undefined' && typeof info.path!=='undefined' && info.status==1 && info.path!=''){
        // 改变图片src,实现实时预览
        $current_img.prop('src', info.path);
        // 返回
        return;
    }
    // 上传失败则提示错误信息
    alert(info.info);
    // 返回
    return;
}
$(function(){
    // 定义上传表单全局变量
    var $upload_form    = $('#uploadform');
    // 监听图片点击事件
    $('img.iframeupload').on('click', function(){
        // 更改当前图片为焦点对象
        $current_img    = $(this);
        // 重置上传表单,解决默认上一次选择文件名问题
        $upload_form[0].reset();
        // 触发表单input的click事件,实现弹出文件选择框
        $upload_form.find('input:file:eq(0)').click();
    });
    // 监听input的change事件,当选择图片后实现自动提交表单
    $upload_form.find('input:file:eq(0)').on('change', function(){
        $upload_form.submit();
    });
});

【php】

<?php
$retval = array('status'=>0, 'info'=>'', 'path'=>'');
if(/*upload success*/){
    $retval['status'] = 1;
    $retval['path'] = 'somepath';
}else{
    $retval['info'] = 'someerror';
}
echo "<script>parent.window.upload_process(".json_encode($retval).");</script>";
exit;

经测试,IE报“SCRIPT5: 拒绝访问”错误,无法正常上传文件。

两步教你开启KindEditor代码高亮功能

KindEditor(下面简称KE)虽然是一个国产货,可并不比洋货(CKEditor)逊色,尤其是插件和API功能,越来越出色了,其中4.0推出了代码高亮功能。
不过该功能在官方文档上并没有相关的说明,这一点要批评一下,这么好使的功能为什么不让大家都用上呢。
我整理了一下用法,供大家参考。

前台页面先加载插件脚本和样式:

<link rel="stylesheet" type="text/css" href="&#91;kePath&#93;/plugins/code/prettify.css" />
<script type="text/javascript" src="&#91;kePath&#93;/plugins/code/prettify.js"></script>
<script>
$(function(){ prettyPrint(); });
</script>

后台编辑器声明的时候加上插件样式,缺省这个参数,编辑器中插入代码跟普通文字一样,并且再次编辑的时候被隐藏了,所以这一步很关键。

var editor = KindEditor.create('textarea.editor', {
    cssPath : ['[kePath]/plugins/code/prettify.css']
});

html判断浏览器版本

判断浏览器版本的方法有很多,但是我个人认为最快,最有效的方法就是利用html来进行,因为无论是用js根据浏览器的属性来判断还是css中的hack,都需要先执行或者先渲染,而html方法则是从根源上上解决了问题(不符合的版本根本就不加载)

html的方法只是简单的一个if判断,应该算是if判断吧。。


其中可以用到的条件:

  • gt 大于
  • lt 小于
  • gte 大于或等于
  • lte 小于或等于
  • ! 不等、除了

比方说如果要匹配高于且包含ie7的版本的话,我们可以这样些

<!--&#91;if gte IE 7&#93;> IE7以及IE7以上版本可识别的内容 <!&#91;endif&#93;-->

下面罗列出来一些常用的判断:

<!--&#91;if !IE&#93;> 除IE外都可识别 <!&#91;endif&#93;-->
<!--&#91;if IE&#93;> 所有的IE可识别 <!&#91;endif&#93;-->
<!--&#91;if IE 5.0&#93;> 只有IE5.0可以识别 <!&#91;endif&#93;-->
<!--&#91;if IE 5&#93;> 仅IE5.0与IE5.5可以识别 <!&#91;endif&#93;-->
<!--&#91;if gt IE 5.0&#93;> IE5.0以及IE5.0以上版本都可以识别 <!&#91;endif&#93;-->
<!--&#91;if IE 6&#93;> 仅IE6可识别 <!&#91;endif&#93;-->
<!--&#91;if lt IE 6&#93;> IE6以及IE6以下版本可识别 <!&#91;endif&#93;-->
<!--&#91;if gte IE 6&#93;> IE6以及IE6以上版本可识别 <!&#91;endif&#93;-->
<!--&#91;if IE 7&#93;> 仅IE7可识别 <!&#91;endif&#93;-->
<!--&#91;if lt IE 7&#93;> IE7以及IE7以下版本可识别 <!&#91;endif&#93;-->

ThinkPHP 3.0RC2 更新日志

ThinkPHP 3.0RC2 ChangeLog

[系统]
[修正] 修正R方法的第二个参数传人数组
[修正] 修正部署模式下的模版编译问题。
[新增] 添加项目的core.php配置文件,用于追加项目核心编译列表文件
[新增] 添加layout方法 用于控制布局入口的文件
[新增] functions函数库添加trace函数,用于页面Trace信息设置和自定义添加显示 并调整页面Trace行为扩展和模板,改为调用trace方法
[改进] 优化alias_import方法
[改进] 改进import的项目类库目录判断
[改进] Think类的buildApp方法改进 模式别名定义和项目别名定义支持同时定义 取消模式的公共文件定义,直接在核心文件列表中加载即可
[改进] 系统函数库增加session函数用于操作session App类改进对session的支持
[改进] 改进View类,如果设置模板引擎为PHP的话 则不调用view_parse标签行为扩展
[改进] 项目自定义trace信息配置文件会合并到系统默认页面Trace中
[改进] LOG类完善 支持配置不同的日子记录方式和其他参数 惯例配置文件增加LOG_TYPE、LOG_DEST和LOG_EXTRA配置 LOG_RECORD_LEVEL 参数更名为LOG_LEVEL
[改进] 优化import方法的文件导入 如果存在类名冲突则不导入
[改进] 改进系统函数库的load方法
[改进] runtime和alias文件添加访问检测
[改进] 修正部署模式下面开启页面trace后 exec运行时间为负数的错误
[改进] 修正Widget类对于think引擎的判断
[改进] 系统路径常量允许被重定义
[删除] 去掉runtime文件中的mkdirs函数
继续阅读ThinkPHP 3.0RC2 更新日志

一个简单的HTML标签搞死64位的Windows 7

这个很小的 iframe 标签(当然了,实际上它运行起来并不小)是一个强大到足以让一个64位的Win7系统崩溃的标签,它将导致 Win7 发生著名的蓝屏错误 Blue Screen Of Death (BSoD). 该漏洞是由 w3bd3vil 报告的。该漏洞在64位的Win7下的Safari 浏览器测试中招,我很讨厌蓝屏,因此没有测试其他浏览器。微软正在进一步验证该漏洞,下面是关于该漏洞的一些技术细节:

<iframe height='18082563'></iframe>

注意:请为自己的测试负责.

描述:
该漏洞是由于 win32k.sys 的一个错误导致内存的崩溃,当页面上包含一个 iframe,其 height 属性是个非常大的值时该错误就会发生。

目前该漏洞仅存在于64位的win7系统。

解决方案:
目前尚无有效方案