[PHP]实现屏蔽某国家IP的访问

现在有个需求为[禁止某国家的IP访问网站],思路一为:先获得访问网站的IP,然后判断该IP是否为某个国家的IP,来实现该功能。

获得IP方法如下代码:

function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
  $cip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
  $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif(!empty($_SERVER["REMOTE_ADDR"])){
  $cip = $_SERVER["REMOTE_ADDR"];
}
else{
  $cip = "无法获取!";
}
return $cip;
}

获得IP之后然后判断该IP是属于哪个国家即可,而需要有一个IP库,或者通过get方式从ip138中获得对应地理位置信息。

20140228221939

 

思路二: 通过对.htaccess来屏蔽IP访问,实现代码如下:

Order Allow,Deny
Deny from 222.240.253
Deny from 222.240.253.122
Allow from all

这样的IP段访问就会提示:

Forbidden
You don't have permission to access / on this server.

思路三: 通过获得浏览器语言来实现屏蔽($_SERVER[“HTTP_ACCEPT_LANGUAGE”])

20140228223020

 

实现代码如下:

if(strpos(strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]),'zh-cn')!==false){
  echo "中国IP";
}else{
  echo "非中国IP";
}

[JQuery]实现描点平滑移动

以前写过[定位到某个锚点]功能,使用的是#+描点名称,没有采用平滑功能。而实现平滑移动功能就需要用到JQuery的animate方法来实现动态的移动。请看如下代码:

/**
 * 描点平滑移动
 * 如果传递元素ID,则描点到该元素的位置
 * 如果没有传递元素ID(为空),则返回到顶部
 * @param {type} elements
 * @returns {undefined}
 */
function goto(elements) {
    var pos = 0;
    if (elements !== "") {
        // 定义将要去的描点位置
        pos = $(elements).offset().top;
    }
// 实现平滑移动 1000代表时间ms
    $("html,body").animate({scrollTop: pos-20}, 1000);
}

[技术排行榜] 2014年2月编程语言排行榜:VB.NET成主角 首次排入前十

外国人没有春节,不放新年假。所以说,仅对我们而言2014年2月编程语言排行榜是新年的第一次语言排行榜。没有让我们失望的的是,新一年的开始,总是有惊喜。

本月编程语言排行榜,一到五位分别是:C、Java、Objective-C、C++、C#,和上月比保持不变。Visual Basic .NET闯入了排行榜前十,排在第10位。这样的排名位置状况可算是相当神奇的事情。为什么这么说?归结一下两个原因(也许还有其他原因)。

首先,Visual Basic .NET作为微软Visual Basic 6.0 version(被广泛使用高度好评的语言)的继承者,可算是压力山大。为了能在Microsofts .NET平台上运行,相较于之前的6.0版本,这位“继承者”的前进步伐有些激进,并没有得到大家的认可。因此,导致了一大波软件开发者拒绝迁移至.NET。同时Visual Basic .NET在很长一段时间内遭到大家的诟病。

第二个原因就是,Visual Basic .NET的发展进度在外界看来被微软放缓了。关于这一点,我们在最新的Visual Studio2013版本中就能看到,其中不包含任何新的Visual Basic .NET语言功能。

基于以上两个原因,此次Visual Basic .Net能闯入前十,让我们感到意外。不知道新年的新气象,能不能为Visual Basic .Net,带来好的运气,如同Transact-SQL一般,成为一匹黑马?顺带要说的是,Transact-SQL本月排名第11为,虽然没有进入前十,但是势头依旧饱满。

排行榜前20名:

wKioL1L4hbqwoq6vAABj5UAkaf0380

 

编程语言排行后50名:

1212

 

借此机会,小编也再次为大家总结汇总以下Visual Studio .Net的历史进程和发展。

Visual Basic.NET是基于微软.NET Framework之上的面向对象的中间解释性语言,可以看作是Visual Basic在·Net Framework平台上的升级版本,增强了对面向对象的支持。但由于改动太大,导致VB.net对VB的向后兼容性不好,在业界引起不小的争议。 大多的VB.Net程序员使用Visual Studio .Net作为IDE(integrated development environment).SharpDevelop是另一种可用的开源的IDE。VB.NET需要在.Net Framework平台上才能执行。

