Reader's Digest

Digest your Internet

Archive for the 'Programming Area' Category

关于如何提高PHP速度的一些文章

简单的数据缓存技术 近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。 Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。 <? // load data with cache function load_data($id,$cache_lifetime) { // the return data $data = array(); // make cache filename $cache_filename = ‘cache_‘.$id.‘.php‘; // check cache file‘s last modify time $cache_filetime = filemtime($cache_filename); if (time() – $cache_filetime <= $cache_lifetime) { //** the cache is not expire include($cache_filename); } else { //** the […]

Read the rest of this entry »

谈谈生成静态页面的一些经验

静态页面的生成一般有这么几个思路了。。 1。程序编写过程中。不使用直接输出的语句。而时将所有的输出连接至输出字符串,输出完成后。再直接将输出字符串内容写入文件 2。编写中按照正常的方式编写。通过ob函数组捕获输出。然后将输出写入文件 3。使用模板类时,用get/fetch一类的方法获取输出。并写入文件。 具体实现上又有这两种方法 1。管理后台添加记录时,直接生成目标html页面,并且前台调用连接直接指向生成的html页面。这种方法程优点是程序效率最高。服务器负荷轻,不过由于生成的是纯静态页面,一旦页面样式上有所改动就必须重新生成所有的内容页。所以实际使用中应用一般不是太多。更多的是使用js,ssi,xml/xsl等客户端手段,生成的静态文件中仅保存数据,不涉及样式,这样能达到速度和维护性的平衡,不过相对前后台程序要复杂些(应用这种方法时,由于内容为纯静态,可以搭配单独编译的纯静态的apache使用。。效率和资源占用上比包含动态内容支持的要更佳) 2。前台访问链接指向php程序,php程序首先检查是否存在相应的静态文件。如果静态文件不存在。则生成并重定向至此文件,否则直接重定向。这种方法实际使用中一般和apache的url_rewrite功能一起使用。将php的文件地址重为html的形式,有利于搜索引擎的检索。这种方法在效率上略有损失,不过程序结构简单,便于调整,在访问量不是很大时使用很合适

Read the rest of this entry »

实现跨域名Cookie

Cookie真是一个伟大的发明,它允许web开发者保留他们的用户的登录状态。然而,当你的站点或网络 有一个以上的域名时就会出现问题了。 在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。 我的解决方案将使用下面的一般框架: 一个预置的脚本将用来接受通过GET或COOKIE方式传递过来的sessionid号。它将比COOKIE优先选择GET 变量。所以,无论何时需要引用交叉的域名时,我们把sessionid做为一个URL参数进行发送。修改Apache配置,用来实现重写所有的交叉域名的cookie。这样做的原因一会儿就会清楚了。在任何时候出现一个交叉域名引用时使用变量。 第一步:创建预置脚本 将下面的代码加到预置脚本中(或出现在所有脚本之前的函数中)。 <?php /* 支持交叉域名cookie… */ // 如果GET变量已经设置了,并且它与cookie变量不同 //则使用get变量(更新cookie) global $HTTP_COOKIE_VARS, $HTTP_GET_VARS; if (isset($sessionid) && isset($HTTP_GET_VARS[‘sessionid’]) && ($HTTP_COOKIE_VARS[‘sessionid’] != $HTTP_GET_VARS[‘sessionid’])) { SetCookie(‘sessionid’, $HTTP_GET_VARS[‘sessionid’], 0, ‘/’, ”); $HTTP_COOKIE_VARS[‘sessionid’] = $HTTP_GET_VARS[‘sessionid’]; $sessionid = $HTTP_GET_VARS[‘sessionid’]; } ?> 一旦这个代码运行之后,一个全局的’sessionid’变量将可以用于脚本。它将保存着用户的cookie中的 sessionid值,或者是通过GET请求发来的sessionid值。 第二步:为所有的交叉域名引用使用变量 创建一个全局的配置文件,用于存放可以进行切换的域名的基本引用形式。例如,如果我们拥有 domain1.com和domain2.com,则如下设置: <?php $domains[‘domain1’] = “http://www.domain1.com/-$sessionid-“; $domains[‘domain2’] = “http://www.domain2.com/-$sessionid-“; ?> 现在,如果在代码中如下做: <?php […]

Read the rest of this entry »