blog里经常需要贴一些代码,平时用SyntaxHighlighter直接贴在文章里是一个不错的选择,但遇到写一套题的解题报告这样的情况时,贴过多的代码显得很违和,容易喧宾夺主,可以改用附件(attachment)的形式贴在解题报告中。可惜wordpress by default不支持cpp文件,如果尝试在Media – Add New中上传cpp文件,会得到”Error saving media attachment”的错误。一个变通的办法是把扩张名改为txt上传。事实上wp虽然不支持cpp文件,但却支持cc文件,这里有一个完整的支持列表。

改扩展名上传文件不是一个干净的做法,对上传,下载着都不方便。要添加额外的文件类型,比如cpp和php,可以用下面的api来增加允许上传的mime:

function add_upload_mime($mimes = '') {
	$mimes['cpp'] = 'text/x-c++src';
	$mimes['php'] = 'application/x-httpd-php';
	return $mimes;
}
add_filter('upload_mimes', 'add_upload_mime');

不过还是用现有的plugin比较方便,PJW Mime Config就是一个这样的plugin。

这样虽然解决了上传php文件的问题,但是下载却出现了问题。对于txt文件,通常将直接再浏览器打开;对于cpp文件,通常会弹出一个下载对话框;但对于php或其他cgi文件,服务器将会执行它,返回的是执行结果,而不是源文件,或者出现HTTP 500。所以需要更改服务器设置,将这些后缀的文件当成普通文件处理,对于lighttpd,可以在lighttpd.conf中对上传文件夹upload这样设置:

$HTTP["url"] =~ "^/blog/wp-content/uploads/" {
	cgi.assign = ()
	fastcgi.server = ()
	static-file.exclude-extensions = ()
}

附件上传的问题就这样解决了,下一步就是要扩展attachment.php的功能,使得源代码能供直接再attachment页面内通过语法高亮显示出来。

One Response to “Add new upload MIME types in wordpress”
  1. quark says:

    ym 学长,mimetype确实有用。前几天才遇到google code上面放的html被当作纯文本的问题,解决方法类似……

  2.  
Leave a Reply