大猫の意淫网志

Archive for codex

如何在wordpress the_category() 函数生成的分类列表里移除指定分类名链接

Thursday, November 19th, 2009

hack the_category()身为 WordPress 中文团队不活跃团员之一,俺觉得是时候做点啥了

比如出个 hack 介绍如何从
the_category() 函数生成的分类列表里移除指定的几个分类名的链接

做过模板的小盆友都知道,一篇文章可对应多个分类,在循环

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

里,可以用

< ?php the_category( $separator, $parents ); ?>

the_category('*') 输出当前文章的分类,并用菊花符 * 来分隔,比如

分类: < ?php the_category('*'); ?>

会输出

分类:wordpress*hack*category

在内部 Blog 搞皮肤的时候接到一条规则,要求有个分类叫重点的,然后又不要显示出来,仅仅用来作为 query_posts() (非常牛逼的函数,内容太多,有机会另起文章介绍强大的筛选功能) 获取文章的一个筛选条件

辣么,就需要 hack 一下 the_category() 了

很幸运 WordPress 提供了一个 ooxx 函数叫

< ?php add_filter( $tag, $function_to_add, $priority, $accepted_args ); ?>

根据 Smashing Theme 的一篇文章,把如下代码丢到 functions.php 最底部的 ?> 内即可实现

function the_category_filter($thelist,$separator=' ') {
	if(!defined('WP_ADMIN')) {
		//要移除的分类ID,这里是1和5
		$exclude = array(1,5);
		$exclude2 = array();
		foreach($exclude as $c) {
			$exclude2[] = get_cat_name($c);
		}
		$cats = explode($separator,$thelist);
		$newlist = array();
		foreach($cats as $cat) {
			$catname = trim(strip_tags($cat));
			if(!in_array($catname,$exclude2))
				$newlist[] = $cat;
		}
		return implode($separator,$newlist);
	} else {
		return $thelist;
	}
}
add_filter('the_category','the_category_filter', 10, 2);

解题思路就是先获取当前文章对应的分类 ID 数组,explode() 打散,和自定义的那个ID进行对比,如果有就移除,返回过滤后再 implode() 合并后的列表给 the_category() 输出到模板对应的前台页面

SSH 入门教程(常用命令)

Sunday, October 25th, 2009

ssh

适用范围: 有SSH权限的空间,比如 miao.in
难度: easy
学习时间: 5分钟
工具: 推荐 SecureCRT

1. 基础命令

A.显示文件源代码
cat ooxx.php
没错, cat 是一个常用查看源代码的命令,优点是很方便很可爱,缺点是会直接刷刷刷显示所有源代码,文件太长只能看到屁股后面的那坨代码

B. 查看当前目录
pwd
pwd不是password,而是查看当前目录,会输出完整的路径

C. 更改目录 Change Directory (cd)
cd /path/to/directory/
有DOS基础的同学应该会淫荡的一笑吧,路径可以用相对也可以用绝对

D. 列出文件/子目录 Listing Files/SubFolders(ls)
ls
默认只显示文件名,你也可以带个参数玩,比如
ls -alh
带 -alh 输出会很爽... 自己试试, 大猫喜欢把 ls -alh 颜射为 ll
-a显示全部文件
-l比较详细的列表
-h人类能看懂的比如把1024显示为1K

E.帮助
命令 --help
任何命令后面带一个 --help 都会显示一个简洁版的帮助,记不住参数就查一下

F.获取远程文件 wget
wget http://ooxx.me/me.jpg
就会获取远程的me.jpg文件到当前目录,一般搬家的时候用这个
让服务器去获取另一个服务器的数据,速度会快的完全不像男人

