在Zend Studio 10的Outline中使用的图形标志

在Zend Studio 10中,如果打开Outline View,可以看到当前浏览的文件中对各种元素的图形标志.这些标志方式在其它一些View中当然也是可以看到的.这里记录下,主要是PHP源码文件.

1.图形主体

绿色空心圆: public field

黄色空心菱形: protected field

红色空心方块: private field

 

绿色实心圆: public method

黄色实心菱形: protected method

红色实心方块: private method

 

2.图形附加符号

右上角:

‘S’: 具有static修饰符

‘C’: 这是一个构造方法

‘F’: 这是一个常量或是有final修饰符的方法

‘A’: 具有abstract修改符

 

右下角:

绿色实心三角形: 此方法对父类方法进行了overriding

让nginx支持跨域woff自定义字体

这个问题困扰我很久很久了,之前一直懒得去解决,因为问题只有在firefox下才有。今天使用自己的cdn上的font-awesome时,头疼的问题又出现了,自定义字体生成的icon在firefox下始终出不来,蛋了个疼呀!心里有种特别想把这个问题搞定的冲动,因为对比了下其他网站和自己网站,我似乎发现了问题的关键,不说先,我们先看看问题的现象。正常的状态:正常解析的页面

有问题的Firefox的解析状态:

不正常的页面

自定义字体对应的内容根本出不来,或者说是乱码,看了下其他网站,同样的源码,他们好好的,为啥我的不行呢?看了源码我似乎知道了些什么,按照我的思路,尝试了下,把我的样式和字体文件放在了测试域名下来访问,问题瞬间解决了,笑脸出来啦。原来是跨域资源共享惹的祸!

按照思路,Google了一把,在serverFault找到了解决方案,原理就是允许跨站共享,贴出来啊贴出来~

  1. location ~* .(eot|ttf|woff)$ {
  2. add_header Access-Control-Allow-Origin *;
  3. }

 

在你存放字体的nginx服务器配置文件中的server段内加上上面的代码,问题就搞定了,Firefox也乖乖的显示自定义字体啦!撒花~~

顺便看了下发现某些字体文件也是支持gzip的(woff字体据说已经是压缩过的了,没去验证过…),下面是支持gzip的字体mime列表:

  1. image/svg+xml
  2. application/vnd.ms-fontobject
  3. application/x-font-ttf
  4. font/opentype

你要问我这段加在哪里,我不会告诉你的,哈哈~~好了,问题搞定了,心情也好了,舒坦~

理解cookie的path和domain属性

今天在做验证码时发现一个问题:A、B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了。原因是使用 了同名的cookie来存储验证码。一时找不到解决方法就参考了WebQQ的登录画面,发现tx也没有解决这个问题,也许是觉得这个不算是问题吧。但还是 借这个机会再次了解一下cookie好了。

下面是在网上学习一番后得到的总结(如有纰漏请指正):

1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.test.com/test/test.aspx,那么domain 默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问 的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该 cookie的domain设置为t2.test.com。

2.path表示cookie所在的目录,PHP默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/, /test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以 访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。

3.浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。

4.含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,一说到含多个子键值对的就蒙了。现在总算弄清楚了。含多个子键 值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其 中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。

PHP for windows VC9 VC6区别

一、如何选择PHP5.3的VC9版本和VC6版本

VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本。
二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本

先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。

再来看PHP的两种执行方式:ISAPI和FastCGI。

ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。

PHP日期时间检测函数

//检查日期是否合法日期
function check_date($date) { 
	$dateArr = explode("-", $date);
	if (is_numeric($dateArr[0]) && is_numeric($dateArr[1]) && is_numeric($dateArr[2])) {
		return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);
	}
	return false;
}


//检查时间是否合法时间
function check_time($time) { 
	$timeArr = explode(":", $time);
	if (is_numeric($timeArr[0]) && is_numeric($timeArr[1]) && is_numeric($timeArr[2])) {
		if (($timeArr[0] >= 0 && $timeArr[0] <= 23) && ($timeArr[1] >= 0 && $timeArr[1] <= 59) && ($timeArr[2] >= 0 && $timeArr[2] <= 59))
			return true;
		else
			return false;
	}
	return false;
}


//时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
function DateDiff($date1, $date2, $unit = "") { 
	switch ($unit) {
		case 's':
			$dividend = 1;
			break;
		case 'i':
			$dividend = 60;
			break;
		case 'h':
			$dividend = 3600;
			break;
		case 'd':
			$dividend = 86400;
			break;
		default:
			$dividend = 86400;
	}
	$time1 = strtotime($date1);
	$time2 = strtotime($date2);
	if ($time1 && $time2)
		return (float)($time1 - $time2) / $dividend;
	return false;
}

php 字母大小写转换总结

1.将字符串转换成小写

strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串

2.将字符转成大写

strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样.

3.将字符串首字符转换成大写

ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大写的字符串.用法同strtolowe()一样.

4.将字符串每个单词的首字符转换成大写

ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如”hello world”,经过该函数处理后,将返回”Hello Word”.用法同strtolowe()一样.

php正则表达式中preg_match和preg_match_all的区别

preg_match和preg_match_all的区别为:

preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错preg_match() 返回 FALSE

1、preg_match只匹配一次,preg_match_all是全文匹配,即所有跟表达式一致的都找出来。

举个例子:
<a><b><c>

取出符号里的字符。
preg_match_all(“/<(\w)+>/”,”<a><b><c>”,$abc);
print_r($abc);

显示结果为

Array
(
[0] => Array
(
[0] => <a>
[1] => <b>
[2] => <c>
)

[1] => Array
(
[0] => a
[1] => b
[2] => c
)

)

preg_match(“/<(\w)+>/”,”<a><b><c>”,$abc);
print_r($abc);

显示结果

Array
(
[0] => <a>
[1] => a
)

 

这两个函数的区别就是:preg_match_all()搜索匹配全部情况;preg_match()搜索匹配到一个后终止。