2007-01
02

box模型即由<div>等块元素的 margin、padding、border、width、height 等属性构成的显示模型, 它是CSS布局的基础。通过设置<div>的各种属性,可以得到任何想要的页面效果。

各个元素的含义如下:

box-model.gif
  • margin: box外边界到外层元素的距离,即余白
  • border: box的边界宽度。
  • padding: box内的内容到box内边界的距离,即边距
  • width: box的宽度。
  • height: box的高度。

其中有问题的就是 width 和 height 的定义。一般的浏览器将 width 和 height 定义为 除掉 margin、padding、border 之后的box内容的大小,实际上 box 所占有的面积 为定义的 width/height 再加上 margin、padding、border的大小。

阅读全文 »

2006-12
29

Wordpress的表名前缀默认为 wp_,该值为Wordpress安装时指定,安装之后无法更改。但若不得已需要改变时,可以使用以下方法。

  • 将数据库导出。
  • 将表中的所有 `wp_ 替换为 `wp2_,其中 wp2_ 为新的表前缀。
  • 导入数据库。
  • 修改 wp2_options 表的数据,在第四行左右有个 wp_user_roles,将其修改为 wp2_user_roles。
  • 修改 wp2_usermeta 表的数据,将所有的 wp_user_level 修改为 wp2_user_level,所有的 wp_capabilities 修改为 wp2_capabilities。

如果忘记修改 wp2_options 和 wp2_usermeta 中的值,后台管理就无法使用。


2006-12
27

或许这个已经不是什么新闻了。以data:开头,后面加入MIME类型和内容,即可将一个文件包含在一个URL内。包含二进制文件的格式为 data:image/gif;base64,BASE64编码。例如下面的图像文件包含了本站的图标。(请查看源代码以查看data:URLs的格式)

这个协议由RFC2397制定,目前Firefox、Opera、Konqueror、Safari都支持。IE不支持。唉,又是IE。


2006-12
26

这个话题似乎是老调重弹了,也有很多人给出了相应的方法。我的方法如下:

RewriteCond %{REQUEST_URI} !^/wp-includes/images/noimage.png$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[0-9a-z]+\.inspiremedia\.org/.*$ [NC]
RewriteRule \.(jpg|gif|png|zip|gz|rar)$ http://tech.inspiremedia.org/wp-includes/images/noimage.png [R,L]

主要功能位于第二行,当请求的HTTP_REFERER头不输入本站所在的域时,则执行第三行的重写规则,重定向至 noimage.png。 第二行最后的[NC]表示匹配时忽略大小写。第一行用于防止死循环。

2006-12-26

接受建议,将重写规则仅适用于 wp-content/uploads 下的文件。

RewriteCond %{HTTP_REFERER} !^http://[0-9a-z]+\.inspiremedia\.org/.*$ [NC]
RewriteRule wp-content/uploads/.*\.(jpg|gif|png|zip|gz|rar)$ http://tech.inspiremedia.org/wp-includes/images/noimage.png [R,L]


2006-12
24

这是一个根据IP地址判断所在国家的插件。用处很多,显示评论者国家、阻挡垃圾评论等等。 其实这种插件有很多,比如IP to Country, 不过这个程序感觉一来效率不高,二来用起来也不是很方便。于是我写了这个插件,仅仅一个函数。

原理很简单,将IP地址范围保存到MySQL数据库中,然后通过SQL取出给定IP地址的数据,显示国家即可。

$ip = ip2long($ipaddr);
$sql = sprintf("SELECT country FROM ip2country WHERE ip_from<=%u AND ip_to>=%u", $ip, $ip);
$row = $wpdb->get_row("$sql");
return $row->country;
阅读全文 »

2006-12
22

最近在购买域名和虚拟主机上花了不少时间,有些原来不懂的东西也弄明白了,写在这里大家分享一下。

能买到什么样的域名?

一般是指 yourdomain.com 这样的域名,而不是 www.yourdomain.com。后者中的 www 叫做主机名,不是域的一部分。 也就是说,当你购买了 yourdomain.com 之后,所有以这个域结尾的域名都属于你了。你可以任意创建主机名, 例如 ftp.yourdomain.com,sale.yourdomain.com 等等。不过若在国内购买的话,服务商可能会限制你能创建的主机数目。

什么是A记录和CNAME记录?

A和CNAME是DNS记录的两种形式。A即主机,解析结果为一个IP地址。例如你可以添加A记录“www”到1.2.3.4, 那么 www.yourdomain.com 就被解析到 1.2.3.4。而CNAME为一个别名,它应当被解析到另一个域名, 例如添加CNAME记录“ftp”指向www,则ftp.yourdomain.com会先被解析为www.yourdomain.com, 再解析为1.2.3.4。CNAME甚至可以指向其他域,例如设置 CNAME记录 mail 指向smtp.another-domain.com, 则 mail.yourdomain.com 会解析为 smtp.another-domain.com。