G.压缩解压缩
unzip wordpress.zip
如果文件是zip形式的,比如刚从wordpress主站wget了一个压缩包过来,只需要输入unzip 文件名,就可以解压缩到当前目录了
tar -czvf ooxx.tar.gz * .[!.]*
把当前目录所有文件以tar命令打包为ooxx.tar.gz文件
-c创建
-z用gzip压缩方式
-v显示压缩过程
-f搞成一坨file
tar -xzvf ooxx.tar.gz
解压缩 ooxx.tar.gz 里的文件到当前目录
-x解压缩
-z用gzip压缩方式
-v显示压缩过程
-f搞成一坨file

2. 文件系统命令

A.显示磁盘使用率
df
显示整个主机的总容量以及比率

B.列表文件/子目录使用率 (du)
du
会列出所有文件以及子目录的大小,不是人看的...
du -sh
-s就是summary,只输出当前文件夹总容量
-h一般在linux就是human给人看的意思,会把1048580b转换为1mb显示
du -h --max-depth=1
嘿,只列出当前文件夹和第一级子目录占用大小

C.删除文件 Remove files (rm) 少儿不宜的命令,总是需要确认
rm -vf miao.in
强制删除miao.in这个文件并不需确认,列出删除文件列表

强制删除,不要执行,除非你知道你在干嘛...
-v一般v参数都是显示过程的意思
-f 强奸的单词会不会拼? F-U-C-K的缩写,不确认直接F-word了
rm -rf ooxx
删除ooxx这个文件夹,包含它的子文件和子文件夹

删除文件用上面的命令,但删除文件夹的时候就需要跑下遍历了
-r 比较本土化,是"日"的缩写,在所有命令里都是 recursive 的意思,有些命令是大写的 R 需要注意

D. 拷贝文件 (cp)
cp ooxx.me miao.in
复制ooxx.me这个文件并重命名为miao.in

E. 移动文件/重命名 (mv)
mv ooxx.me miao.in
重命名ooxx.me为miao.in
如果加路径,就是移动到某个路径并重命名为miao.in
和DOS不一样,移动文件和重命名换个思路,其实是一个套路,不是么?

F. 创建空文件 (touch)
touch miao.in
这个很色情的命令,就是创建一个 miao.in 的空文件
如果touch了已有的文件,则会更新那个文件的日期为当前
如果touch次数多了,会high

3. 文件权限

A. 更改文件权限 (chmod)
chmod 777 miao.in
默认文件为644,文件夹为755

TIP:
1st digit=Owner; 2nd=Group; 3rd=Other
(-rwxrwxwrx = 777, -rwxr-xr-x = 755, -rw-r--r-- = 644, etc.)
7 = Read + Write + Execute
6 = Read + Write
5 = Read + Execute
4 = Read
3 = Write + Execute
2 = Write
1 = Execute
0 = All access denied

4. 高级命令

A. 查找. 常用命令,让我们来找一下10MB以上的文件吧
find . -type f -size +10000k -exec ls -lh {} \; | awk '{ print $5 ": " $9 }' |sort -n

B. Grep, 手里握着大西瓜
ls -alh | grep ooxx
只显示含有ooxx的那几列,当然你在cat的时候配合这个用找文件里的某些字段很方便

C. 分页 (Less/More)
less miao.php
如果源代码很长,则会分页显示,上下箭头滚动,输入q退出
tail -n 1000 /var/log/httpd/error_log | more
可以用 | more 参数来滚动显示页面或行

5. MYSQL 数据库

导出数据库
mysqldump -u 数据库用户名 -p 数据库名 > db_ooxx.sql
导出数据库为db_ooxx.sql

导入数据库
mysql -u 数据库用户名 -p 数据库名 < db_ooxx.sql --default-character-set=utf8
把当前目录的 db_ooxx.sql 以 utf8 编码导入,当然你原来是gbk就改成gbk
中文blog经常遇到这个情况,一不小心就 ??? 满脑子都问号了

6. VI

留意在vi里敲的每一个键... ...
VI 基础入门

Linux 是很敏感的系统,特别是大小写,
唉,周末又木有了

为何WordPress需要连接信息

Sunday, October 25th, 2009

连接信息