微软可视化Basic语言革命

  •  1991年4月,Visual Basic诞生,Visual Basic 1.0 Windows版本发布。这个连接编程语言和用户界面的进步被称为Tripod(有些时候叫做Ruby),最初的设计是由阿兰·库珀(Alan Cooper)完成的。 1992年9月,Visual Basic 1.0 DOS版本发布。
  • 1998年夏天,VB6.0发布。
  •  2001年,Visual Basic .NET和.NET Framework发布。Visual Basic .NET正式诞生。
  • 2005年,微软宣布将不会再对非.NET版本的VB进行支持。
  • 2010年,Visual Basic .NET随Visual Studio 2010发布,不再提供单独的Visual Basic .NET IDE。

与早期VB的关系

不能简单认为VB .net是VB的新版本。首先它们一个是完全面向对象的语言,而另一个是不是完全面向对象的,其次VB .NET是构建于.Net framework之上的。当然,它们同属Basic系列语言,又同为微软所开发,语法上有一定的相似或沿袭是很正常的,但不能因此认为VB .NET是VB的升级版。

对于想从VB转到VB .NET的开发者来说,如果你只是喜欢Basic系列语言的代码风格,那么你的迁移会很顺利,如果你想沿袭之前VB的编程思想和习惯,你会很苦恼,原因之一就是VB .NET贯穿的是完全面向对象的思想,而VB不是。

微软为使VB开发者更容易转到VB .NET,兼容一些VB6函数和库的用法,但是比不上.NET语言中自带的可替换的函数和库来得高效,所以我们应该尽量使用.NET下的新方法。微软还提 供了VB到VB .NET的自动转换器,虽几经改进,但仍无法转换全部代码,几乎所有非小型程序都需要人工修改以完成编译。为了运行优化,大多程序需要大量工作去重构。

争议与解释:许多资深的VB程序员抱怨VB .NET,因为VB .NET丢掉了许多不再发行的VB6中使用的大量语言constructs和用户界面功能,并且对保留下来的东西也改变了语意。其实不应该再把VB和VB .NET做功能上的比较,因为它们除了有些语法相似外,可以说是完全不同的两种语言。

Visual Basic .NET与VB都代表了Basic系列语言的编码风格,Visual Basic .NET是这种编码风格在.NET平台上的继承,而不是同系列语言VB的沿袭。

版本历史

Visual Basic .NET 2002

2002年Visual Basic .NET 问世,此后Visual Basic 包含在 Visual Studio套装中。该版本又被称为VB 7.0,是与C#一起在2002年发布的最初始的VB.net版本。C#是一门新设计.Net语言并且语法上和Java有一定的相似性,所以被大力宣传为微软对付JAVA的 王牌,受到媒体极力关注。然而VB.NET则相反被错误地认为仅仅是VB的一个升级(故有时被称为VB7),它的受关注度也因此较低,当然VB社区以及喜 欢Basic系列风格的语言的人还是很关注它的。那些试用过此版VB.NET的人在层层幕布下发现一个强大却艰深的语言。不过任何一种语言都是有弱点的, 当然后面这一点也是.NET语言的共性,那就是运行的计算机上必须装相应版本的.Net framework。

Visual Basic .NET 2003

该版本是和.NET Framework 1.1一起发布的。新功能包括对.NET Compact Framework的支持和更好的VB升迁向导。并改进了运行状况,IDE稳定性(尤其是后台编译器),以及运行时RunTime稳定性。另外,VB.NET2003还有一个学院版Visual Studio .NET 2003 Academic Edition (VS03AE),它是分发给各国某些学者免费使用的版本。

Visual Basic .NET 2005

该版本是VB.Net的重大转变。但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。

Visual Basic .NET 2008

Visual Basic 2008于2008年2月1日发布。通过几年的发展,它已成为一种专业化的开发语言和环境。用户可用 Visual Basic 快速创建 Windows 程序,现在还可以编写企业水平的客户/服务器程序及强大的数据库应用程序。

Visual Studio 2010

