【Thinkphp】解决Function get_magic_quotes_gpc() is deprecated问题

在最新版的Wamp搭建web环境的时候,用thinkphp开发项目就会出现一个“Deprecated: Function get_magic_quotes_gpc() is deprecated”的提示警告,请看如下截图:

20131230105613

 

经“度娘”一查,发现php版本高了,而get_magic_quotes_gpc() 这个函数在所使用的php版本中弃用了。

20131230105845

 

解决方法:

找到使用该函数的文件: ThinkPHP\Common\runtime.php

//   系统信息
if(version_compare(PHP_VERSION,'5.4.0','<')) {
    ini_set('magic_quotes_runtime',0);
    define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()?True:False);
}else{
    define('MAGIC_QUOTES_GPC',false);
}

修改为如下:

//   系统信息
if(version_compare(PHP_VERSION,'5.4.0','<')) {
    //ini_set('magic_quotes_runtime',0);
    //define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()?True:False);
    define('MAGIC_QUOTES_GPC',ini_set("magic_quotes_runtime",0)?True:False);
}else{
    define('MAGIC_QUOTES_GPC',false);
}

效果:

20131230110653

 

【JQuery】Ecshop与Jquery冲突的完美解决方案

ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。

但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就跟jQuery冲突了。因为众所周知的,jQuery对各种JavaScript对象进行了扩展。
这一切其实都很容易理解,各有各的理由十分自然,但头痛和无奈的就变得在我们这些使用者身上了。在ECShop论坛上原来也有很多朋友提出了这个问题,也提出了各种各样的方法,我尝试了一些,不好或者甚至无用,所以只好自己动手了。
解决思路大概就是屏蔽ECshop扩展的toJSONString方法,用别的函数代替。
为了照顾下小菜们,就写详细点吧。

一,修改默认js文件

1、首先复制一份 transport.js 改名为 transport.org.js 提供给后台使用
2、屏蔽掉transport.js里的toJSON功能 行数大概有497-737行之间
由if ( ! Object.prototype.toJSONString) { 开头的代码。
修改352行为:
legalParams = “JSON=” + $.toJSON(params);

修改408行为:

result = $.evalJSON(result);

屏蔽掉global.js里的如下代码(第10-13行):

Object.prototype.extend = function(object)
{
  return Object.extend.apply(this, [this, object]);
}

3、修改index.js文件44行改为:

var res = $.evalJSON(result);
4、修改common.js文件
第34行改为:
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + $.toJSON(goods), addToCartResponse, ‘POST’, ‘JSON’);

第850行改为:

Ajax.call(‘flow.php?step=add_package_to_cart’, ‘package_info=’ + $.toJSON(package_info), addPackageToCartResponse, ‘POST’, ‘JSON’);

第1056行改为:

Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + $.toJSON(goods), addToCartResponse, ‘POST’, ‘JSON’);
5、修改compare.js文件
第49行改为:
 this.data = $.evalJSON(cookieValue);

第67行改为:

var obj = $.evalJSON(cookieValue);

第133行改为:

document.setCookie(“compareItems”, $.toJSON(this.data));

6、修改global.js文件

第16行改函数名 :

function $e()

第114和126行都改为:

var element = $e(element);

 二,修改后台调用部分

7、<!———–路径修改———–>

修改后台头部引入transport.js路径 admin/templates/pageheader.htm 第9行改为:

{insert_scripts files=”../js/transport.org.js,common.js"}

admin/templates/menu.htm

151行改成

 {insert_scripts files="../js/global.js,../js/utils.js,../js/transport.org.js"}

  三,修改前台模板部分

8、修改themes/default/library/page_header.lbi文件在

{insert_scripts files=’transport.js,utils.js’}

上面加上如下代码

{insert_scripts files=’jquery.js,jquery.json.js’}

9、<!—–修改文件—–>

library/comment_list.lbi
第188行 :
Ajax.call(‘comment.php’, ‘cmt=’ + $.toJSON(cmt), commentResponse, ‘POST’, ‘JSON’);
10、compare.dwt
第20行 :
var obj = $.evalJSON(document.getCookie(“compareItems”));

第24行 :

document.setCookie(“compareItems”, $.toJSON(obj));
11、flow.dwt
第138行 :
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + $.toJSON(goods), collect_to_flow_response, ‘POST’, ‘JSON’);

