- 正在使用亚马逊的 VPS,一年的小心翼翼的免费期,选择的是 Debian 6 32 位的系统,因搭建 WordPress 试图在上面安装 Nginx+PHP 的环境。看着在 Nginx 环境下多是使用 php-fpm,而不是 php-cgi,前者与后者的区别是在孤立的 php-cgi 之上又多了一个调度层。
一开始打算一步步纯手工打造,但在执行apt-get install php-fpm时总有不可逾越的依赖症,所以转而寻求更傻瓜的一键包安装方式。试过 LNMP,包太大,东西太过于齐全,把人太当傻瓜,虽然如此,我在用它安装时也有些慢,因为它也是采取的编译安装方式,针对本机应该有很好的优化。没装完我就中断了,下次有时间可以再试下。
正好在这期间看到了 Dvid Pennington 制作的 lowendscript lnmp 一键安装脚本,很省事,连安装 WordPress 也考虑到了,这里有介绍,比较详细 lowendscript:最省资源lnmp一键包。我只记录下我自己的安装过程,以备忘。 Read More - 关于把 IP 地址转换为地理位置可以使用网络上很多的 API,好处就是不用在本地存储一个 IP 数据库,而且一般网络上的 IP 库会自动更新,不利的地方就是太依赖于网络,性能表现也可能会弱些。比如像下面的 API:
http://api.hostip.info/get_html.php?ip=58.63.236.31
http://api.hostip.info/flag.php?ip=58.63.236.31
这里介绍 PHP 如何使用 GeoLiteCity.dat 库把 IP 转换为地理位置,GeoLiteCity.dat 可以在 http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 下,解压出 GeoLiteCity.dat,即可,我们可以手动去更新新的 IP 库。
下面 PHP 解析 IP 的过程参考自 WordPress 插件 Visitor Maps and Who's Online 的实现。可以找到该插件的两个文件 include-whos-online-geoip.php 和 visitor-maps.php 告诉了我们怎么做。你可以点击这里的链接下载到这两个文件 Read More - 前一个多月中都是用 fetch_rss() 函数 (定义在 wp-includes/rss.php 中) 来获取外部 RSS 数据的,代码如下:
1<?php 2 $articles = fetch_rss("http://feed.unmi.cc"); 3 foreach($articles as articles){ 4 echo $article['title'].'=>'.$article['link']; 5 //更多元素可用 var_dump($article) 查看 6 } 7?>
当然,你可以用 wp_rss() 或 get_rss() 直接在页面上显示获取的 rss 记录,我是需要处理 $articles 数组变量的。 Read More 其实一直以来,我写博客都比较喜欢在线来写,省得装那些客户端,主要是曾经试用 Windows Live Writer 写出的东西垃圾代码太多,且文件上传时目录不好控制。 不能因为一次不愉快的经历就害怕十年吧。为什么又再次提起博客的离线客户端呢?因为现在风声吃紧,特别是对于使用国外空间的,你非常的谨慎的写着, 该避讳的地方也避了,还是不知哪个字成敏感词,一提交,网络被重置,完蛋了,抓逛也无济于事,一切重来,如果你没有事先 Ctrl + C 的话。 所以我现在网上养成了一个良好习惯,写一段话在提交之前必按 Ctrl + C。
找个博客的客户端程序是十分必要的,由于我的是用的 WordPress,所以在此介绍几款支持 WordPress 的客户端。 有了 WordPress 客户端不光可以不受胡萝卜的侵扰,还能让你无论何时何地自由的书写,连上线后即发布,上传图片文件等事也省了许多麻烦,还有更多的在线编辑不能提供的功能。
Read More- 在 WordPress 中可以设置每天显示的日志数,并以上一篇、下一篇的链接进行导航。但是日志多了,一个是不能快速跳到哪几篇来浏览,还有就是别人对你有多少篇也没底。所以需要一个分页导航的插件,网上一找就看到了 WP-PageNavi 比较受推崇,而 WP-PageNavi-LightWord 只是 WP-PageNavi 针对 LightWord 主题的一个改造版,仅仅是自定义了下样式,其他如选项、代码几乎一样,由于它们使用了同样的函数,所以不能同时被激活。可以先看看它们界面上的一些区别:
WP-PageNavi 的界面截图:
WP-PageNavi-LightWord 的界面截图:
Read More - 现在一般的 PHP 主机都支持 GD 库和 FreeType/TrueType,普通的画字符串的函数 imagestring 只能指定字体大小,不能指定字体名称。像 imagettftext 这样的函数可以指定字体名称和字符串显示的角度,它的原型是:
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
注意这里的 $fontfile 是个字体文件,不是字体名,我刚开始就搞错了,给它传递的是 "Arial" 或是 "Arial.ttf" 而不能显示出任何东西来。在 Windows 下字体文件一般都在 c:/windows/fonts/ 目录中,所以在 Windows 下用 imagettftext 使用 TrueType 字体时的代码例子如下: Read More - PHP 像 JavaScript 一样,很方便使用回调函数,函数名就像一个普通的变量名一样可作为其他函数的参数,即成为一个让宿主函数调用的回调函数。但回调函数的用法依据回调函数是否是全局函数还是一个类中的函数是有区别的。比如 PHP 的preg_replace_callback — 用回调函数执行正则表达式的搜索和替换函数可以接受一个回调函数,我们来看这种区别。
如果是全局的回调函数,那容易,只要写上函数名作为字符串的形式传入就行的,看:1/**@author Unmi*/ 2function inverse($matches) { 3 return $matches[2].":".$matches[1]; 4} 5 6$text = preg_replace_callback ("/(\d{7}):(.+)/", 'inverse' , '1125535:fantasia@sina.com'); 7echo $text; //Output result: fantasia@sina.com:1125535
而如果 preg_replace_callback 函数是在类成员函数中被调用,同时 inverse 回调函数也是该类的成员函数,写法就不一样了。要是仍然写成下面这种方式的话: Read More - 默认 WordPress 提供的 RSS 链接只能获得最近的十篇日志,如果想得到更多,或是用于某种目的而想通过 RSS 获得所有的日志,那恐怕就得做些手脚了,或许还有更简单的办法,只是我这里改了下源代码中的 limit 查询参数。
关于 WordPress 的 Feed 请参考:http://codex.wordpress.org/WordPress_Feeds,用以下代码可以输出你实际的 RSS 的 URL:
URL for RDF/RSS 1.0 feed <?php bloginfo('rdf_url'); ?>
URL for RSS 0.92 feed <?php bloginfo('rss_url'); ?>
URL for RSS 2.0 feed <?php bloginfo('rss2_url'); ?>
URL for Atom feed <?php bloginfo('atom_url'); ?>
URL for comments RSS 2.0 feed <?php bloginfo('comments_rss2_url'); ?>
在我的机器上永久链接后是用 http://unmi/feed/ 来访问 rss2,模板将会用 wp-includes/feed-rss2.php 文件。要说定位到这段代码还真不简单。 Read More - 本文说明WP 对URL rewrite并生成当前请求的过程.
关于Query Vars这是WordPress全部代码中最重要的变量,所谓的query vars是一系列变量集合. WP通过解析URL设定query vars, 并通过分析query vars值决定显示那些文章,设定标志位等.所谓标志位是WP_Query类中一系列$is_xxx形式布尔成员变量,所有的is_xxx()形式template tag实际上都是返回$wp_query里对应成员变量值. 举例而言,如果当前页面是单篇文章, 则p这个Query Var(以下简称变量)值不为空.(在WP类里空的query var根本不存在,而WP_Query类里如果对应name的query var没有设置,$wp_query->query_vars['varname']被填充为空值), 如果当前为搜索页, s变量值则为搜索关键字. 如果p和page两个变量都不为空值, 则当前为单篇文章分页页面, 依次类推. Query Vars在WP类($wp)里根据WP_Rewrite里的rewrite规则生成, 在WP_Query($wp_query)类里这些变量被用来建立主循环. Read More - 不管是防小人也好,还是防君子手误也罢,很多地方都需要用到图片验证码来加强安全性。在 PHP 站点上我选择了 Captcha,用起来很简单的。
Captcha 从 http://www.captcha.ru/en/kcaptcha/ 下站,当前版本是 KCAPTCHA 1.2.6。
下载后,解压后,可以看到它自己带了例子,就是 index.php 用来产生图片,form_example.php 中引入了图片, 只是 <img src="./?<?php echo session_name()?>=<?php echo session_id()?>"> 的写法有点不好理解,要是写成 <img src="index.php/?<?php echo session_name()?>=<?php echo session_id()?>"> 就好看多了,至少知道 index.php 的内容是个图片。 Read More