php类的静态化实例,静态化实例可避免重复new一个类
提高程序效率

<?php
class Cart {
	private static $instance;
	private $test;
	
	public function __construct() {
		echo "\n输出几次就实例了几次\n";
	}
	
	static public function instance() {
		if (! self::$instance) {
			self::$instance = new Cart ();
		}
		return self::$instance;
	}
	
	public function go() {
		$this->test = 'I`m a private var';
	}
	
	public function output() {
		echo "<br>";
		print_r ( $this->test );
		echo "<br />";
	}
}

$cart = Cart::instance ();
$cart->go ();
$cart->output ();

$cart = Cart::instance ();
$cart->output ();

在浏览网页的时候碰到404错误是让人非常扫兴的,因此很多网站都会设计一个新颖的错误页面,以吸引用户继续浏览其它的内容。这篇文章向大家分享一组漂亮的404错误页面模板下载,其中部分是免费的,有部分是需要付费的。

Simplistic 404

 

TheLoop Error Page Template

 

404 Error Template

 

Modern 404 Error Template

 

Stylish 404 error page – 5 color schemes

 

ak – 404 error pages

 

404 Error Template

 

Modern Error Template

 

InFamous – Modern 404 Error Page

 

Modern Custom 404 Error Page

梦想天空博客关注前端开发技术,展示最新HTML5CSS3应用,分享实用的jQuery插件,推荐网页设计案例。

 

Lost in Space – Error 404

 

Lost in the Clouds – Error 404

 

Custom 404 Error Page – Missing Jigsaw Piece

 

Cosmo Error Page

 

Save me – 404 Error Page

 

Modern Error Page Template 25 in 1

试用top命令查看时候 会发现 iscsiuio 占用很大内存
iscsiuio没什么用直接kill掉

防止重启iscsiuio复活
查看启动后开启的服务

chkconfig –list | grep ’3:on’

会发现 iscsi 和 iscsid 两个服务,执行下列命令关闭它们

chkconfig iscsi off
chkconfig iscsid off

以下引用国外的几篇关于CentOS的文章,还不错

http://www.cyberciti.biz/faq/linux-default-services-which-are-enabled-at-boot

,

参考: http://blog.csdn.net/seanchan/article/details/7680354


CentOS源位置
/etc/yum.repos.d/

网易源

使用说明

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)

运行yum makecache生成缓存
详细帮助见http://mirrors.163.com/.help/centos.html

增加额外资源库 EPEL Remi
默认情况下,CentOS的官方资源是没有php-fpm的, 但我们可以从Remi的RPM资源中获得,它依赖于EPEL资源。我们可以这样增加两个资源库:

yum install yum-priorities -y
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

其他相关
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm 32位
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 64位
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

设置 /etc/yum.repos.d/epel.repo 中源的级别为 priority=11(比上面高就行)。

, ,

安装ubuntu12.10之后,第一件事就是更换源,ubuntu网易163的更新源速度一直很好。
1.首先备份源,sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

2.更换源,sudo gedit /etc/apt/sources.list
将下边的源直接覆盖掉:

deb http://mirrors.163.com/ubuntu/ quantal main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ quantal main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ quantal-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ quantal-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ quantal-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ quantal-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ quantal-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ quantal-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ quantal-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ quantal-updates universe main multiverse restricted

运行 sudo apt-get update

,

Device eth0 has different MAC address than expected, ignoring.
原因:
配置文件里的MAC地址和真实的MAC不一样。

查看实际MAC
ifconfig eth0

修改配置
文件中的MAC参数改为实际Mac地址即可,路径如下
/etc/sysconfig/network-scripts/ifcfg-eth0

保存退出后 执行 #service network restart 测试

Device eth0 does not seem to be present, delaying initialization

1、
vi /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0的配置文件里保存了以前的MAC地址,就把这一行删除掉在重启网卡