执行请求操作,连接信息必需提供

这个界面只会出现在系统把apache进程不是以用户身份来运行的主机上
目的只有一个,安全
问题有好几个,这样子用apache创建的文件就不属于用户,那么没有写权限的话,用户就没法删除,只能用apache来删除

遇到这个问题的同学可以看一下这篇
如何删除ftp或ssh无法删除的文件

The following code is from the get_filesystem_method() method in the wp-admin/includes/file.php file:
if( function_exists('getmyuid') && function_exists('fileowner') ){
$temp_file = wp_tempnam();
if ( getmyuid() == fileowner($temp_file) )
$method = 'direct';
unlink($temp_file);
}

wordpress会创建一个临时文件看看owner是不是和当前运行的php比如plugin-install.php一样
如果不一样,那么会出现如图的使用ftp来搞定

怕麻烦的话修改下wp-config.php,加入
// ** FTP SETTINGS FOR AUTO-UPDATE ** //
define('FTP_HOST', 'localhost');
define('FTP_USER', 'ftp帐号');
define('FTP_PASS', 'ftp密码');

之后就不会提示了

PS: 最近后台自动升级连接不到服务器或复制文件出错是因为我那个脚本限制连接数自动屏蔽IP造成的,已经调整过,如果还有问题请联系我,谢谢

热包子

Friday, October 16th, 2009

热包子

热包子指的是整站的源码打的压缩包

miao.in的(mt)合租空间附带了强大的日志分析工具awstats
(合租的同学可进入站点setup开启)
在查看Required but not found URLs (HTTP code 404)
也就是发起请求,但没有对应文件的日志时发现

/mirserver.rar
/eWebEditor/admin_login.asp
/wolserver.rar
/Cmirserver.rar
/jinhuQQ.txt
/usergroup_0.php
/qq.txt
/wwwroot.rar
/www.zip
/web.rar
/wwwroot.zip
/.svn/
/data/fvtmdvbbs7.mdb
等等

热包子随处可见,比如

http://www.liaoyao.gov.cn/web.rar

gov,哈

这件事情告诉我们,

  1. 一定要看日志
  2. 肯定会被人扫描
  3. 打包是很便捷的方式,但绝对不要把热包子放在能通过url访问的目录!!!
    (特别类似于wp-config.php里面的密码都是明文的)
  4. 明文的密码,比如连接数据库用的配置文件里,这种密码一定要和其他的不一样
    (最好是所有密码都不一样,我自己都做不到哈哈
    不过我个人是把密码分等级,常用的不重要的就用简单的方便输入的密码,越重要越复杂,而且要定期更换)
  5. 一些信息不要存成txt比如qq号码密码什么的存一块儿,最好分开,自己创建组合还原规则
  6. 如果用了subversion,那么一定要用.htaccess配置.svn文件夹不可通过url访问
  7. 数据库文件不能用mdb这种默认可下载后缀,一般asp程序会提醒你更改后缀比如也改成asp什么的
  8. 后台登陆地址不能用默认的比如wp-admin
    (上个版本后台登录就爆了个漏洞)
    特别是开源程序,知道源码就知道算法以及运行方式
    (不过开源程序安全性相对也高,如果它发展到成熟期以及你及时打补丁,因为所有人都在维护,比如大家最爱的Linux)
  9. 不要虾米目录都777,花15分钟google一下chmod了解目录权限的基础知识
  10. 不要把密码设置为女友们的生日,密码被破解是一回事,万一被女友发现是另一个女友... ...

Cookie-free Domains Yslow 极限页面性能优化

Sunday, October 4th, 2009

yslow_cookie-free-domain

放假前拉了个小群和 T总+Ivane老师讨论了一早上 Yslow 性能优化
找了资料继续深入, 辣么偶就来分享  Cookie-free Domains

