手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

在新浪SAE上使用htmlpurifier

修复HTML页面,以前一直用的是tidy庫,但SAE上其實是無法使用的

所以,我選擇了htmlPurifier庫,不過如果直接使用的話,是會報錯的,因為HtmlPurifier默認在修復頁面的時候會使用緩存,這樣可以加快速度。因此代碼就變成了這樣

PHP代码
  1. $htmlPurifier = new HTMLPurifier(array(  
  2.         'AutoFormat.AutoParagraph' => TRUE,  
  3.         'HTML.TidyLevel' => 'medium',  
  4.         'Cache.DefinitionImpl' => NULL,  
  5.     ));  

本来,我是将Cache.DefinitionImpl设置为SAE_TMP_PATH的,但HTMLPurifier中会chmod这个目录的权限,而tmppath是无法设置权限的,因此我干脆设置为NULL。

这样一来,问题就解决了。哈哈

Tags: sae, tidy

一件挫事

之前在給數據做緩存的時候做了一件挫事:
將某個數據表進行了cache,數據索引的鍵是該表的某個字段 。這個數據我是一般不會動它的,但是我需要知道這個表中最大的xxx_ID(索引字段)是什麼。
當然是有兩個辦法:
1、select max(xxx_id) from table
2、直接將緩存中最大的xxx_ID取出來就完事了

我用的是第二種,因為我order by 的時候是xxx_id ASC,於是我想當然的就直接array_keys($data),然後array_pop一下,最後彈出的這個xxx_ID就是最大的xxx_ID

但理想往往都是與現實相反的,不知道為什麼,它就是沒按順序排。。於是我array_pop死出彈不出我要的數值。
想了半天,突然想到。。。max不就完了嗎?於是蛋疼N久的問題一下子就解決了。何苦那麼累呢。哎。。。

腦子真的有時候是轉不過彎啊

最小完美哈希函数

不好意思,这是一个标题党,主要是这个词语太让人震惊,但现在它又将变的地了。所以我先记录一下。

什么是完美哈希函数?
這一段內容來自:(http://www.kuqin.com/algorithm/20111108/314569.html)
最小完美哈希函数是什么,要从定义说起,这个名字很长,一步步解释。

  1. 哈希函数 任意函数h(x)都可以说哈希函数,一般来说,一个良好的哈希函数可以尽量避免重复。x的集合是参数域,h(x)的集合是值域。
  2. 完美哈希函数  完美哈希函数,就是完全不会冲突的哈希函数,这要求函数的值域至少比参数域要大
  3. 最小完美哈希函数 最小完美哈希函数,就是指函数的值域和参数域的大小完全相等,一个也不多
  4. 保序最小完美哈希函数 保序的意思就是指这个哈希之后顺序是不变的,同时还能满足其他两个条件。
这个函数的优点就是形式上很完美,就像给一个排好序的文档编上的序号一般紧凑可靠。但是这个函数有两个缺点,一是必须事前必须知道原数据集,二 是需要花一定的CPU来生成这个函数。我认为,对于数据仓库类的线下搜索应用,这个算法是有用武之地的。但对于强调实时的数据业务,这个算法是不适合的。
----------
這裏還有一個點評:(http://liulixiang.info/blog/tag/%E6%9C%80%E5%B0%8F%E5%AE%8C%E7%BE%8E%E5%93%88%E5%B8%8C%E5%87%BD%E6%95%B0/)

点评:(by liulixiang)

“最小完美哈希函数”从概念上很完美,生成的思想也很不错,不过实际运用中并不是那么常见:应用中已知数据集再做哈希的情况不是特别多,对时空的复杂度要求也没有过于苛刻,普通的方法即可承受。另外一般数据集很大,生成该函数的开销也太大。

---------
參考文檔:

最小完美哈希函数方法来自于Czech, Havas, Majewski等的论文:

An optimal algorithm for generating minimal perfect hash functions(Czech等1991)

Graphs, hypergraphs and hashing(Havas等1993)

A family of perfect hashing methods(Majeki等1996)

本文大部分转述或摘抄自《深入搜索引擎——海量信息的压缩、索引和查询》(该书豆瓣链接) 一书(Page 173~181),该书由梁斌翻译(原版即大名鼎鼎的MG——“Managing Gigabytes: Compressing and Indexing Documents and Image, Second Edition” 由Ian H. Witten, Alistair Moffat, Timothy C.Bell合著)(MG网站

count_chars的另类作用

count_chars表面上是計算char出現的次數,但事實上對中文支持明顯是不好的。
所以,它還有另外一個作用,即count_chars($str,4);
看好第二個參數哦。當這個參數是4時,會返回所有的会用作计算的字符串:

XML/HTML代码
  1.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`defghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™šœžŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¹»¼¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  

嗯,因此这也算是一个小技巧啦。

yiiredis的一个小BUG

yiiredis是基于phpredis的一个YII组件。平时用的话确实也挺方便,但偶尔还是会有一些小BUG,比如说:
yiiredis自带了计数器的功能,嗯,它是调用了phpredis裏的代碼:
$counter = new ARedisCounter($key);
$counter->increment();  //表示每次加1
echo $counter->getValue();

這樣的代碼是沒有任何問題的,但問題卻出現在了:
$counter = new ARedisCounter($key);
echo $counter->getValue();

上面的代碼好象沒有任何問題?但就因為這樣寫,程序崩潰了。。
NND,你不先加1,就不能取$counter->getValue();
這尼瑪也太坑爹了吧。。。。。你好歹默認一個0嘛。

Tags: yiiredis