2、
/etc/udev/rules.d/70-persistent-net.rules 删除后重启机器
因为这个文件绑定了网卡和mac地址,所以换了网卡以后MAC地址变了,所以不能正常启动,也可以直接编辑这个配置文件把里面的网卡和mac地址修改乘对应的,不过这样多麻烦,直接删除重启,它会自动生成个。

DocumentRoot must be a directory解决办法:

方法一:
把目录或文件的策略类型改成 httpd_sys_content_t 就可以了。
ls -Z查看目录权限
ls -laZ 命令查看文件目录的策略类型。

chcon  -t httpd_sys_content_t /home/www/
chcon  -t httpd_sys_content_t /home/www/html/

方法二:
关闭SElinux的话需要重启系统,修改方法为:
vi /etc/selinux/config
修改SELINUX=disabled然后重启系统就关闭SElinux了。

 

网卡设置相关内容见 http://blog.uacool.com/?p=808

,

题记:同事正在办公室远程操作自己家里的笔记本,我也凑个热闹写个脚本玩玩。同事是定时把ip地址写到家里的网盘上 然后自动同步到网上 方法也不错。

定时查询客户机ip存储到服务器
本地定时执行客户端脚本
自动更新检查本机ip地址
获取IP地址

客户端

// get ip info
$ipInfo = file_get_contents ( 'http://iframe.ip138.com/ic.asp' );
preg_match_all ("/<center>([\s\S]*)<\/center>/", $ipInfo, $matches);
$ip = base64_encode( $matches['1']['0'] );

// send data to uacool
$post_data ['ip'] = $ip;
$url = 'http://www.uacool.com/api/saveIpAdd.php';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
$output = curl_exec ( $ch );
if (curl_errno ( $ch )) {
	print curl_error ( $ch );
}
curl_close ( $ch );

服务器端

// do at uacool server
if ( isset($_POST['ip']) ) {
	$ip = base64_decode( $_POST['ip'] );
	writeFile( $ip );
}
function writeFile($content) {
	$filename = 'iplist.txt';
	$filename = dirname ( __FILE__ ) . '/' . $filename;
	$content = date( "Y-m-d H:i:s", time() ) . ' ' . $content . "\n";
	$handle = fopen ( $filename, "a+b" );
    fwrite($handle, $content);
    fclose ( $handle );
}

计算数组平均值 二维数组平均值计算 分组计算平均值

$array = array(
	array('class' => 'a', 'value' => 3),
	array('class' => 'a', 'value' => 4),
	array('class' => 'b', 'value' => 5),
	array('class' => 'b', 'value' => 6)
)

这样的数组可分别以 class键值分组计算平均值
也可以单独计算总的平均值,用法如下

array_avg($array, 'class');//返回二维数组
array_avg($array);//返回一维数组
// 计算平均值	返回一维数组
// 参数$avgby 按照指定字段算平均值	返回二维数组
private function array_avg($array, $avgby = NULL) {
	$array_avg = array ();
	$number = count ( $array );
	foreach ( $array as $key => $value ) {
		if ($avgby) {
			$avg_key = $value[$avgby];
			$array_avg[$avg_key]['count'] ++;
			foreach ( $value as $k => $v ) {
				$array_avg[$avg_key][$k] += $v;
			}
		} else {
			foreach ( $value as $k => $v ) {
				$array_avg[$k] += $v;
			}
		}
	}
	$array = array ();
	foreach ( $array_avg as $key => $value ) {
		if ($avgby) {
			foreach ( $value as $k => $v ) {
				$array[$key][$k] = $v / $value['count'];
			}
		} else {
			$array[$key] = $value / $number;
		}
	}
	return $array;
}
,

局域网windows不能访问linux apache 多是linux防火墙原因 关闭linux防火墙 以及配置

linux防火墙关闭

linux防火墙关闭

1) 永久性生效,重启后不会复原

开启:

chkconfig iptables on

关闭:

chkconfig iptables off

2) 即时生效,重启后复原

开启:

service iptables start

关闭:

service iptables stop

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。