Sub-domain forward是什么?

GoDaddy的域名服务中有一个子域名重定向(subdomain forward)服务,它和上述的CNAME有什么区别呢? 实际上它是增加一条A记录指向服务商的一台服务器,该服务器再将HTTP请求转发到你设置的转发目标。

购买空间时domain和sub-domain数目是什么意思?

domain是指你可以为你的空间绑定的域(yourdomain.com而不是www.yourdomain.com)的数目。 而sub-domain是你可以在已绑定的域空间商提供的域中添加的子域名(www.yourdomain.com)的数目。 假设你在空间商 space.com 上购买了空间,这个空间能提供1个域名绑定和20个子域名绑定, 那么你可以将以前购买的 yourdomain.com 绑定到该空间,之后还可以绑定 www.yourdomain.com、 ftp.yourdomain.com、yourname.space.com 等类似这样的子域名20个。

一些apache的知识

.htaccess:配置文件,可以自己修改某个目录的服务器配置。 mod_rewrite:apache的URL重写模块。通常要想开个博客的话,.htaccess和mod_rewrite为必需功能



2006-12
20

今天购买了一个域名: tech.inspiremedia.org ,取其“灵感媒体”之意。原 charlee.itbdns.com 的所有服务都转移到 tech.inspiremedia.org 上。RSS feed地址不变,不过里面的固定链接变了,使用阅读器的朋友们,只好向你们说声对不起了,把看过的文章重新标为已读吧。

不过虽然固定链接变了,原来的 charlee.itbdns.com 上做了重定向,所以短时间内两个域名都会生效的。



2006-12
16

在blog上添加mp3播放器的方法有很多,这里介绍通过 Flash MP3 Player 来播放音乐的方法。

首先到 Flash MP3 Player 的主页上下载该程序。 解压缩之后,将 mp3player.swf 和 ufo.js 两个文件放到服务器上,这里假设放在 /musicplayer 下。 (注意,Flash MP3 Player有个bug,路径名中不能包含 mp3 字样,否则不能正常读取播放列表。)

在wordpress当前主题目录中建立 mp3player.php,内容如下。

<p id="mp3player"><a href="http://www.macromedia.com/go/getflashplayer" target="_blank">下载 Flash Player</a>来播放音乐。</p>
<script type="text/javascript">
  var FU = { 
    movie:"/musicplayer/mp3player.swf",
    width:"190",
    height:"20",
    majorversion:"7",
    build:"0",
    bgcolor:"#FFFFFF",
    flashvars:"file=/musicplayer/playlist.xml&showdigits=true&repeat=true&shuffle=false&lightcolor=0x0080FF&backcolor=0x0066AA&frontcolor=0xEEEEEE" };
  };
  UFO.create(  FU, "mp3player");
</script>

然后在 sidebar.php 的适当位置加入:

<?php include(TEMPLATEPATH . '/mp3player.php'); ?>

在 header.php 中加入:

<script type="text/javascript" src="/musicplayer/ufo.js"></script>

最后将mp3文件上传到 /musicplayer 目录下,最好文件名为英文名,然后在 /musicplayer 下建立 playlist.xml 文件。

<?xml version="1.0"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
  <trackList>
    <track>
      <title>Music Title</title>
      <creator>Singer</creator>
      <location>/musicplayer/song.mp3</location>
    </track>
  </trackList>
</playlist>

效果如下图。

flashmp3player.png


2006-12
12

Linux的screen命令不错,习惯了你会觉得它比windows的任务栏好用多了。下面是我的.screenrc,仅供参考。

#
# ~/.screenrc
#

# 启动时不显示欢迎屏幕
startup_message off

#  定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。
escape ^Zz

# 屏幕缓冲区 1024 行。
defscrollback 1024

# 在最下一行显示窗口列表和时钟
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s "

# 关闭错误提示
vbell off

# 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表
bind w windowlist -b
bind ^w windowlist -b
阅读全文 »

2006-12
08

大家都知道Linux下的date命令可以查看或修改系统时间,其实它还能用于日期计算等,十分方便。

首先是最基本的查看、修改时间。

[root@local ~]# date
Thu Dec  7 21:47:52 JST 2006
[root@local ~]# date --set='2006-12-08 14:01:00'
Fri Dec  8 14:01:00 JST 2006

指定日期显示格式,具体的格式指定方法参见 date --help。

[root@local ~]# date +%Y%m%d
20061208
[root@local ~]# date +%F
2006-12-08
[root@local ~]# date +%s
1165554109
[root@local ~]# date -R
Fri, 08 Dec 2006 14:02:09 +0900

时间计算。

[root@local ~]# date -d "2 days ago" +%F
2006-12-06
[root@local ~]# date -d '15 years' +%F
2021-12-08
[root@local ~]# date -d '30 minutes ago'
Fri Dec  8 13:57:17 JST 2006