服务器和网站类

修改主题支持两种菜单并存

在本站升级到WordPress 3.0后,浏览了一下许久没有看过的themes目录,发现几个我喜欢的主题,经过一番试用,发现Mystique也就是您现在看到的主题最合我心意,后来才发现这也是digitalnature的作品,good job!

美中不足的是,Mystique配置界面中主菜单只能在无、链接、页面、分类目录和自定义菜单中做单选,我希望能把分类目录和自定义菜单并存,一起显示出来。可惜作者没有设计这样的功能。Hacking的真谛就是要自己动手,当然还有无私分享。下面我就贴出我的做法:

先来看看core.php中相关功能实现函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// print the main navigation menu
function mystique_navigation() {
  $navtype = get_mystique_option('navigation');
  if($navtype): ?>
 
   <div class="shadow-left">
   <div class="shadow-right clearfix">
   <?php
    $nav_extra = apply_filters("mystique_navigation_extra", '');  // check for new icons and output
    if($nav_extra) echo '<p class="nav-extra">'.$nav_extra.'</p>';  ?>
 
   <ul id="navigation" class="clearfix">
     <?php
      if((get_option('show_on_front')<>'page') && get_mystique_option('exclude_home')<>'1'):
       if(is_home() && !is_paged()): ?>
        <li class="active home"><a class="home active fadeThis" href="<?php echo get_settings('home'); ?>" title="<?php _e('You are Home','mystique'); ?>"><span class="title"><?php _e('Home','mystique'); ?></span><span class="pointer"></span></a></li>
       <?php else: ?>
        <li class="home"><a class="home fadeThis" href="<?php echo get_option('home'); ?>" title="<?php _e('Click for Home','mystique'); ?>"><span class="title"><?php _e('Home','mystique'); ?></span><span class="pointer"></span></a></li>
      <?php
       endif;
      endif; ?>
     <?php
       if($navtype=='categories'):
        mystique_list_categories(array('hide_empty' => false, 'exclude' => get_mystique_option('exclude_categories')));
 
       elseif($navtype=='links'):
        $links = get_bookmarks(array(
        'orderby'        => 'name',
        'order'          => 'ASC',
        'limit'          => -1,
        'category'       => null,
        'category_name'  => get_mystique_option('navigation_links'),
        'hide_invisible' => true,
        'show_updated'   => 0,
        'include'        => null,
        'search'         => '.'));
 
        foreach ($links as $link):
         if($link->link_target) $target = ' target="'.wp_specialchars($link->link_target).'"'; else $target = '';
         if($link->link_rel) $rel = ' rel="'.wp_specialchars($link->link_rel).'"'; else $rel = '';
         if($link->link_description) $title = ' title="'.wp_specialchars($link->link_description).'"'; else $title = '';
         echo '<li><a class="fadeThis" href="'.$link->link_url.'"'.$target.$rel.$title.'><span class="title">'.$link->link_name.'</span><span class="pointer"></span></a><li>';
        endforeach;
 
       else:
        mystique_list_pages(array('exclude' => get_mystique_option('exclude_pages'), 'sort_column' => 'menu_order'));
       endif;
 
       do_action('mystique_navigation'); ?>
   </ul>
   </div>
   </div>
  <?php endif;
}

可以看出,作者整体设计的时候,就没有想要让用户做复选,在条件判断中使用了连续的if … elseif… 实现。

我采用了一个偷懒的方法仅把

1
if($navtype=='categories'):

注释掉,然后把接下来的

1
 elseif($navtype=='links'):

改成

1
 if($navtype=='links'):

就可以啦。

自动备份数据库并发送到电子邮箱的脚本

本文是专题:建站日记中的第10篇,共10篇

将网站数据库备份后留在本地硬盘上,并不是一个可靠的方案。我就把压缩后的文件发送到电子邮件信箱里。Gmail的附件目前最大25兆,QQ邮箱是50兆,所以本方法不适合大型商业网站,个人独立博客比较合适的说。

下面贴出脚本,本方法需要先安装mutt邮件客户端。
请注意,有些老点的文章中给出的示例,在邮件地址前面没有 — 符号,这会造成新版本的mutt提示 No recipients specified. 只要加上 — 符号就可以了。
还有一个注意的地方,如果连续发送很多数据库文件并保存在Sent文件中,很快就会消耗大量的本地硬盘空间。让mutt默认不保存已发送邮件的方法是修改 /etc/Muttrc文件,或者在当前用户home目录下,修改或建立一个隐藏文件 .muttrc (注意这两个M的大小写), 修改或增加这样一行 set record=”/dev/null” (一般默认为 set record=”~/Sent”),就可以让Mutt不保存已发送邮件从而节省空间了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh
sendfiletogmail ()
{
        FilePath=$1
        FileName=$2".bz2"
        mutt -s "Database Backup File ${FileName}" -a${FilePath}"/"${FileName} -- yourMailBox@gmail.com < "/path/to/emailbody.txt"
}
 
 
backup ()
{
        DBName=$@
        BackupPath="/path/to/"${DBName}
        BackupName=${DBName}-`date "+[%z%Z]%Y-%m-%d-%H-%M-%S"`".sql"
                if [[ -d "${BackupPath}" ]] || mkdir ${BackupPath};
                then
                                if        mysqldump -uroot -pYourPasswd \
                                                --default-character-set=utf8 --opt --master-data=1 \
                                                --single-transaction --flush-logs \
                                                ${DBName} > ${BackupPath}"/"${BackupName};
                                then
                                                echo ${BackupName}"Backup success!"
                                                bzip2 -q -s  ${BackupPath}"/"${BackupName};
                                                sendfiletogmail ${BackupPath} ${BackupName}
                                else
                                                echo ${BackupName}"Backup Failed@@@@@@@@@@@@@@@@@@@@@@@@"
                                fi
                fi
                find ${BackupPath}"/" -ctime +7 -exec rm {} \;
}
#Call the function to backup database assigned below
backup  yourDBnamd_db