在开启了防火墙时,做如下设置,开启相关端口,

修改/etc/sysconfig/iptables 文件,添加以下内容:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
, ,

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
  Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

性能测试结果:
SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:

redis安装非常简单

$ wget http://redis.googlecode.com/files/redis-2.6.7.tar.gz
$ tar xzf redis-2.6.7.tar.gz
$ cd redis-2.6.7
$ make

如果其中报错如下,找不到make 是因为可能服务器版本的linux为最小安装,很多工具都没有安装

-bash: make: command not found

centos执行

yum install make

如果连wget也找不到

-bash: wget: command not found

centos执行

yum install wget

启动服务器

$ src/redis-server

启动显示:
redis

客户端使用

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
,

linux执行命令连接mongodb:
#/usr/local/mongodb/bin/mongo localhost:41211/test

报错:
Error: couldn’t connect to server localhost:41211 src/mongo/shell/mongo.js:93

分析:
这里我指定了端口41211,src/mongo/shell/mongo.js:93 报错应该是端口错误,因为我是用默认的端口启动的mongodb
但是连接的时候却指定了41211端口所以报错。

如果 启动服务器的时候没有指定端口,那么连接的时候去掉端口参数即可,如:
#/usr/local/mongodb/bin/mongo localhost/test

另外还有报错
src/mongo/shell/mongo.js:91
这个错误多数是因为数据库路径找不到,可以指定下路径
linux下默认路径是 /data/db/

php读写文件的方法实例

php写文件的方法

$filename = 'test.txt';
$filename = dirname ( __FILE__ ) . '/' . $filename;
if (file_exists ( $filename )) {
	if (! is_writable ( $filename )) {
		exit('is not writable');
	}
	$handle = fopen ( $filename, "a+b" );
	$content = 'this is test words';
	$content .= "\n";
	fwrite($handle, $content);
	fclose ( $handle );
} else {
	exit('file is not exists');
}
$filename = 'test.txt';
$filename = dirname ( __FILE__ ) . '/' . $filename;
if (file_exists ( $filename )) {
	if (! is_writable ( $filename )) {
		exit('is not writable');
	}
	$content = 'this is test words';
	$content .= "\n";
	file_put_contents($filename, utf8_encode($content)); 
} else {
	exit('file is not exists');
}

php读取文件

$filename = 'test.txt';
		$filename = dirname ( __FILE__ ) . '/' . $filename;
		if (file_exists ( $filename )) {
			if (! is_readable ( $filename )) {
				exit('is not readable');
			}
			$contents = file_get_contents($filename);
			$contents = explode("\n", $contents);
			print_r($contents);
		} else {
			exit('file is not exists');
		}
		$filename = 'test.txt';
		$filename = dirname ( __FILE__ ) . '/' . $filename;
		if (file_exists ( $filename )) {
			if (! is_readable ( $filename )) {
				exit('is not readable');
			}
			$handle = fopen ( $filename, "rb" );
			$contents = fread($handle, filesize ($filename));
			//$contents = stream_get_contents($handle); // 也可以用方法替换上一行
			$contents = explode("\n", $contents);
			fclose ( $handle );
			print_r($contents);
		} else {
			exit('file is not exists');
		}
, ,

下表为php官方提供的MongoDB与SQL语句对应关系表
SQL语句转换Mongo对照表 sql mongo对应关系 SQL to Mongo Mapping Chart

SQL to Mongo Mapping Chart

This is a PHP-specific version of the » SQL to Mongo mapping chart in the main docs.