Visual Studio 2010于2010年4月12日上市,其中包含 Visual Basic .NET 2010 。Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010集成开发环境(IDE) 的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview–CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库等。

Visual Studio 2012

从该版本开始VB.NET已没有单独发售的IDE了,微软给Visual Basic .NET 以及C#开发者的IDE就只有Visual Studio 了。该版本增加了modern(原metro)风格的支持等众多新特性。

来源于51cto.

[JQuery]清除标签的style样式

对于html标签而言,一般都是在css文件中,通过id或者class来添加标签样式,所以想给标签换样式的话,就直接可以更换标签的class属性值。但是需要修改标签的style属性值,例如想清除掉style属性的样式值。实现代码如下:

HTML代码:

<div id="jhonse" style="padding:5px; "></div>

JQuery代码:

$("#jhonse").removeAttr("style"); //ie,ff均支持

$("#jhonse").attr("style","");   //ff支持,ie不支持

[php] 解决HTTP request length 139072 (so far) exceeds MaxRequestLen (131072)

在用KindEditor插件上传图片的时候,出现如下错误提示界面:

20140209092501

 

然后再查看apache错误日志,发现是如下问题:

[Sun Feb 09 09:21:54.919921 2014] [:warn] [pid 4736:tid 1104] [client 127.0.0.1:51513] mod_fcgid: HTTP request length 139072 (so far) exceeds MaxRequestLen (131072)

上网查资料,发现fastcgi默认的请求大小为131072,于是在apache配置中添加了MaxRequestLen 配置就好了。

找到apache的配置文件httpd.conf文件,找到如下代码:

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi .php
# Where to look for the php.ini file?
FcgidInitialEnv PHPRC        "d:/wamp/bin/apache/apache2.3.14/bin"
# Set PHP_FCGI_MAX_REQUESTS to greater than or equal to FcgidMaxRequestsPerProcess
# to prevent php-cgi process from exiting before all requests completed
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS      1000
# Maximum requests a process should handle before it is terminated
FcgidMaxRequestsPerProcess                 1000
# Maximum number of PHP processes
FcgidMaxProcesses                          15
# Number of seconds of idle time before a php-cgi process is terminated
FcgidIOTimeout                             120
FcgidIdleTimeout                           120
#Path to php-cgi
FcgidWrapper "d:/wamp/bin/php/php5.4/php-cgi.exe" .php
# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php
</IfModule>

添加MaxRequestLen属性:

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi .php

MaxRequestLen  10000000000

# Where to look for the php.ini file?
FcgidInitialEnv PHPRC        "d:/wamp/bin/apache/apache2.3.14/bin"
# Set PHP_FCGI_MAX_REQUESTS to greater than or equal to FcgidMaxRequestsPerProcess
# to prevent php-cgi process from exiting before all requests completed
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS      1000
# Maximum requests a process should handle before it is terminated
FcgidMaxRequestsPerProcess                 1000
# Maximum number of PHP processes
FcgidMaxProcesses                          15
# Number of seconds of idle time before a php-cgi process is terminated
FcgidIOTimeout                             120
FcgidIdleTimeout                           120
#Path to php-cgi
FcgidWrapper "d:/wamp/bin/php/php5.4/php-cgi.exe" .php
# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php
</IfModule>

然后再重启apache就正常了!

[JQuery]模拟鼠标点击事件

在页面弹出框,采用的是lightbox_me插件,而需要用到一个模拟点击关闭事件,大致功能是当异步提交数据之后,如果数据正常提交,提示提交成功,并把弹出框隐藏,当时想到的是重新写个方法来实现,但是弹出框中有一个关闭按钮,刚好实现了如上功能,所以只需模拟鼠标点击该按钮即可。请看如下截图:

20140208094236

 

实现模拟点击事件代码如下:

$(".close").trigger("click");

方法说明:

定义和用法

trigger() 方法触发被选元素的指定事件类型。

触发事件

规定被选元素要触发的事件。

语法

$(selector).trigger(event,[param1,param2,...])
参数 描述
event 必需。规定指定元素要触发的事件。

可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。

[param1,param2,…] 可选。传递到事件处理程序的额外参数。

额外的参数对自定义事件特别有用。