为什么推荐我们一开始学习就要用utf-8

作者:pakey 发布时间:April 25, 2012 分类:PHP

今天,和朋友在讨论为什么要用utf-8,而不用gbk

utf8和gbk相比,不仅仅是带来了更大的字符集支持,还有国际化的作用,比如用utf-8做的中文网站即使在英文系统下也不需要下载中文字库才能正常显示(大家可以搜一下utf-8和gbk相比的优点)。
或许你说这是前台的事,和我们内层php的处理没有关系,其实不然,使用utf-8 可以避免很多在php中发生的一些头疼的问题。

比如程序的兼容性
discuz的gbk版本一度不支持php5.4(不知现在2.5支持了没),因为php5.4它内置编码自 ISO-8859-1 改成了 UTF-8。 
htmlspecialchars和htmlentities函数,默认会使用utf-8来处理字符串。
如果输入的字符串是GBK编码,那么很抱歉, 返回的结果是空的, 输入的字符串被吃了。
discuz大量使用htmlspecialchars做中文过滤,所以出现了很多地方没有办法中文输入出现空白。
当然这可以手动指定htmlspecialchars第三个参数

memcache中set和replace方法的区别

作者:pakey 发布时间:March 30, 2012 分类:PHP

在memcache中replace和set在一定程度上作用是一致的,都是改变某个元素的值,但是之间略有不同。

我们来用例子说明


$mem=new Memcache;
$mem->connect("localhost", 11211);
//直接set
$mem->set("mystr1", "this is a memcache test1!<br>", MEMCACHE_COMPRESSED, 3600);
echo $str=$mem->get("mystr1");
//直接replace
$mem->replace("mystr2", "this is a memcache test2!<br>", MEMCACHE_COMPRESSED, 3600);
var_dump($str=$mem->get("mystr2"));
//先add在replace
$mem->add("mystr3", "this is a memcache test3!<br>", MEMCACHE_COMPRESSED, 3600);
echo $str=$mem->get("mystr3");
$mem->replace("mystr3", "this is a memcache test31!<br>", MEMCACHE_COMPRESSED, 3600);
echo $str=$mem->get("mystr31");
//先add在set
$mem->add("mystr4", "this is a memcache test4!<br>", MEMCACHE_COMPRESSED, 3600);
echo $str=$mem->get("mystr4");
$mem->replace("mystr4", "this is a memcache test41!<br>", MEMCACHE_COMPRESSED, 3600);
echo $str=$mem->get("mystr41");

运行结果这里我们就不写出了,个人强烈建议你运行一下,这样可以加深印象!

最终的结论就是在对已有值的元素处理上两者是相同的,但是对于一个不存在的元素,set的作用就和add相当,replace则是只能对已经存在的元素进行处理

类的连贯操作的实现办法

作者:pakey 发布时间:March 24, 2012 分类:PHP

在有的代码中我们看到


$User->where('status=1')->order('create_time')->limit(10)->select(); 
$User->order('create_time')->where('status=1')->limit(10)->select(); 

是不是觉得很帅呢?

今天小研究了一下 终于知道了如何写一个这样子的类

直接上例子


class test{
var $aaa='1';
	function a(){
		echo 'aaaaaaaaaa<br>';
		return $this;
	}
	
	function b(){
		echo 'bbbbbbbbbb<br>';
		return $this;
	}
	public function c(){
		echo 'ccccccccc<br>';
		return $this;
	}
}
$t=new test();
$t->a()->b()->c();

如何看明白了么?关键就是return $this;这个啊

这样return以后


 $t->a()->b()->c();

就和 

$t->a();

$t->b();

$t->c();

 是一个效果,就是连着写连贯一些,达到了这样的书写方式

memcache和memcached的区别

作者:pakey 发布时间:March 22, 2012 分类:PHP

在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢?

其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll。

如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使用起来没有问题

如果安装了memcache扩展但是没有安装memcached服务,那么这个就无法使用

只有同时安装了memcached服务和memcache扩展才可以在PHP中使用memcached提高动态网站性能