第199行 :

 Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + $.toJSON(goods), fittings_to_flow_response, ‘POST’, ‘JSON’);

12、<!—–jquery文件需置顶的dwt文件—-jquery.js文件需要在compare.js文件加载前加载,否则会报错—–>

brand.dwt
brand_list.dwt
category.dwt
exchange_list.dwt
search.dwt
如:
{* 包含脚本文件 *}
{insert_scripts files=’jquery.js,jquery.json.js’}
{insert_scripts files=’common.js,global.js,compare.js’}

注:本文来自于Ecshop模板堂

【JQuery】动画与效果

1.基本效果

匹配元素从左上角开始变浓变大或缩小到左上角变淡变小

①隐藏元素

除了可以设置匹配元素的display:none外,可以用以下函数

hide(speed,[callback])  返回值:jQuery  参数-speed:三种预订速度之一的字符串String(slow,normal,fast)或表示动画时长的毫秒数Number  callback:在完成动画时执行的函数,每个匹配元素执行一次

slow=600毫秒  normal=400毫秒  fast=200毫秒

以优雅的动画隐藏所有匹配的元素,并在隐藏完成后可选的触发一个回调函数。

②显示元素

show(speed,[callback])    以优雅的动画显示所有匹配的元素,并在显示完成后可选的触发一个回调函数。

③交替显示隐藏

toggle(speed,[callback])  以优雅的动画切换匹配元素的可见状态,原来可见切换为不可见,原来不可见切换为可见。

<input type="button" id="hide1" value="hide()" />
<input type="button" id="show1" value="show()" />
<input type="button" id="toggle1" value="toggle()" />
<div  id="1" style="width:100px; height:100px; background-color:Green;"></div>
$(function(){
$("#hide1").click(function(){$("#1").hide(700)});
$("#show1").click(function(){$("#1").show(700)});
$("#toggle1").click(function(){$("#1").toggle(700)});
})

2.滑动效果

①向上收缩效果

slideUp(speed,[callback])  通过高度的变化方式向上隐藏元素,并在隐藏完成后可选的触发一个回调函数。

②向下展开效果

slideDown(speed,[callback])  通过高度的变化方式向下显示元素,并在显示完成后可选的触发一个回调函数。

③交替伸缩效果

slideToggle(speed,[callback]) 切换匹配元素的高度的方式来改变可见状态,原来可见切换为不可见,原来不可见切换为可见。

$("#slideup1").click(function(){$("#1").slideUp(700)});
$("#slidedown2").click(function(){$("#1").slideDown(700)});
$("#slidetoggle").click(function(){$("#1").slideToggle(700)});

3.淡入淡出效果

通过控制匹配元素的不透明度来实现元素的显示与隐藏

①淡入效果

fadeIn(speed,[callback])  通过不透明度的变化逐渐将匹配元素显现出来