所谓 Cookie-free Domains, 翻译成中文叫"饼干免费域名"
但是翻译英文的时候有一种高深的语法叫倒装, 一般同学难以理解就不用转牛角尖了
说白了就是反过来翻译, 那么正确的翻译就是 免费饼干域名!

聪明的同学一看就明白了
有点呆的同学继续听我讲

免费饼干域名 说白了就是这个域名不会产生cookie

为什么不能让域名产生 cookie 呢?

当浏览器向服务器请求一张静态的图片前,会先发送同域名下的 cookie,服务器对于这些 cookie 不会做任何处理。因此它们只是在毫无意义的消耗带宽。所以你应该确保对于静态内容的请求是无coockie的请求。

域名加WWW的好处是什么?

如果我给 http://ooxx.me 设置了cookie,那么会感染所有子域名, 请求 http://plz.ooxx.me/logo.gif 时便会带上讨厌的cookie
但如果我给 http://www.ooxx.me 设置了cookie, 并不会感染其他子域名或主域名

域名不加WWW的好处

也许女孩子们不喜欢,但没错, 不加 WWW 的唯一好处就是

毫无疑问, 咱的域名都是被污染过的, 无法通过开一个二级域名存放图片CSS JS等静态资源
但咱有钱,可以买个域名专门放图片
Yahoo!使用的是 ymig.com,YouTube使用的是ytimg.com,
Amazon使用的是images-anazon.com, Miao.in使用的是 mediatempl.com(卖掉了)

插播广告: 世界上最大域名贩子 Godaddy.com , 只需要花$0.89 就可以买一个 .info 域名, 做 Cookie-free Domians 不是很二的选择
PS:续费很贵,用完就丢掉...

WordPress用户如何转移所有的静态资源到大猫老师代购的Cookie-free Domains上呢?
(主题的js css img以及文章里的图片转移什么的最讨厌了)

方案一:  我想死啊,文章里好多图,啊啊啊

方案二:  把 Cookie-free Domains 用别名的方式捆绑在主域名的目录上

辣么偶就用Miao.in的后台来掩饰一下如何捆绑别名

step1:

wordpress的域名 http://miao.in
cookie free doman http://mediatempl.com

step2:

登录Plsek后台,选择 miao.in 这个域名, 继续选择 Domain Alias

plesk_alias-domain

里面很简单, 点 Add Domain Alias
填入  mediatempl.com

[确定]
别忘了把 mediatempl.com 这个域名指向主域名miao.in的IP 哟

step3:

wordpress-dashboard

进入Wordpress后台, 中文不知道是啥,不过看图应该知道怎么弄吧?

上图是错误的,俺不懂装懂误人子弟了

下面是改进版的方法:

修改 wp-config.php

找到 define('DB_CHARSET', 'utf8');
在其之前增加一个
define('WP_CONTENT_URL', 'http://mediatempl.com/wp-content');

人肉更改下wp-content就可以了,这样就不会影响PHP,导致一大堆风骚事儿... 面壁ing

根据Yslow 算法, Cookie Free Domain 有 5/10 的比例, 这五块钱买的.info还是很值得的
在 Miao.in 的主机捆绑别名数量无限制, 马上就要开6期,还有五个坑, 晚了就得等下月大姨妈了

除了CDN, 基于 WordPress 的 Miao.in 在Yslow已经评分全A 了,啧啧
基本实现了保证视觉效果的前提下, 页面速度的极限
当然,所有合租的同学不用担心,这里的Yslow提到的性能优化服务器端我会都帮大家设置好

快下课的时候一般都会有同学跳出来说,
大猫你这ooxx.me怎么Yslow才 B ?

同学这你就不懂了, 听过牛B,你听过牛A么?
但 Miao.in 是出来卖的, 要做就做Ai!

--- Update --------------------

花5块钱买了 http://yslow.info 做 oxx.me 的 Cookie-free Domain 哈哈哈哈哈

直接用 IP 做 Cookie-free Domain 了, 真是佩服自己...

--- Bug--------------------

已经换了新方法,参考上面