SQL Statement Mongo Query Language Statement
CREATE TABLE USERS (a Number, b Number) Implicit or use MongoDB::createCollection().
INSERT INTO USERS VALUES(1,1) $db->users->insert(array(“a” => 1, “b” => 1));
SELECT a,b FROM users $db->users->find(array(), array(“a” => 1, “b” => 1));
SELECT * FROM users WHERE age=33 $db->users->find(array(“age” => 33));
SELECT a,b FROM users WHERE age=33 $db->users->find(array(“age” => 33), array(“a” => 1, “b” => 1));
SELECT a,b FROM users WHERE age=33 ORDER BY name $db->users->find(array(“age” => 33), array(“a” => 1, “b” => 1))->sort(array(“name” => 1));
SELECT * FROM users WHERE age>33 $db->users->find(array(“age” => array(‘$gt’ => 33)));
SELECT * FROM users WHERE age<33 $db->users->find(array(“age” => array(‘$lt’ => 33)));
SELECT * FROM users WHERE name LIKE “%Joe%” $db->users->find(array(“name” => new MongoRegex(“/Joe/”)));
SELECT * FROM users WHERE name LIKE “Joe%” $db->users->find(array(“name” => new MongoRegex(“/^Joe/”)));
SELECT * FROM users WHERE age>33 AND age<=40 $db->users->find(array(“age” => array(‘$gt’ => 33, ‘$lte’ => 40)));
SELECT * FROM users ORDER BY name DESC $db->users->find()->sort(array(“name” => -1));
CREATE INDEX myindexname ON users(name) $db->users->ensureIndex(array(“name” => 1));
CREATE INDEX myindexname ON users(name,ts DESC) $db->users->ensureIndex(array(“name” => 1, “ts” => -1));
SELECT * FROM users WHERE a=1 and b=’q’ $db->users->find(array(“a” => 1, “b” => “q”));
SELECT * FROM users LIMIT 10 SKIP 20 $db->users->find()->limit(10)->skip(20);
SELECT * FROM users WHERE a=1 or b=2 $db->users->find(array(‘$or’ => array(array(“a” => 1), array(“b” => 2))));
SELECT * FROM users LIMIT 1 $db->users->find()->limit(1);
EXPLAIN SELECT * FROM users WHERE z=3 $db->users->find(array(“z” => 3))->explain()
SELECT DISTINCT last_name FROM users $db->command(array(“distinct” => “users”, “key” => “last_name”));
SELECT COUNT(*y) FROM users $db->users->count();
SELECT COUNT(*y) FROM users where AGE > 30 $db->users->find(array(“age” => array(‘$gt’ => 30)))->count();
SELECT COUNT(AGE) from users $db->users->find(array(“age” => array(‘$exists’ => true)))->count();
UPDATE users SET a=1 WHERE b=’q’ $db->users->update(array(“b” => “q”), array(‘$set’ => array(“a” => 1)));
UPDATE users SET a=a+2 WHERE b=’q’ $db->users->update(array(“b” => “q”), array(‘$inc’ => array(“a” => 2)));
DELETE FROM users WHERE z=”abc” $db->users->remove(array(“z” => “abc”));

原文地址:http://us.php.net/manual/en/mongo.sqltomongo.php

windows系统:
把从官方下载的文件解压,这里我放在了 F:/mongodb 目录里
建立数据存储目录,这里我建立的目录为 F:/mongodb/data/db/

php驱动文件
如想在php环境中使用mongodb那么就需要安装php的驱动
去官网下载一个php接口驱动
下载地址:https://github.com/mongodb/mongo-php-driver/downloads
我当时下载的是php_mongo-1.2.12.zip 下载又升级了

下载后里面很多dll并不是随便都能用

经过测试发现 只有标记出来的这个驱动可用,如上图。

然后配置 php.ini 文件,加入这么一行

extension=php_mongo-1.2.12-5.4-vc9.dll

启动方法:
cmd命令下执行下面命令

F:/mongodb/bin/mongod  --dbpath F:/mongodb/data/db/

此命令启动mongodb并且 指定了数据存储目录

启动后用下面的命令连接测试

F:/mongodb/bin/mongo

PHP测试

