- UTF-8 Mail Header Fix
用 PHP 的 mail() 函数发送 UTF-8 编码的邮件,不同的邮件客户端下面显示有时候会变成乱码。解决的方法是调用 mail() 函数的时候设置邮件头信息 :
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64
但对于邮件主题或者发件人部分的中文字符,还需要进行如下转换 :
$subject = "=?UTF-8?B?".base64_encode($subject)."?="; - 解决WP邮件通知在gmail中的标题乱码
标签 ( Tags ) : 字符编码
在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。
奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。
要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。
或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。
当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。
换句话说,如果你希望在数据库里面创建表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。否则的话你会发现同样的sqldump脚本在不同的操作系统下最终导入的结果不一样(在Windows下所有的大写字符都变成小写了)。
标签 ( Tags ) : mysql
- 板儿砖横飞--超强超拽的女秘书
一个是EMC大中华区总裁,一个是他的高级女秘书;一个觉得半夜三更被锁在自己的办公室外面及其不爽,一个觉得老板不应该拿自己撒气之余还要抄送给其他人看。于是小事化大,一传十十传百,“史上最强女秘书”横空出世。这位女秘书固然难免职位不保,堂堂的陆总裁这次可也算是颜面扫地了。 - 为什么丛飞资助了一群白眼狼?
- FIFA特别版笔记本电脑
- 农历与西历对照、万年历
- 让PHP支持页面回退的两种方法
header('Cache-control: private, must-revalidate');
或者
//注意要写在session_start方法之前
session_cache_limiter('private, must-revalidate'); - XMLHttpRequest AjaxRequest Library
标签 ( Tags ) : ajax
- IceBin's Blog-[电影]推荐:功夫壁虎
- 通过URL Rewrite实现链接静态化
- MySQL 備份 shell script
- Google Text Referrals
Google now offers you their AdSense referrals as plain text links* instead of just graphic buttons. 目前似乎只有选择推介语言为English(US)的时候才会出现文字链接选项。
- 让文字自动适应Table宽度
关键样式:
table-layout:fixed 固定布局的算法,则表格被呈递的默认宽度为 100% (For IE,Mozilla)
text-overflow:ellipsis 当对象内文本溢出时显示省略标记(...) (For IE)
overflow:hidden 不显示超过对象尺寸的内容 (For IE,Mozilla)
white-space: nowrap 强制在同一行内显示所有文本,直到文本结束或者遭遇 br 对象 (For IE,Mozilla)
对Table设置第一个样式,对Table里面的tr或td设置后三个属性。这样可以实现表格不会换行,过长文字在IE下自动显示为... - 还是选择使用Leadbbs做论坛
- 用vsftp建立个人ftp站点
- 3 Ways to Read Like a Professional Smart Person
- 分析百度的中文分词结果
标签 ( Tags ) : css
要在新服务器上装版本控制系统了。本来打算和以前一样用 CVS 来进行源代码管理,碰巧看到 duduwolf 对 SVN 大力推荐,加上这篇文章对于各种版本控制系统功能的完整比较,一直为 CVS 的各种缺陷感到郁闷的我自然毫不犹豫投奔了 SVN 的怀抱。
安装过程算不上一帆风顺,但我不打算在这里写出一篇完整的安装手册来,只简单记录几点体会。
服务模式
SVN 可以通过内置的 svnserve 提供服务,也可以和 Apache 配合通过标准的 http/https 来提供服务。用 svnserve 的好处是配置相对简单,但不足是 svnserve 所能提供的权限管理最小粒度只能到版本库(和 CVS 一样)。这对于开源软件的开发使用可能问题不大,但对于用作公司内部源代码控制来说就太简单了。所以我选择用 Apache + SSL + SVN 。
当初使用 CVS 最让我觉得美中不足的就是它的目录权限控制。因为针对每个用户只能控制其访问整个版本库的读写权限,以至于我不得不创建了N个独立的版本库。即便这样,每个版本库下面还是有许多项目是希望能分别控制权限的。当时采用的方法是禁用了CVS的目录浏览功能,并对每个项目目录名增加随机编号。只有知道确切的目录名称才可以访问到该项目。现在既然改用 SVN ,如果还是无法对版本库里面的每一个子目录进行精确的权限控制的话,还不如用 CVS 。通过配置AuthzSVNAccessFile文件来控制每一个项目目录的访问权限虽然算不上特别方便,但总比 CVS 那样完全没办法好。
数据存储
SVN 同样可以使用两种数据存储方式: Berkeley DB 和 FSFS 。在我看来, Berkeley DB 的优势在于其成熟性,但需要更多的日常管理和维护,并且是平台依赖的。所以我选择更简便的 FSFS 。
APR libraries
安装 SVN 的时候最好指定 --with-apr= 和 --with-apr-util= 参数到 Apache 安装的根目录(ServerRoot)下,而不是使用缺省的 SVN 安装包中自带的 apr 。否则如果你安装的 Apache 版本不同有可能导致 APR 库不匹配,出现类似 Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的错误。Updated 2006-04-20 16:30 -- 比如说如果你安装的是apache 2.2.0版本,就需要在编译安装svn的时候指定--with-apxs和--with-apr参数到你的apache2.2.0安装目录下:
./configure --prefix=${subversionInstallFolder} /
--with-apxs=${apacheInstallFolder}/bin/apxs /
--with-apr=${apacheInstallFolder} /
--with-apr-util=${apacheInstallFolder} /
--with-ssl /
--with-zlib /
--enable-maintainer-mode
make clean && make && make install
签署证书
既然是公司内部的源码控制系统,通过 SSL 来加密保护登录信息还是很有必要的。证书的制作所填写的信息其他都关系不大,只要注意生成根证书和服务器请求签证文件时的两次 Common Name 不能一样(理论上Common Name 应该是用户将会用来访问的完整域名字符串),否则会导致证书生成的时候出现 error 18 at 0 depth lookup:self signed certificate 错误。
Updated 2006-06-29 12:52 -- 似乎还是有不少朋友在安装svn的时候碰到各种各样的问题,所以我把自己用来进行 svn server 恢复的完整脚本提供给大家下载(
svn_recover.rar 13,473 字节),仅供大家参考。需要说明的几点:
- 请不要直接运行 reinstall.sh 脚本。因为这个脚本是针对我自己的 svn 服务器的情况来写的,目的是在重装服务器的时候可以完全实现自动化。所以如果你不去了解脚本的实际工作就放服务器上执行,由此造成的任何后果我可不负责 :)
- 我的 svn server 不需要提供其他的服务,所以我的安装脚本是完全以 svn 服务为中心的,如果你的服务器还需要提供 php / mysql 等服务的话,这个脚本可能并不适合你。
- 为了 recover 的方便,我把 svn 所需要的一些关键文件放在了 resource 目录下面,安装脚本自动从 resource 目录下读取相关的文件拷贝到对应的目标目录下。你如果想用这个脚本,需要在 resource 目录下提供你自己服务器环境下的真实文件。本压缩包中的资源文件仅作示例。
标签 ( Tags ) : svn
这么个绝对算不得琅琅上口的名字,居然成了 Google 中文名的最终定稿,套用佟掌柜的经典台词来说那就是:这造地是什么孽啊……
听说这个名字让人联想起“李谷一的歌”来;李谷一的嗓子固然没话说,可这跟互联网巨头的联系可就远了去了。与其叫“谷歌”,倒不如干脆叫“高歌”,至少念起来顺口一点。
但愿这名字只用在 google.cn 上,眼不见为净。不然只好去用 Herock 的偷梁换柱之招了。
标签 ( Tags ) : google
- Digg PHP's Scalability and Performance
从硬件、数据库、语言解释三个方面来分析PHP支撑高负载应用的能力。通过合理利用 Apache 2 的 worker threads , FastCGI 以及 APC , MCache 等 PHP 加速扩展, 即便完全使用 OO 的原则来设计编写 PHP 代码(一般来说对于 PHP 这样的解释性语言引入面向对象的代码之后将大大降低其执行效率),也能够获得很高的性能。 - 重要图书: MySQL Stored Procedure Programming
- How do I change timezone for PHP?
- MySQL服务维护笔记
MySQL日常维护管理的一些要点。 - 10 Stupid Mistakes Made by the Newly Self-Employed
- 史上最强的幽默插图欣赏
- 有害食物的“解药”
标签 ( Tags ) : 系统优化
- Code Igniter
an Open Source Web Application Framework that makes writing kick-ass PHP programs simple as apple pie。 这是 CodeIgniter 对自己的一个描述。看看别人是如何评价的:CodeIgniter: the PHP answer?
确实, Rails 的横空出世带给 PHP 巨大的震动。大家突然发现一个好的框架可以成就一个语言;而再美妙的语言如果缺乏一套强大易用的框架来支撑,多少会显得中气不足。于是,各式各样的 framework 应运而生, Zend 也急吼吼的占了个坑先。然而就目前来看,真正愿意去使用“别人”设计的 PHP framework 的开发者并不算多。更多时候我们宁愿按照自己实际应用的特点来实现一套自己的 framework -- 这样做至少不用去阅读一大堆的文档来熟悉理解别人的设计思路。
最近不断有朋友问我关于 framework 的问题,或者让我推荐一款框架。但实际上,虽然我自己也很希望能挑出一个比较满意的框架来支撑日常 web 应用的开发,可挑来挑去挑花了眼,文档也看了,别人的评测文章也读了,代码也 Down 下来研究了,到头来现在用的还是自己写的一套东西:虽然简陋,可是够用、好用。 PHP framework 的现状就好比战国争雄,风云变幻,快到你不敢轻易去接受。虽然我看好 CakePHP ;也觉得 Zend 亮的第一招虽不算惊艳但后劲十足;可也仅限于观望而已。
这次这个 Code Igniter ,同样雄心勃勃。在今年的两月份发布了第一个 beta 1.0 版本,到四月初已经是最新的 version 1.3 。同样 Down 了它的 1.3 版本粗略浏览了一番,有几个初步印象:- 其兼容于 PHP 4.x 的代码目前来说是好事,但对于以后的扩展就不见得有利。
- 文档化工作相当细致,条理也很清晰,这对于快速理顺思路,上手使用非常重要。
- 可以方便的在 framework 中创建多个 web application。
- 用一套 Help 函数集来封装了许多常用的重复性功能,比如文件操作/安全性控制/XML解析等。实际上即便不想使用一整套框架,单独把这套 Help 函数集拎出来也不错。
- ActiveRecord/Scaffolding/Logging/Caching/Template/URI Routing等常规功能的支持。不过似乎没发现关于 Ajax 方面的内容。
- AWF-CMS.org
Open Source Content Management System - 全面迎接SVN时代来临
- Subversion安装手记
眼下正在考虑到底是用 CVS 还是 SVN 来做 source control server 。既然 SVN 与 CVS 相比有那么多的优点,没道理还抱着老祖宗不放了。
标签 ( Tags ) : framework,codeigniter,svn
- CSS Caching Hack
为了防止页面被浏览器给Cache住而导致用户看不到更新了的内容,我们通常会在URL后面添加一个随机变化的参数,比如 http://.../myarticle/10022.xml?e234kk23s8234 。不过我们往往会忽视 CSS 样式文件被Cache的后果。事实上现在的页面内容和表现日渐分离,整体观感完全依赖于 CSS 文件,一旦你对服务器上的 CSS 文件做了些关键性的修改(比如增加了样式定义)并且在你的 html 文件里面使用了这些新的样式定义,用户再来浏览你的页面可能会发现页面忽然变得极其丑陋,必须按Ctrl-F5强制刷新所有内容才能看到正常的页面表现。这是因为在你的html页面得到更新的时候,css样式文件并没有被浏览器同步更新。因此,我们应该为引用的css样式文件也添加这样一个可以变化的参数来根据实际情况要求浏览器真正重新抓取一遍,比如:<link rel="stylesheet" xhref="http://www.zeali.net/css/zeal.css?version=1" type="text/css" /> - Google Related Links
类似 Google AdSense ,在你的页面上放置一段代码,Google自动把相关的新闻、链接显示出来。当然理论上来说这些相关内容是真正与你的页面相关,而非别人通过付费购买的 AdWords ,你也并非通过放置这段代码来赚取广告费,纯粹为了提高页面内容的丰富性。这样一个缺少明显驱动力的东西愿意去使用的人大概也就不多,何况据说目前这个服务对中文的支持度还有待提高。。 - How to quit your software job and become a millionaire instead
传说中的飞刀,例无虚发。你无法看清它从何处飞来,却能在身躯倒地间感受它的存在。
长发依旧飘逸,剑气更加逼人。僵持之中先拨头筹,危难之时力挽狂澜,皮波的爆发,米兰之福。
银狐先生现在应该认真考虑一下今夏带往德国的前锋人选问题了。

如果你拥有以下特长之一,同时愿意与我们同甘共苦共同发展,或者凑巧对体育有着狂热的爱好,请联系我(工作地点:上海)。
- 熟悉LAMP环境下的web应用开发 + Ajax + PHP frameworks
- C/C++/Java + 网络编程 + Linux Shell
- C# GUI + MySQL

