嗨,新朋友,很高兴认识你,欢迎来到我的博客。

PHP利用checkdnsrr过滤更有效的邮箱地址

PHP检验邮箱大部分都通过正则,

但是正则依然不能过滤出一些无效的邮件。如:atin@12232ssd.com, 像12232ssd.com这样的域名很可能是不存在的,邮箱存在的前提条件就是域名必须存在。

庆幸的是PHP可以具有检查域名是否有效的函数checkdnsrr:

bool checkdnsrr ( string $host [, string $type = "mx" ] )

注意的是:该函数在php5.3版本下只在Linux下起作用。

function checkEmail($email){
	$exp = "/^[0-9a-zA-Z]+([_a-z0-9\-\.]+)*@[a-zA-Z0-9]{2,}(?:[-.][a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$/";
		if( preg_match($exp, $email) ){
			if(checkdnsrr(array_pop(explode("@",$email)),"MX"))
				return true;
			else
			return false;
		} else {
			return false;
		}
}

兼容阴影,固定DIV位置的CSS样式

阴影CSS:

.shadow{
    width:250px;height:auto;border:#909090 1px solid;background:#fff;color:#333;
    filter:progid:DXImageTransform.Microsoft.Shadow(color=#909090,direction=120,strength=4);/*ie*/
    -moz-box-shadow: 2px 2px 10px #909090;/*firefox*/
    -webkit-box-shadow: 2px 2px 10px #909090;/*safari或chrome*/
    box-shadow:2px 2px 10px #909090;/*opera或ie9*/
/*
for ie:
direction 阴影角度 0°为从下往上 顺时针方向
strength 阴影段长度

-moz-box-shadow: 2px 2px 10px #909090;
-webkit-box-shadow: 2px 2px 10px #909090;
box-shadow:2px 2px 10px #909090;

第一个参数是x轴阴影段长度
第二个参数是y轴阴影段长度
第三个参数是往四周阴影段长度
第四个参数是阴影段颜色
*/
}

固定Div位置:

.fix{
    width:50px; position:fixed; background:black;
    top:0; left:0;z-index:1000;
    /*For IE6 */
    _position: absolute;
    _top: expression(eval(document.compatMode && document.compatMode == 'CSS1Compat') ?
				documentElement.scrollTop :
				document.body.scrollTop);
    /*固定居中
    _top: expression(eval(document.compatMode && document.compatMode == 'CSS1Compat') ?
				documentElement.scrollTop + (document.documentElement.clientHeight-this.offsetHeight )/ 2 :
				document.body.scrollTop + (document.body.clientHeight - this.clientHeight )/ 2 );
    */
}

CSV格式不支持UTF-8编码,多语言乱码

由于我们的开发模式一般选择UTF-8编码,所以当存在简体中文,繁体中文,韩日,日文时候,一般页面是不会出现问题的,但是今天做了个项目当导出的CSV的数据存在多国,不同语言的数据时候,数据将会出现乱码。
而以往的案例一般只做一种语言如:
mb_convert_encoding($content,”gb2312″,”UTF-8″),转出来的CSV没任何问题。
但是如果这时候数据中存在一些日文或者韩文,这些数据将会乱码。

经过资料查找,发现其实是CSV格式并不支持UTF-8的编码。但是他支持UTF-16的编码
可用此方法解决CSV中的编码问题

//输出BOM
header('Cache-control: private');
header('Content-Disposition: attachment; filename=test.csv');
header('Content-type: text/csv; charset=UTF-16LE');
echo(chr(255).chr(254));
echo(mb_convert_encoding($content,"UTF-16LE","UTF-8"));

但是打开Excel还是可能出现一定的问题。

最终的解决方案还是采用开源phpExcel类直接生成Excel。

DW中的正则替换应用

今天发现使用DW中的正则替换特别好用,于是正好发现网上有一篇实例教程写的很好,转自:

http://oa.yubooa.com/html/4588.html

网站优化过程中,经常会遇到很多要批量修改的东西,一个个修改,明显效率低下。本文是使用DW正则表达式批量替换的一个实例。

<!--想法:想把-->
<a href="#" target="_blank">BBBBBBB</a>
<!--替换成 -->
<a href="http://www.yourdomain.com/keyword.asp?=BBBBBBB" target="_blank">BBBBBBB</a>

如果”BBBBBBB”一样的话,那么简单,如果内容不一样的话,就不能使用简单的查找替换功能了。那么就使用DW正则表达式批量替换吧。

要替换内容:

替换要达到的效果:

利用PHP登陆FTP实现服务器资源同步

由于经常操作国外服务器,深刻的感受是速度比较低,有的时候可以说非常低。

最近需要两台服务器做下载数据分流。但是面临着一个问题:同时去上传两个资源到两台服务器明显是一件比较麻烦的事,而且速度很慢,花时间又多。所以想了一个办法,将资源上传到其中一台服务器,然后直接从另一台服务器登入这台服务器下载资源并拷贝到同样的目录下。

于是乎找了很多方法,其实最快的就是用linux上的shell方式,直接get文件就可以同步数据,但是可能服务的一些问题,并没有办法这么顺利,不过在php中的确找到了FTP相关的函数

resource ftp_connect ( string $host [, int $port [, int $timeout ]] )

bool ftp_login ( resource $ftp_stream , string $username , string $password )

bool ftp_get ( resource $ftp_stream , string $local_file , string $remote_file , int $mode [, int $resumepos ] )

利用这三个函数足以实现同步资源。因此我设置了两个函数。

如何在Apache环境下配置Rewrite规则

本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/05/24/1742815.html

URL 静态化是一个利于搜索引擎的设置,通过 URL 静态化,达到原来是动态的 PHP 页面转换为静态化的 HTML 页面,当然,这里的静态化是一种假静态,目的只是提高搜索引擎的搜索量,Comsenz 旗下的产品 Discuz!、SupeSite/X-Space、ECShop、SupeV、UCHome 等都支持此功能。当然这个功能还需要服务器环境的支持,下面介绍一下如何在 Apache 服务器下配置 URL 静态化的 Rewrite 规则。

当然这里分两种情况,一种是独立主机用户,这部分用户拥有对主机的管理权限,因此配置起来比较方便一些。(注:这里就以 Discuz!6.1.0 的 Rewrite 规则为例,稍后在后面会列举出其他产品的 Rewrite 规则。

首先确定您使用的 Apache 版本,及是否加载了 mod_Rewrite 模块。

Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码:
LoadModule Rewrite_module libexec/mod_Rewrite.so
AddModule mod_Rewrite.c

Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段代码:

LoadModule Rewrite_module modules/mod_Rewrite.so

如果存在,那么在配置文件(通常就是 conf/httpd.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置,即 <VirtualHost> 中去,如果加在虚拟主机配置外部将可能无法使用,改好后将 Apache 重启。

<IfModule mod_Rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3
RewriteRule ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2
</IfModule>

如果没有安装 mod_Rewrite,您可以重新编译 Apache,并在原有 configure 的内容中加入 –enable-Rewrite=shared,然后再在 Apache 配置文件中加入上述代码即可。

另外一种用户是 Apache 虚拟主机用户。

jquery单选框复选框美化插件 ( 原创 )

最近由于需求关系,于是乎自己开发了两个用于美化checkbox和radio的插件,并提供一些回调函数的功能。这样可以随时替换自己需要的样式表。

Checkbox 效果图

使用YUI Compressor 和 /packer/ 压缩JavaScript

Javascript压缩后放在我们的网站上,能优化读取速度,就像我们压缩图片格式一样。降低javascript脚本代码的容量将使得你的站点提高载入速度。同时访问者也得到更好的体验。

而javascript压缩有一般两种情况,用jquery举例:

jquery-1.4.2.js                       这个是原版, 用于平时开发的时候,或者自己分析源码用。

jquery-1.4.2.min.js                   min压缩,当服务器没有开启gzip的时候用。

jquery-1.4.2.pack.js                  pack压缩,通过eval处理打包而成,开启gzip的时候读取速度比较快。

而现在我们需要将javascript文件压缩,我将用到如下两个工具 YUI Compressor 和 Dean Edward’s/packer/

jQuery插件添加回调方法

在jQuery插件开发中,我们需要在执行某个动作的情况后促发一些回调函数,如hover, click, change等,或者当插件初始化完成后执行一个简单的回调函数。

$.fn.myPlugin = function( setting ) {

  var defaults = {
    color: 'red',
    size : '12px',
    initFn : null //当插件初始化完成后执行的回调函数, 默认为null
  }

  //默认值继承
  var config = $.extend( defaults, setting || {});

  // 引用回调函数
  if (typeof config.initFn == 'function') { // 确保类型为函数类型
		config.initFn.call(this); // 执行回调函数
  }

};

在页面中调用

$('#icon').myPlugin({
	color  : 'yellow',
	initFn : function () {
		alert('init successfully');
	}
})

FirePHP开发中的调试应用

1. 安装Firebug插件和FirePHP插件,FirePHP只是Firebug的一个扩展。

2. 登陆FirePHP的主页:http://www.firephp.org/ 下载FirePHPCore Server Library

3. 解压缩取得FirePHPCore文件夹下

    fb.php                   //php5 面向过程方式调试
    FirePHP.class.php        //php5 面向对象方式调试
    fb.php4                  //php4 面向过程方式调试
    FirePHP.class.php4       //php4 面向对象方式调试
选择自己想要的调试模式的文件。

例如:

//框架中调用FirePHP类
//使用FirePHP.class.php
$this->load->library('firephp');   //载入firephp类
$this->firephp->log($this->pagination);  //调用该类的log方法

之后就可以在Firebug的控制台看到这个对象或者数据的结构,但并不影响整个页面HTML和Dom的结构。