$(“#fadein”).click(function(){$(“#1”).fadeIn(“slow”)});

②淡出效果

fadeOut(speed,[callback])  通过不透明度的变化逐渐将匹配元素隐藏起来

③自定义不透明度

淡入或淡出的最终结果为自定义的透明度

fadeTo(speed,opacity,[callback])  opacity的值域是0~1之间

4.自定义动画效果

①自定义动画

animate(params,duration,[easing],[callback])  返回值:jQuery  参数-params:一个包含类似CSS样式设置的json对象,该对象决定了匹配元素要变成什么样子,如:{height:”100%”,width:”70%”,fontSize:”4em”,color:”white”}但这些样式属性的名字与CSS的命名不同,它们使用骆驼命名法如fontSize 而在CSS中是font-size   duration:类似于前面几个函数的speed参数,表示匹配元素从开始变化到最终结束变化的时长,其值的设置也一样String,Number  easing:这个不太明白,要使用的擦除效果的名称(需要插件支持),默认jQuery提供linear和swing|String   callback:和前面一样

这个函数可不像看上去那么简单,有几点需注意1.既然该函数是将匹配元素从原来样子变化成函数中params参数中设置的样子,那么就必须有原来的样子,即params中设置的样式属性必须在原来的样子中有设置过,不能本来没有设置border,却在params中这样设置{borderStyle:”solid”,borderWidth:”1px”}     2.就是前面提到过的样式属性的骆驼命名法      3.有些样式属性animate是不支持的,即便你在原来的样子里有设置过,比如background-color,在params中不能想当然的就设置了backgroundColor样式属性。

<div id="3" style="width:200px; height:300px; border:solid 1px; position:absolute; left:-180px;">
 用户名:<input type="text" /><br />
 密码:<input type="password" /></div>
$(function(){
$("#3").mouseover(function(){$(this).stop().animate({left:"0px"})
}).mouseout(function(){$(this).stop().animate({left:"-180px"},3000)})
})

②jQuery动画队列

把针对某个匹配元素的多个动画操作放入一个队列中进行管理,这是默认设置,这样队列中的动画会按先后顺序一个一个执行

如果不希望某个动画按顺序执行,而是希望它最先执行,可以如下设置animate()函数,这是animate函数的有一种写法,它将除parmas以外的参数也用一个json对象来表示

$(“#id”).animate(parmas,{queue:false,duration:1000}).animate(parmas,{queue:false,duration:1000})

以上俩动画会同时执行,总耗时1秒,而

$(“#id”).animate(parmas,{duration:1000}).animate(parmas,{duration:1000})

这俩动画会一个一个执行,总耗时2秒

【thinkphp】解决IF标签变量与变量比较出现的问题

在用thinkphp写项目的时候,发现一个问题:foreach标签循环显示数据时,如果在该标签中需要用到IF标签来判断就会出现问题,请看如下代码:

<if condition="$id < 5 ">
value1
<else /> 
value2
</if>

这种方式是不会出问题,但是遇到二位数组变量或者三维数组变量比较的时候,就会对比不出来,请看代码:

<foreach name="datas.cats_datas" item="cats">
       <option value="{$cats.cat_id}" <if condition="$datas.datas.cat_id eq $cats.cat_id ">selected="selected"</if> >{$cats.cat_name}</option>
</foreach>

 解决方法:

<foreach name="datas.cats_datas" item="cats">
        <option value="{$cats.cat_id}" <if condition="$datas['datas']['cat_id'] eq $cats['cat_id'] ">selected="selected"</if> >{$cats.cat_name}</option>
</foreach>

 原因:

第一层标签以下不支持$a.name这种点的写法,所以大家尽量使用$a[‘name’]这种。

【技术排行榜】2013年12月编程语言排行榜:Transact-SQL是年度语言?

TIOBE 于今日公布了2013年12月编程语言指数排行榜,同去年12月份相比,排名前三的还是 C、Java、Objective-C。从表单上看前8名的顺序保持不变,第9位的Transact-SQL是今年的一匹黑马,从今年9月份第一次闯入前十开始,就一直呈居高走势。不得不说,2013年Transact-SQL的确大势。

离TIOBE 宣布 2013 年“年度编程语言”还有 1 个月时间。(“年度编程语言”是授予在一年中比率增长量最高编程语言的,详情下图中右侧的“变动”列)。今年貌似只有 4 个候选语言来争夺这一奖项。Transact-SQL 是最大的候选语言,在这一年中的比率增长量是 1.30%,其他候选分别是:Visual Basic .NET (+0.80%)、JavaScript (+0.53%)和 F# (+0.41%)。

另外需要特别说明的是,从本月起 TIOBE 排行榜改版了。其中最重要的改进是“编程语言长期走势图”变成了可交互的图表。 点击图片右侧的语言名称,可以显示/关闭某语言的走势曲线。接下来的几周或几月,TIOBE 会把其他目前没有的功能给补回来。另外一个比较重要的变化是,所有语言的比率之和是 100%,原来只有 Top 50 的语言的比率之和才是 100%。故而所有语言的比率都会下降一些了。

编程语言排行榜Top 20

前十名编程语言走势图:

21-50编程语言排名:

后50名的编程语言排行:

(Visual) FoxPro, 4th Dimension/4D, Alice, Automator, Awk, bc, BlitzMax, Bourne shell, C++/CLI, CFML, cg, CL (OS/400), Clean, Clojure, DiBOL, Erlang, Factor, Forth, GNU Octave, Icon, Inform, Informix-4GL, Io, J, J#, JavaFX Script, LabVIEW, M4, Magic, Modula-2, Modula-3, Moto, NATURAL, NXT-G, OCaml, Oz, PILOT, Processing, Prolog, Pure Data, Q, S, S-PLUS, Scratch, Seed7, Standard ML, TOM, VHDL, X10, Z shell

来自于:51cto

【Windows】安装和使用FTP for Windows2008

云服务器默认使用Windws 2008 IIS 中自带的FTP服务器。

1、添加FTP帐号

A. 选择“服务管理器”->“配置”->“本地用户和组”->“用户”;在空白处右键选择“新用户”;

B. 输入用户名,全名和描述可以不填写;输入两遍密码;可以设置“用户不能修改密码”和“密码永不过期”;选择“创建”;

2、 打开Internet 服务(IIS)管理器

启动左下角任务栏中的“服务器管理器”,选择“角色”->”Web服务器IIS”->”Internet 服务(IIS)管理器”来打开IIS管理界面;

3、启动添加FTP站点向导

选择左侧连接中的“网站”,点击右侧操作窗口中的“添加FTP站点”;

4、启动“添加FTP站点”向导

输入FTP站点名称和FTP指向的路径;选择“下一步”;

5、 绑定和SSL设置

选择你希望开放的IP地址(默认选择全部未分配,即所以IP都开放)和端口(默认选择21);SSL请根据您的具体情况选择,如无需使用SSL,请选择“无”;选择“下一步”;

6、身份验证和授权信息

身份验证请选择“基本”,不建议开启“匿名”;授权中允许访问的用户可以指定具体范围,如果FTP用户不需要很多的话,建议选择“指定用户”,权限选择“读取”和“写入”;选择“完成”。

7、 测试FTP连接

您可以在“我的电脑”地址栏中输入ftp://IP来连接FTP服务器,根据提示输入账户密码。

如果您开启了windows默认的防火墙,默认是外网连接不了ftp的,需要设置防火墙策略,允许在windows防火墙的例外里面添加“C:\windows\system32\svchost.exe”程序,才能从外网成功访问ftp

8)打开windows防火墙,选择允许程序或功能通过windows防火墙

9)选择允许运行另一程序,在添加程序中选择浏览,选择C:\windows\system32\svchost.exe就行打开添加,这时windows服务器主进程就添加在防火墙例外中,点击确定后,这时就可以从外网访问ftp。

注:来自阿里云

【技术杂谈】360安全卫士截获IE浏览器的地址栏?

作为网站开发的程序猿,一直用谷歌浏览器来测试项目。但是为了测试项目的兼容性,于是打开了一直很少用的IE浏览器,结果一打开就发现一个问题:IE9.0浏览器竟然可以显示网站名片(备案信息,认证信息等等),请看如下截图(以百度为例):

看来IE9.0浏览器越来越洋气了,好久没用IE浏览器,竟然还加了这功能!不对!这个功能好像和360安全浏览器一模一样的。于是猜想下打开360官网看下效果会显示什么信息?

也是一样的显示网站名片信息。但是有个网友评价功能很明显是360的,以及该网站名片功能和360安全浏览器上的网站名片功能是一样的,所以可以推断这个功能是360的。但是它是怎么做到的?接着往下分析:

查看了ie浏览器的加载项管理,发现有两个关于360的加载项:

但是这两个加载项都被禁用了…

于是想到的是关闭360安全卫士试下,结果一关闭,效果还是一样的,依然可以显示该网站名片功能。

索性再重启下IE浏览器,一打开网站,该名片功能消失,IE浏览器地址栏正常了。

这个算不算360安全卫士截获IE浏览器的地址栏?首先关闭360安全卫士,该功能依然存在,但是重启浏览器该功能就消失了,程序猿猜测是360安全卫士通过钩子技术注入到IE浏览器中,所以就可以实现以上的效果!

你们认为呢?….