name.com的whois隐私注册要收费了!?

今天打开name.com的控制面板,发现所有的Whois Privacy都从域名后面的位置另起一行,并且用红色反现.顿时预感不对.搞什么花样?很快就反应过来,肯定是要收费了.

此前免费的Whois Privacy服务一直都是name.com的特色.喜欢上name.com也是因为这个.但是估计是眼红Godaddy靠这个赚钱吧,name.com耐不住寂寞了.现在也开始收费.而且标价很贵,7.99USD/yr,现在有优惠价格为$1.99/yr.

幸好我的域名都续费了好多年,暂时不用管.但是,是不是需要在找个便宜的注册商把域名都转过去呢? 郁闷….

PS: 经过浏览name.com的官方博客,发现他们现在提供一个优惠码“FREEWHOIS”,可以减掉订单中第一年的1.99$费用,到0.00$(不就是免费一年嘛).

转载一下他们的条款原文

  • All domains that currently have Private Whois already turned on will continue to receive it for free.
  • The new pricing will begin today and will only apply to domains that don’t already have Private Whois enabled and/or new domain registrations.
  • We are running a promotional price of just $1.99/domain per year, which is one of the lowest prices available.
  • We’ve created a promo code called “FREEWHOIS” that will discount the current special pricing of $1.99 to $0.00, making this service free for the first year for orders using this promo code.

Hello, IPv6!

本文是专题:建站日记中的第9篇,共10篇

I just moved my sites to a brand new server with IPv6 enabled. You can ping6 zhuwenhao.com or host zhuwenhao.com to test.
My IPv6 address is [2607:f2f8:3340::1eee]
Welcome to my blog via IPv6 network!

如何选择合适的DNS解析服务器?

最合适的DNS服务器就是最快的DNS服务器。当然安全性也需要考虑一下。本文的写作完全依赖于http://www.manu-j.com/blog/opendns-alternative-google-dns-rocks/403/ 给出的材料。

首先贴出大牛的脚本 by Stevan Bajić

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
isp=$(dig +noall +stats 2>&1 | awk '$2~/^SERVER:$/{split($3,dnsip,"#");print dnsip[1]}');
m="-------------------------------------------------------------------------------";
s="                                                                               ";
h="+${m:0:25}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+";
header=("Domain${s:0:23}" "Your ISP${s:0:10}" "Google${s:0:10}" "4.2.2.2${s:0:10}" "OpenDNS${s:0:10}" "DNS Adv.${s:0:10}");
echo "${h}";
echo "| ${header[0]:0:23} | ${header[1]:0:10} | ${header[2]:0:10} | ${header[3]:0:10} | ${header[4]:0:10} | ${header[5]:0:10} |";
echo "${h}";
for i in "lifehacker.com" "facebook.com" "manu-j.com"  "reddit.com" "tb4.fr" "bbc.co.uk";
do
  ii="${i}${s:23}";
  echo -ne "| ${ii:0:23} |";
  for j in "${isp}"  "8.8.8.8"  "4.2.2.2" "208.67.222.222" "156.154.70.1";
  do
    r="${s:10}$(dig +noall +stats +time=9 @${j} ${i} 2>&1 | awk '$2~/^Query$/{print $4" "$5}')";
    echo -ne " ${r:${#r}-10} |";
  done
  echo -ne "\n${h}\n";
done

保存后chmod 700 ,执行, 然后贴出我的测试结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
zhuwenhao:~ # ./dns-speed-test.sh
+-------------------------+------------+------------+------------+------------+------------+
| Domain                  | Your ISP   | Google     | 4.2.2.2    | OpenDNS    | DNS Adv.   |
+-------------------------+------------+------------+------------+------------+------------+
| lifehacker.com          |   139 msec |    27 msec |     2 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| facebook.com            |   140 msec |    27 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| manu-j.com              |   240 msec |    27 msec |     1 msec |     0 msec |    10 msec |
+-------------------------+------------+------------+------------+------------+------------+
| reddit.com              |   137 msec |    28 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| tb4.fr                  |   177 msec |    27 msec |     2 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| bbc.co.uk               |   145 msec |    27 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+

比较之下,看来最合适我的DNS就是OpenDNS了。修改配置脚本

/etc/resolv.conf 即可搞定.

1
2
nameserver 208.67.222.222
nameserver 208.67.220.220