// connect
$m = new Mongo();
// select a database
$db = $m->test;
// select a collection (analogous to a relational database's table)
$collection = $db->cartoons;
$obj = array( "title" => "Joe", "author" => "www.uacool.com" );
// 插入2条数据
$collection->insert($obj);
$collection->insert($obj);
// 按条件查找
$cdt = array('title'=>'Joe');
$cursor = $collection->find($cdt);
// 输出结果
print_r($cursor);
foreach ($cursor as $obj)
{
    echo $obj["title"] .' | '. $obj["author"] . "<br />";
}

PHP测试的时候有个奇怪的情况。
用find()查找的时候 查找结果集是一个对象,但是这个对象 用 var_dump() 或者 print_r()却不能输出
必须用foreach 才能把对象里面的数据一个一个的输出

而findOne()查找的时候 查找的结果集 也是一个对象,却能用 var_dump() 或者 print_r()输出

不知道其他人有没有碰到这情况的。

经典php调试函数 打印函数 输出函数 zuitu
这些调试函数我用了很久了,是在最土团购程序里面找的,尤其是dbx() 用着非常顺手,左手只需在键盘上按几下就ok,右手基本都不用参与
自从用了zuitu的调试函数 我做其他项目的时候 都会把这些调试函数转移过去。今天分享一下。。。


/***
 * 调试函数
 * @param 
 * @return mixed
 ***/

function dbx() {
	echo '<pre>';
	if(func_num_args()){
		foreach (func_get_args() as $k => $v) {
			echo "------- dbx $k -------<br/>";
			print_r($v);
			echo "<br/>";
		}
	};
	echo '</pre>';
}

function dpx() {
    echo '<pre>';
	if(func_num_args()){
		foreach (func_get_args() as $k => $v) {
			echo "------- dbx $k -------<br/>";
			var_dump($v);
			echo "<br/>";
		}
	};
    echo '</pre>';
}

function dbt() {
    echo '<pre>';
	if(func_num_args()){
		foreach (func_get_args() as $k => $v) {
			echo "------- dbx $k -------<br/>";
			echo "<textarea cols=20 rows=6>";
			print_r($v);
			echo "</textarea>";
			echo "<br/>";
		}
	};
    echo '</pre>';

}
,

这几天在我的虚拟机VMware上安装了 linux (centos6.3服务器版) 但是一直不能上网,然后我就深入的研究了下

分两种解决方案
不管是哪种方法都需要配置路由
用vi编辑器编辑路由配置文件

vi /etc/resolv.conf

路由配置文件填入如下配置
nameserver 8.8.8.8

下面分别介绍2种方法:
第一种:
是启动linux后用 shell命令配置 ip网关等,缺点是每次重启 还需要重新执行shell命令重新配置
2条命令分别如下

#配置第一块网卡的 ip 子网掩码等信息
ifconfig eht0 192.168.1.141 broadcast 192.168.1.255 netmask 255.255.255.0

#配置默认网关为192.168.1.1
route add default gw 192.168.1.1

这样就可以了,可以随便ping一个网址测试下

第二种方法:
是比较靠谱的

执行vi命令,配置IP地址以及网关等

vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置内容参考如下(根据自己实际情况修改关键注意#号注释部分)

DEVICE=eth0				#eth0代表第一块网卡
BOOTPROTO=none			#值为dhcp时自动获取ip配置
ONBOOT=yes				#启动项加载,为no时不加载本配置会导致ip为127.0.0.1
TYPE=Ethernet
HWADDR=00:11:44:BD:RG:5E
IPADDR=192.168.1.141	#
NETMASK=255.255.255.0	#子网掩码
NTEWORK=192.168.1.0
GATEWAY=192.168.1.1		#网关

配置好后重启linux即可
说明:
1. BOOTPROTO=dhcp时会自动获取ip就不需要下面的一堆ip网关掩码等配置了
2. ONBOOT=yes一定为yes才会在启动加载此配置

以下相关问题:
Device eth0 has different MAC address than expected, ignoring
Device eth0 does not seem to be present, delaying initialization
DocumentRoot must be a directory
链接地址 http://blog.uacool.com/?p=831

, ,

直接利用
yum 或者 apt-get
Centos 系统下 用 yum, Ubuntu系统用apt-get

一下centos系统举例

yum install httpd : 安装apache服务器
yum install php : 安装php
yum install mysql : 安装mysql

得,就这么简单,不需要什么依赖库,因为 通过yum 或者 apt-get 会自动下载需要的依赖库,相当于 .rpm 文件

安装后 你要不知道安哪儿了 就这样

which httpd
which php
…..

查看全部路径

rpm -ql php
rmp -ql mysql
……

windows8下载

现在微软已经正式面向MSDN/TechNet订阅用户提供Windows8 MSDN 正式版官方原版下载,普通用户也可通过MSDN订户下载中心查看Win8等产品镜像的文件名以及SHA1校验值等信息。除此之外,Visual Studio 2012 Ultimate 简体中文旗舰版MSDN正式版也同时发布了下载了,感兴趣的同学可以去看看。

Windows 8 很可能是微软史上最重要的一款产品了,因为苹果 Mac OSX、iOS 的异军突起和 Linux 在服务器市场的围剿,让其鸭梨山大。微软于是也拼尽全力了,这次大规模地引入全新简约风设计的 Metro UI 界面,各种针对平板/触摸屏的优化,甚至不惜更改用户多年来的使用习惯,可以看得出它破釜沉舟的决心。现在微软已经正式发布 Win8 MSDN 官方原版的镜像下载了……

以前异次元总会提供一些好的软件下载地址,但近年来备受版权保护打压,可以理解,下面的这迅雷下载链接是在网上找的 竟然可以用
ed2k://|file|cn_windows_8_pro_vl_x64_dvd_917773.iso|3558014976|7956620A80428F37D4F2989CB5CF3B5A|/
只需要拷贝这个网址 在迅雷里新建任务粘贴到里面就行了

1、Windows 8 (x86) – DVD (Chinese-Simplified) 【含专业版与核心板/32位简体中文版】
文件名: cn_windows_8_x86_dvd_915414.iso
SHA1: 0C4A168E37E38EFB59E8844353B2535017CBC587

2、Windows 8 (x64) – DVD (Chinese-Simplified) 【含专业版与核心板/64位简体中文版】
文件名: cn_windows_8_x64_dvd_915407.iso
SHA1: A87C4AA85D55CD83BAE9160560D1CB3319DD675C

3、Windows 8 Enterprise (x86) – DVD (Chinese-Simplified) 【企业版32位简体中文版】
文件名: cn_windows_8_enterprise_x86_dvd_917682.iso
SHA1: 951565D8579C5912FB4A407B3B9F715FBDB77EFE

4、Windows 8 Enterprise (x64) – DVD (Chinese-Simplified) 【企业版64位简体中文版】
文件名: cn_windows_8_enterprise_x64_dvd_917570.iso
SHA1: 1280BC3A38A7001FDE981FA2E465DEB341478667

5、Windows 8 Pro VL (x86) – DVD (Chinese-Simplified) 【专业版32位简体中文版/VOL批量授权】
文件名: cn_windows_8_pro_vl_x86_dvd_917720.iso
SHA1: EEEF3C3F6F05115C7F7C9C1D19D6A6A6418B5059

6、Windows 8 Pro VL (x64) – DVD (Chinese-Simplified) 【专业版64位简体中文版/VOL批量授权】
文件名: cn_windows_8_pro_vl_x64_dvd_917773.iso
SHA1: 9C4EC9FC4FB561F841E22256BC9DEA6D9D6611FF

,

nginx是俄国人开发的一个反向代理服务器程序
并发访问数量远远好于apache

第一种安装方法:
这里我们安装测试的是下面这版本的

2012-09-25 nginx-1.2.4 stable version has been released.

第一步:
进入1.2.4版本下载页面后,略过上面windows版本直接到中间找CentOS 6 版本的rpm
这里给出CentOS 6版本rpm 的链接

http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

下载这个rpm然后双击安装,或者用命令安装 shell命令如下(新手不会用下面的命令直接双击运行rpm文件即可)

rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

第二步:
在shell命令中执行如下命令:

yum install nginx

此刻nginx1.2.4已经安装成功

启动nginx:
在shell命令中执行下面命令(/usr/sbin/nginx为nginx默认安装位置,根据实际情况修改)

/usr/sbin/nginx

停止nginx:
在shell命令中执行下面命令

/usr/sbin/nginx -s stop

查看nginx运行效果
直接在浏览器上输入网址 127.0.0.1 查看

补充说明:
此安装方法nginx的默认配置文件夹位置:/etc/nginx

第二种安装方法:
下载nginx-1.3.7.tar.gz源码文件

tar xvfz nginx-1.3.7.tar.gz
cd nginx-1.3.7
./configure
make && make install

补充说明:
默认位置 /usr/local/nginx
启动文件 /usr/local/nginx/sbin
配置文件 /usr/local/nginx/conf

#############################################

在编译过程中如果出现如下问题:
libtool: compile: unrecognized option `-DHAVE_CONFIG_H’
说明linux的依赖环境没有安装好,需要先安装一下依赖环境
终端窗口执行下面shell
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel

完成后就不会出现编译报错的问题了

另外在make && make install执行时出现
找不到 libpcre.so.1的时候是因为 在 /lib目录里找不到 libpcre.so.1 这个文件
如果存在/lib/libpcre.so.0.0.1的话 我们就可以建立一个快捷链接 如下

ln -s libpcre.so.0.0.1 libpcre.so.1

这样就创建了一个名为libpcre.so.1的快捷链接指向 libpcre.so.0.0.1

如果没有 libpcre.so.0.0.1 文件 那说明 你的 pcre依赖环境没有装好,去官网下载吧,这里给出地址:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
下载源码安装包然后安装

,

CodeIgniter框架邮件地址验证

/**
	 * Valid Email
	 *
	 * @access	public
	 * @param	string
	 * @return	bool
	 */
	function valid_email($str)
	{
		return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
	}

PHPCMS邮件正则验证

/**
 * 判断email格式是否正确
 * @param $email
 */
function is_email($email) {
	return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
}

WordPress邮件地址验证函数

/**
 * Verifies that an email is valid.
 *
 * Does not grok i18n domains. Not RFC compliant.
 *
 * @since 0.71
 *
 * @param string $email Email address to verify.
 * @param boolean $deprecated Deprecated.
 * @return string|bool Either false or the valid email address.
 */
function is_email( $email, $deprecated = false ) {
	if ( ! empty( $deprecated ) )
		_deprecated_argument( __FUNCTION__, '3.0' );

	// Test for the minimum length the email can be
	if ( strlen( $email ) < 3 ) {
		return apply_filters( 'is_email', false, $email, 'email_too_short' );
	}

	// Test for an @ character after the first position
	if ( strpos( $email, '@', 1 ) === false ) {
		return apply_filters( 'is_email', false, $email, 'email_no_at' );
	}

	// Split out the local and domain parts
	list( $local, $domain ) = explode( '@', $email, 2 );

	// LOCAL PART
	// Test for invalid characters
	if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
		return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
	}

	// DOMAIN PART
	// Test for sequences of periods
	if ( preg_match( '/\.{2,}/', $domain ) ) {
		return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
	}

	// Test for leading and trailing periods and whitespace
	if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
		return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
	}

	// Split the domain into subs
	$subs = explode( '.', $domain );

	// Assume the domain will have at least two subs
	if ( 2 > count( $subs ) ) {
		return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
	}

	// Loop through each sub
	foreach ( $subs as $sub ) {
		// Test for leading and trailing hyphens and whitespace
		if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
			return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
		}

		// Test for invalid characters
		if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
			return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
		}
	}

	// Congratulations your email made it!
	return apply_filters( 'is_email', $email, $email, null );
}