<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kim Chow Blog &#187; PHP</title>
	<atom:link href="http://www.jianblog.com/category/program/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jianblog.com</link>
	<description>Unix C将是我主攻的语言，现在用PHP在FreeBSD/Centos下开发。</description>
	<lastBuildDate>Fri, 23 Dec 2011 08:29:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>关于php的chroot</title>
		<link>http://www.jianblog.com/2011/09/05/736/</link>
		<comments>http://www.jianblog.com/2011/09/05/736/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 06:25:44 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=736</guid>
		<description><![CDATA[chroot可以比较简单地实现php程序的安全，有些lib如果没有复制给用户，会导致用户无法使用一些函数。详细的配置方面，迟点有空的时候再写了。现在只是简单地写个一个问题解决先。 主要是解决chroot之后,php程序无法使用网络相关的函数问题。 只要将/lib/libnss_dns.so.2 复制到chroot的lib目录下就可以解决网络访问问题了。当然了，还需要将/etc/resolve.conf复制到chroot的etc目录下才行。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/09/05/736/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpdoc支持utf8</title>
		<link>http://www.jianblog.com/2011/08/24/734/</link>
		<comments>http://www.jianblog.com/2011/08/24/734/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 10:02:43 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=734</guid>
		<description><![CDATA[现在使用phpdoc生成文档，已经是比较简单的事了。只是默认不支持utf8,以下的方法是修改 支持utf-8 cd /usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters find ./ -name '*.tpl' &#124; xargs sed -i 's/iso-8859-1/utf-8/g']]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/08/24/734/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP之父评Facebook的HipHop:别当作银弹</title>
		<link>http://www.jianblog.com/2010/02/07/691/</link>
		<comments>http://www.jianblog.com/2010/02/07/691/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:55:41 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[HipHop]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=691</guid>
		<description><![CDATA[据《纽约时报》网站报道，读写网记者与PHP的创造者Rasmus Lerdorf联系，询问他对Facebook刚刚开源的PHP优化项目HipHop有何看法。Lerdorf在邮件中说，这是一个很酷的项目，肯定会成为某些网站很好的选择。 　　但是，他接下来说，对于许多Web应用来说，执行速度并不是主要因素。即使将总请求成本中10%的代码的执行速度提高一倍，整体上也只提高了5%。如果每次请求都要访问memcache/PostgreSQL/MySQL 10次，在系统调用上耗费大量时间，难免不要指望HipHop会带来奇迹。 　　Lerdorf称HipHop代码转换程序为漂亮把戏(nifty trick)，并担心会有开发人员将它错误地看成网站性能的某种魔弹。对于新的运行库，Lerdorf说，更愿意大家进行基本的性能分析(profiling)，找到有用中成本最高的部分。与其加速系统中较快的部分，不如加速或者去除系统中较慢的部分。 　　他还说，PHP的执行速度往往不是问题最大的地方，应该好好分析系统的各个方面，找到元凶。工具方面，他推荐用Yahoo的YSlow和Google的Page Speed分析前端的问题，再用Valgrind的Callgrind分析低层的后端性能，用XDebug分析用户空间PHP的性能。此外，他还顺带手指出了读写网前端的性能问题。 　　当然，文章中也说到，Facebook的网站其他方面可能已经优化得很好，因此HipHop能够带来足够的效率。 　　总之还是那句话，没有防之四海而皆准的通用银弹，工程上，具体问题具体分析，选择最合适当前环境的工具最为重要。 在看上一篇文章的时候，是否有点感觉立刻要把自己的代码换一下环境呢？其实，最重要的优化是自己把业务逻辑优化好，分析清楚自己的程序压力到底在哪里才会有实质上提升。工具只是帮助我们去分析问题，问题分析清楚之后，还是需要我们动手去解决的。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2010/02/07/691/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook性能大提升的秘密：HipHop</title>
		<link>http://www.jianblog.com/2010/02/07/688/</link>
		<comments>http://www.jianblog.com/2010/02/07/688/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:48:08 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[HipHop]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=688</guid>
		<description><![CDATA[Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序，一个重新实现的PHP运行库，和许多常用PHP扩展的重写版本构成，目的是旨在加速和优化PHP。 用Facebook官方博客（无法直接访问）上项目负责人赵海平（北大1987届遗传与分子生物专业，普林斯顿计算机科学博士）的话说，HipHop项目对Facebook影响巨大。它目前已经支撑了Facebook 90%的Web流量。由于HipHop，Facebook Web服务器上的CPU使用平均减少了50%，从而大大减少了服务器的需求。为了让这一改进也惠及社区，他们决定将之开源，希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。 PHP和Facebook的问题 众所周知，Facebook的前端主要是用PHP写的。赵海平说，过去六年Facebook从PHP语言的进展上获益良多。PHP非常简单，易学易用，好读好调试，因此新工程师成长很快，有利地促进了Facebook的更快的创新。 PHP是一种脚本语言，其好处是编程效率高，能够支持产品的快速迭代。但是与传统的编译语言相比，脚本语言的CPU和内存使用效率不好。随着Ajax技术的广泛采用，加上SNS对动态要求较高，这些缺点更显得突出。对于每月超过4000亿次PV的Facebook来说，如何实现扩展，尤其具有挑战性。 常见的办法是直接用C++重写PHP应用中比较复杂的部分，作为PHP扩展。实际上，PHP就转变为一种胶水语言，连接前端HTML和C++应用逻辑。从技术角度讲这也没有问题，但是增加了技能需求，能够在整个应用上工作的工程师数量就大大减少了。学习C++只是编写PHP扩展的第一步，接下来还要理解Zend API。由于Facebook的工程团队较小，每个工程师要支持100万以上的用户。有些代码不是团队里每个人都能看懂，这对于Facebook是无法接受的。 Facebook网站本身的可伸缩性更具挑战性，因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览主页 时，系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果，然后还要显示评论、照片等等动态，这一切都需要在一秒内完 成。 自2007年以来，Facebook曾写过几种不同办法解决这些问题。其中包括用另 一种语言重写Facebook，但是由于开发的复杂性和速度等原因，未能实现。他们还重写了PHP的核心部分Zend引擎，并提交给了PHP项目，但最终还是没有获得所需的性能。最后，他们选择了HipHop，终于得偿所愿。 有了HipHop，工程师可以编写代码，用PHP编写组合最后页面的逻辑，并能够继续快速迭代，同时后端服务使用C++, Erlang, Java, Py thon编写，提供新闻提要、搜索、聊天和其他核心功能。 HipHop开发故事 赵海平透露，项目最初是来自几年前Facebook公司一次Hackathon活动（员工在一个晚上自由发挥，实验新的想法），他手工将PHP转换为C++代码，虽然语法上很类似，但是无论是CPU还是内存使用，转换后的C++代码都大大优于PHP。于是他想，如果构建一个系统，编程实现转换，会怎么样呢？ 在此之前，已经有了不少改善PHP性能的方法。Zend引擎在运行时转换PHP源代码为运行在Zend虚拟机上的opcode。开源项目APC和eAccelerator将输出缓存，为大多数PHP网站所使用。此外，还有Zend Server这样的商业产品，通过opcode优化和缓存，提高PHP速度。赵海平选择了另一条道路，将PHP直接转为C++，然后再变成本地机器码。当然，有许多开源项目也是同样的思路，Roadsend和phc编译为C，Quercus编译为Java，而Phalanger编译为.NET。 Hackathon之后8个月，赵海平拿出了原型，足以说明这条路可以走通，编译后的代码的确更快。不久，Iain Proctor和Minghui Yang加入进来。接下来又开发了10个月，在生产服务器上测试了6个月。然后正式上线部署，6个月之后，Facebook 90%以上的Web流量都使用了HipHop。 按赵海平的说法，凭借HipHop，Facebook Web服务器上的CPU使用平均减少了50%，从而大大减少了服务器的需求。项目对Facebook影响巨大。为了让这一改进也惠及社区，他们决定将之开源，希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。 HipHop的原理 HipHop将PHP代码转换为高度优化的C++代码，然后再用g++编译器编译。它可以保持语义等效地执行源代码，但为了提高性能，牺牲了一些很少用到的特性，比如eval()。 HipHop开发中的主要困难在于，在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性，但是大多数PHP代码还是非常简单的。if (&#8230;) {&#8230;} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时，还使用类型推演来选出变量最可能对应的某个类型，从而节省内存。 转换过程分三步： 1. 静态分析。收集声明关系和依赖关系等信息。 2. 类型推演。选择最合适的类型，是C++的标量？还是String, Array, classes, Object或者Variant。 3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。 [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2010/02/07/688/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>phpMyAdmin超时设置</title>
		<link>http://www.jianblog.com/2009/06/09/674/</link>
		<comments>http://www.jianblog.com/2009/06/09/674/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:57:18 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=674</guid>
		<description><![CDATA[phpMyAdmin默认是30分钟超时的，对于做开发的人来说那个时间太短了。经常给退出的感觉不好玩。其实，只要在配置文件里加入 $cfg['LoginCookieValidity'] = 18000; 这样就会有5小时的超时了。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/09/674/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jquery内存占用问题</title>
		<link>http://www.jianblog.com/2009/06/04/661/</link>
		<comments>http://www.jianblog.com/2009/06/04/661/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 19:00:48 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[产品]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=661</guid>
		<description><![CDATA[最近使用PHP跟Jquery结合做一些小东西来研究，为以后做CRM之类的软件做一些资料准备。具体的产品方向是什么，暂时还没有下定论。只是先准备好一些软件以及架构上的东西先。 Jquery进行无刷更新页面的时候，我遇到内存会一直增加的问题。问过很多朋友都说没有这个问题。或许他们没有详细地测试过吧。一般要把页面挂在那里10分钟之后才会有感觉的。从当前页面跳转到其他页面会出现卡一下再转跳的情况。不少公司不重视这个问题的，如开发网，如果把一个页面挂在那里比较久的话，会出现再开其他页面会比较慢。 在GG搜了一把，主要是的原因是因为Javascript的内存泄露引起的。我也找到了一个解决的办法，拿来先顶着吧。对于复杂的JavaScript还是会出现内存泄露，或许那个页面的JavaScript需要我自己重新写过吧。 jQuery.fn.removeNode = function(){ var d; return function(){ if(this[0] &#38;&#38; this[0].tagName != 'BODY'){ d = d &#124;&#124; document.createElement('div'); d.appendChild(this[0]); d.innerHTML = ''; d.outerHTML = ''; } } }(); &#160; (function($) { $.fn.Disposable = function(cln) { return this.each(function() { var el = this; if (!el.dispose) { el.dispose = cleanup; // will be called by [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/04/661/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>preg_match对字符长度有限制？</title>
		<link>http://www.jianblog.com/2009/06/03/647/</link>
		<comments>http://www.jianblog.com/2009/06/03/647/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:14:29 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=647</guid>
		<description><![CDATA[今天在写采集程序的时候，使用到了preg_match，但是有几个页面始终采集不下来。反复看了N遍的正则，没有发现有问题。于是开始怀疑preg_match是否对匹配的字符串有长度限制。但是官方的文档里面没有说明这一点。 于是开始测试：将要匹配的字串不断缩短，直到缩为原来1/5的时候可以正常匹配了，所以更加确定了。 到google里一搜,终于找到了解决方案：在php.ini中加入（随便放到哪里，我是直接放第一行的） pcre.backtrack_limit=-1 再次使用preg_match函数测试一下，大概1300多行上万个字符的字符串也能够匹配了。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/03/647/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBSD下以CGI模式运行PHP</title>
		<link>http://www.jianblog.com/2009/05/28/638/</link>
		<comments>http://www.jianblog.com/2009/05/28/638/#comments</comments>
		<pubDate>Wed, 27 May 2009 16:52:52 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[freebsd]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[操作系统]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=638</guid>
		<description><![CDATA[一般情况下，很多人会选择把PHP以Apache的模块来运行。这样会导致静动态都由Apache的线程处理，并且PHP无法使用到Cache。Apache下跑PHP，应该是以CGI方式运行性能会更好。下面简单地记录，我使用FreeBSD安装以及配置以CGI模式运行PHP的经过。 1、安装Apache以Worker方式运行 cd /usr/ports/www/apache22 make WITH_MPM=worker install clean 2、安装PHP5 cd /usr/ports/ports-mgmt/portmaster make install clean rehash portmaster /usr/ports/lang/php5 /usr/ports/lang/php5-extensions/ 3、安装mod_fastcgi portmaster /usr/ports/www/mod_fastcgi 4、配置Worker vi /usr/local/etc/apache22/httpd.conf #把下面这行unmas 掉 LoadModule fastcgi_module&#160; &#160; &#160;libexec/apache22/mod_fastcgi.so #把下面这行 unmask掉 Include etc/apache22/extra/httpd-mpm.conf #在文件最后加入fastcgi文件的调用 Include etc/apache22/extra/fastcgi.conf &#160; &#160; vi /usr/local/etc/apache22/extra/httpd-mpm.conf #将Worker那段修改为以下内容，一般2G内存的机器建议在800以内。设多与少需要看应用程序的复杂程序，而不是随便设一个数就好。 &#160;&#160; &#160;ThreadLimit 512 &#160;&#160; &#160;StartServers 1 &#160;&#160; &#160;MaxClients 512 &#160;&#160; &#160;MinSpareThreads 1 &#160;&#160; [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/05/28/638/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty使用Memcache进行缓存</title>
		<link>http://www.jianblog.com/2009/05/20/615/</link>
		<comments>http://www.jianblog.com/2009/05/20/615/#comments</comments>
		<pubDate>Tue, 19 May 2009 23:26:47 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[memcache]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=615</guid>
		<description><![CDATA[默认的Smarty缓存是使用File进行缓存的。在高并发的时候，压力会在IO方面。为了避免在高并发的时候，IO占用高。我写了一个Smarty的插件，将缓存写入Memcache。曾经想过自己写一个模板的，感觉后期的维护比较麻烦，所以。。。。 &#60;?php /** &#160;* Smarty Cache Handler&#60;br&#62; &#160;* utilizing Memcache extension (http://pecl.php.net/package/memcache)&#60;br&#62; &#160;* &#160;* Name:&#160; &#160; &#160;mmcache_cache_handler&#60;br&#62; &#160;* Type:&#160; &#160; &#160;Cache Handler&#60;br&#62; &#160;* Purpose:&#160; Replacement for the file based cache handling of Smarty. mmcache_cache_handler() is &#160;*&#160; &#160; &#160; &#160; &#160; &#160;using Memcache extension to minimize disk usage. &#160;* File:&#160; &#160; &#160;memcache_cache_handler.php&#60;br&#62; &#160;* Date:&#160; &#160; &#160;May [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/05/20/615/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5按需动态加载类</title>
		<link>http://www.jianblog.com/2009/05/19/611/</link>
		<comments>http://www.jianblog.com/2009/05/19/611/#comments</comments>
		<pubDate>Tue, 19 May 2009 02:40:47 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=611</guid>
		<description><![CDATA[spl_autoload_extensions(&#34;.php&#34;); $classname = $mods . &#34;Class&#34;; spl_autoload($classname); $chowclass = new $classname(); 通过配置include的路径，之后通过上面的$classname规则动态将文件加载。我上面的规则说明，文件名为”类名+Class”，类名称为“类名+Class”。 SPL在Zend Framework也有应用的。 这只是一个关于SPL的小应用，SPL是PHP5比较好的东西。有空再慢慢地研究一下。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/05/19/611/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

