PHP GD 库在 Linux 下使用字体

现在一般的 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 字体时的代码例子如下: 阅读全文 >>

PHP 中回调函数是全局的或是类实例时不同写法

PHP 像 JavaScript 一样,很方便使用回调函数,函数名就像一个普通的变量名一样可作为其他函数的参数,即成为一个让宿主函数调用的回调函数。但回调函数的用法依据回调函数是否是全局函数还是一个类中的函数是有区别的。比如 PHP 的preg_replace_callback — 用回调函数执行正则表达式的搜索和替换函数可以接受一个回调函数,我们来看这种区别。

如果是全局的回调函数,那容易,只要写上函数名作为字符串的形式传入就行的,看:

而如果 preg_replace_callback 函数是在类成员函数中被调用,同时 inverse 回调函数也是该类的成员函数,写法就不一样了。要是仍然写成下面这种方式的话: 阅读全文 >>

真是瞎折腾了一回,设置 RSS 中输出的记录数原本如此简单

之前写有一篇 让 WordPress 的 Rss 显示更多或所有的日志, 为了让 WordPress 的默认 Post 和 Comment 的 RSS 输出记录数多于10 条,竟然把这一系列的代码都穿越了一番。确实解决了问题,定位到了 RSS 在查询时 limit 值在哪行代码得到的,当时通过修改 query.php 手工指定输出的记录数。因为 WordPress 代码无法单步调试,所以为了找到这段代码着实费了好一番功夫的。

其实何必来得如此周折呢,在后台里可以直接修改该参数的,wp-admin 中点击 Settings->Reading,打开 Reading Settings 页面,选项 Syndication feeds show the most recent 就是用来设置输出各种 RSS 记录里显示最近多少条记录,反应到 SQL 就是 limit 0, X  中的 X 值,比如 20 条记录,或者你的博客有 2000 条记录,你设置的此值为 2000 大就输出所有的记录了。 阅读全文 >>

用 SyntaxHighlighter Evolved 作为自已的代码加亮插件

敝人的博客常常要贴程序代码,因而装个合适的语法加亮的插件是必不可少的。可以预见得到的是基本上各种语法加亮的插件都是源自于 Google 上的一个项目 SyntaxHighlighter. 但具体选用哪一个却要好自体验斟酌的。有几篇很好的文章可参考下:

1. WordPress代码高亮插件指南[译文]
2. WordPress 高亮代码显示插件 – SyntaxHighlighter Evolved
3. 让 WordPress 下 CKEditor 支持 CodeColorer,
4. wordpress代码高亮插件wp-codebox使用方法(语法详解)

怎么着那都是他人之言了,自己试了才知究意,我就说说 SyntaxHighlighter Evolved 吧,我正用着的。之前在 http://unmi.blogjava.net 的博客我往日志中嵌入代码的方式是 <textarea name=code class=php></textarea> 来写的,这样在 textarea 中代码能保持原有的格式,该有的空格都在,那是因为那边的编辑器支持的好, 阅读全文 >>

WordPress 站点架设手记,你也可能会用到的插件

说来还得益于工作中的内容就有要维护着一个 WordPress 的网站,必要时开发些插件。之前用 Joomla 架过一个站点(http://www.scalawork.com),懂得了 WordPress 的精练之后才晓得 Joomla 是何等的复杂。当然功能上 WordPress 与 Joomla 恐怕还是有些差距,但适合自己就是最好的。其间对 Dropal 也略有了解,仍不妨碍我最终选择了用 WordPress,当然对它的熟悉程度也是最重要的一点。

辛苦忙活了一阵总有不少收获,顺便记下了架设这个 WordPress 站点的过程。首先,要买个空间和域名自是不必多说,要想省事或是对某些行规反感的话就买国外的吧,代价就是有点慢。恰如此处,浏览时多加点耐心哦,看来应该是主机的缘故,得换到西部某个机房去试试。 阅读全文 >>

让 WordPress 的 Rss 显示更多或所有的日志

默认 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 文件。要说定位到这段代码还真不简单。 阅读全文 >>

WordPress 应用中如何实现 URL 内部重定向

这里要说的 URL 重定向不是指地址栏输入一个 url a,然后地址栏的 url a 被变为 url b 那样的重定向,而是指 url 不变的重定向,也就是重定向过程在服务端默默的帮你完成了。

这个需求是源于开发 WordPress 插件时,然望在前端仅用 http://unmi/dosth 这种形式来访问自己的插件程序,而不是用 http:/unmi/wp-content/my-wordpress-plugin/dosth.php 这么一长串不友好的 URL。

有三种办法:

1. WordPress 是极力推荐与 Apache 搭配使用,所以可以在 Apache 的配置文件中用 Alias 指令。其实一开始我是想在应用的 .htaccess 文件中加指令,使用 mod_rewrite 模块来实现 URL 内部重定向功能,但碰到一些问题,所以暂时先在 httpd.conf 中加过 Alias 指定别名来实现过: 阅读全文 >>

在 WordPress 插件管理页面中引入样式或脚本文件

在开发 WordPress 插件时,你当然可以在每一个你需要用到样式或脚本文件的页面像传统方式那样把它们引入,比如:

有个插件 hello-unmi, 要在管理页面中引入插件目录的 include 文件夹里的 admin-style.css 和 admin-core.js 文件,可以在每个要用到它们的页面都写上:

页面多了会是个麻烦,要说问题也不大,不过我们既然在 WordPress 的插件体系中,应该考虑好利用上下文给我们带来的便利。可以在 'admin_enqueue_scripts' 的 action 扩展中去引入,这样我们就只要写一次就能为所有(或特定)的管理页面引入想要的样式和脚本文件. 阅读全文 >>

WordPress Rewrite / Permalink内部过程分析[转]

本文说明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)类里这些变量被用来建立主循环. 阅读全文 >>

自定义 WordPress 插件如何对记录进行分页

在我们为 WordPress 开发插件的时候,在涉及到列表显示许多记录的时候,肯定要考虑分页显示的问题。自然的,不管是简单性也好,还是统一性,直接参考下 WordPress 自己是怎么实现的,看看 Posts 或 User 管理页面的实现代码,比如 User 管理页面的实现代码在 wp-admin/includes/user.php 中的 WP_User_Search 类。默认实现其实是很好看的,如:。那我们如何在自己的插件里实现这样的效果呢,比如像这个: 阅读全文 >>