PHP中的冒号、endif、endwhile、endfor这些都是什么

作者:pakey 发布时间:March 18, 2012 分类:PHP

一直印象中这都是asp才有的东西,今天才偶然发现在php中也有,于是网上搜索了一下,算是了解了这的含义

我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如:
<?php if(empty($GET_['a'])): ?>
<font color="red">空的</font>
<?php endif; ?>
对于相当一部分PHP爱好者来说根本没见过啊,这些是什么东西呢?难道是那些博客的开发者自己搞的仿PHP的模板语言?
非也,其实这些都是PHP的语法,只不过不常用而已,这些都是PHP流程控制的替代语法。
这里就就给大家详细说一下PHP流程控制的替代语法。什么是替代语法?
简单的说就是一些语法的另类写法。

作为一个phper 有必要了解一下php的历史

作者:pakey 发布时间:March 15, 2012 分类:PHP

了解下PHP的历史, 有助于更加深刻的了解PHP发展到今天的轨迹, 下面的文字都是从» PHP手册中转载过来的.

PHP 在过去的几年里走过了漫长的道路。成长为处理 web 的最卓越的语言并非易事。如果对 PHP 如何发展到今天很感兴趣,那么请继续读下去吧。以前的 PHP 发行版可以在 » PHP 博物馆找到。


PHP/FI


PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加,Rasmus 写了一个更大的 C 语言的实现,它可以访问数据库,可以让用户开发简单的动态 Web 程序。Rasmus » 发布了 PHP/FI 的源代码,以便每个人都可以使用它,同时大家也可以修正它的 Bug 并且改进它的源代码。

PHP/FI,一个专为个人主页/表单提供解释程序的程序,已经包含了今天 PHP 的一些基本功能。它有着 Perl 样式的变量,自动解释表单变量,并可以嵌入 HTML。语法本身与 Perl 很相似,但是它很有限,很简单,还稍微有些不协调。

到1997年,PHP/FI 2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。但是那时只有几个人在为该工程撰写少量当代码,它仍然只是一个人的工程。

PHP/FI 2.0 在经历了数个 beta 版本的发布后于 1997 年 11 月发布了官方正式版本。不久,PHP 3.0 的第一个 alpha 版本的发布,PHP 从此走向了成功。

gzdeflate、gzcompress、gzencode、压缩比比较

作者:pakey 发布时间:February 22, 2012 分类:PHP

PHP的自带的函数中,有三个压缩相关的函数:gzcompress、gzencode、gzdeflate,下面我们通过一段程序,来比较一下这三个函数的压缩比。
代码:


$string = "8aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer8aaaaa75zw.comaaaaaaaaaaaaaaaaaadasd456as
d456asd456asd456asd456aPTCMS.comsd456asd456asd456asd456asd456asd456fasdf45645645645645645
6456456456456456456456456456456456pakey.net456456456456456456456456456456456456456a56fs4s4s4s4s
4s4s4s4s4s4s4s4s4s4dsdga13333333333333333qshu.net3333w8etw7q9999999999999999999a23s1dfffffffff
fffffffffffffffa456ssssssssssssdv2sdddddddddddddddddddf";
echo "字符串长度:";
echo strlen($xx);
echo "<br/>gzcompress压缩后长度:";
echo strlen(gzcompress($string,9));
echo "<br/>gzencode压缩后长度:";
echo strlen(gzencode($string,9));
echo "<br/>gzdeflate压缩后长度:";
echo strlen(gzdeflate($string,9));


运行结果是:
字符串长度:388
gzcompress压缩后长度:80
gzencode压缩后长度:92
gzdeflate压缩后长度:74
由此可见,这三个函数按照压缩效果进行排序:gzdeflate、gzcompress、gzencode,gzdeflate压缩效果最好,gzcompress次之,gzencode最差。
分析:
查了下手册,gzcompress、gzencode、gzdeflate这三个函数,分别采用的是zlib、gzip、DEFLATE方式压缩格式。通过上面的运行结果,不知道是否可以这么认为,DEFLATE、zlib、gzip的压缩效果递减。