编码问题一直是做网站开发的工程师们很头疼的事,如果你希望自己的网站能够被更多不同语言环境的人浏览和使用,那就一定要解决好编码的问题。 我的经验是,从HTML页面的编码,到PHP程序文件的编码,到数据库的设计以及与PHP之间连接的编码,全部使用UTF-8,这样就能保证你的页面不会出现乱码。 不要总是觉得,你的网站是给中国人用的,不给其他国家的人使用。如果你的中国用户希望保存一些日文、韩文等亚洲文字, 你也没有理由拒绝吧? 还是在一开始就解决好编码的问题为好,做网站,免不了这一步,今天不做,以后迟早要还的。 如果你认为我说的毫无道理,那我给大家引用一篇W3C组织的官方说明吧: http://www.w3.org/International/questions/qa-forms-utf-8.en.php 注意回答部分的第一句:The best way to deal with encoding issues […]
leakon
PHP 文件锁 flock 负载均衡
最近有个项目,采用单台前端服务器提供Web服务,程序需要实时访问后端服务器。后端一共有几十台服务器,但有压力限制,单台负载不能过高,必须做负载均衡。 最简单的方式是用随机数,前端来请求的时候,随机挑选一台后端服务器,但这并不能保证压力平均分布,很有可能在某一段时间内请求都落到同一台服务器上,很容易导致这台服务器停止服务。 后来想到用文件锁的方式,来标记访问计数,顺序访问后端的每一台服务器,让每一台服务器一个周期只被访问一次。 在进行了多次功能测试和压力测试后,验证了这种想法的可行性,然后写了一个IDService类,封装了整个过程。 我在Google提供的SVN服务器上保存了源码,大家可以在 http://leakon.googlecode.com/svn/trunk/leakon/php/flock/flock.php 这个地址看到源码,或者用SVN工具CheckOut到本地。 核心过程,就是初始化的时候给一个ID范围,默认是从0开始,如果你的server_count是32,那么调用getId()方法的时候,我会顺序给你31至0这32个ID,采用文件锁就是考虑到并发请求之间彼此独立,一个进程读数据文件的时候要加独占锁,解锁前,其他进程无法读取数据文件。 ID分配给你了,每个ID对应哪个服务器,就是你自己做映射的事了,保证了这个模块的无关性和独立性,和其他所有模块保持无耦合。 这是在PHP5的环境下写的,const 定义了3个类常量: LINE_FEED 是换行符,Windows 下是 \r\n,Linux […]
终于解决favicon.ico无法显示的问题
很久以前就做好了favicon.ico,在浏览器的地址栏前面也显示正常.但是收藏在Firefox的书签工具栏里的时候,这个图标无法显示,所以显示的是空白页: . 我以为是Firefox2.0的问题,因为我用Firefox3.0beta的时候图标显示的非常好,只要在书签工具栏里收藏了这个网站,马上就会显示图标.所以我认为是Firefox2.0的bug. 今天sofish做了一个博客圈的RSS聚合.我再次发现favicon的问题,我的图标没有显示.我开始想,也许不是Firefox的问题.因为Firefox2.0显示别人网站的favicon都没问题,但是我的独独出错.可能是我的某些地方没有写标准. 我先把注意力放在了代码的书写上. <link rel=”Shortcut Icon” href=”地址” type=”image/x-icon” /> <link rel=”shortcut” href=”/favicon.ico” /> […]
安装php5出现 mysql configure failed
安装PHP5时出现了错误。 configure: error: mysql configure failed. Please check config.log for more information. ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs […]
Web在线任务管理
今天终于找到一个好用的在线任务管理网站: http://www.rememberthemilk.com/ 中文名怎么翻译呢?别忘了喝奶? 挺有意思的,小奶牛的图标很可爱,一下就吸引了我,让我决心好好研究一番。 是我自己要寻找这样的网站,最近好忙,每天都有好多工作要做,还有好多事想做。事情总是这样,有时候突然想做点什么,但工作很忙,没有时间;等周末休息的时候,有时间了,却突然不知道该做点什么。 工作的时候,会有很多很多任务,如何安排这些事,每件事应该在什么时候完成,都应该有预先的安排。新的工作环境,对我有很大影响。这里做事都必须有安排。 每周的开始,都要列出本周要完成的任务,以及每个任务的时间点。而且要明确任务结果,必须设置预期结果。 比如,今天是周一,制定本周计划: 某项目的升级详细设计,周三完成文档,周五完成评审; 某项目的升级模块,周二完成开发,周三完成测试,周四完成上线; 注意“完成”两个字,每件事,都要早明确的时间点,取得明确的结果。 这里不能使用应该、差不多、也许、大概和基本等等模糊的词汇。 现在我的工作状态越来越好,我觉得这背后的原因,就是做事有安排,合理分配,按时完成。 不过,我还缺少一个工具,来帮我规划个人任务。 以前我是写便签纸,就是黄色的小方块,上面有一条不干胶,记录我今天要做什么。 […]
澄清Java 接口与继承
计算机学院研二的兄弟与我讨论Java,一见面,几个问题全是关于接口,接口有什么用?为什么要用接口?什么时候该使用接口?很庆幸他们不是问我Java如何连接SQL Server,或者是如何开发J2EE应用,这类问题有杀伤力,避之则吉。今年计算机学院本科有个毕业设计课题是做J2ME,选这个题目的学生在5月末都还在苦着脸研究java.util.*这个包,这个这个……唉。 大多数人认为,接口的意义在于顶替多重继承。众所周知Java没有c 那样多重继承的机制,但是却能够实作多个接口。其实这样做是很牵强的,接口和继承是完全不同的东西,接口没有能力代替多重继承,也没有这个义务。接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c 、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似调侃,实乃至理)。 设计模式中最基础的是工厂模式(Factory),在我最近的一个很简单的应用中,我想尽量的让我的程序能够在多个数据库间移植,当然,这涉及很多问题,单是如何兼容不同DBMS的SQL就让人头痛。我们不妨先把问题简单化,只考虑如何连接不同的数据库。 假设我有很多个类,分别是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他们分别连接不同的数据库,统一返回一个Connection对象,并且都有一个close方法,用于关闭连接。只需要针对你的DBMS,选择不同的类,就可以用了,但是我的用户他会使用什么数据库?我不知道,我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口: package org.bromon.test; public interface DB { […]
Symfony 如何在项目中使用多个数据库
all: database1: class: sfPropelDatabase param: dsn: pgsql://foo:bar@hostname/database1 database2: class: sfPropelDatabase param: dsn: mysql://foo:bar@hostname/database2 先建立一个 PROJECT_DIR/config/database1.schema.xml […]
百度指数 今日上线
欢迎使用百度指数 百度指数是以百度网页搜索和百度新闻搜索为基础的免费海量数据分析服务。它以曲线图、相关新闻、专业评论的方式为您透彻分析,把握您所关心的“关键词”趋势,让您在第一时间获得互联网上最有价值的信息和资讯! http://index.baidu.com/ 一切仅仅是开始……
PHP require 绝对路径 autoload
在写PHP程序时,如果文件比较多,目录也比较多,有很多require_once的情况。 如果程序的入口不唯一,并且分布在不同的目录,必须require绝对路径,如果是相对路径,PHP会把入口文件的路径作为基本路径,require里的相对路径都是相对于入口文件的。 这样带来最大的问题就是自己部署的程序,给别人提供接口时,别人根本无法使用! 所以要用绝对路径。 做法就是选一个require的入口文件,大家都要包含这个文件,这个文件的开头加上这么一句:
数据库导入 乱码 数据被截断 数据不全
今天碰到一个Case,是数据库导入的,很顺利地解决了,跟大家分享一下过程。 环境: 数据源服务器 mysql>show variables like ‘char%’; character_set_client gbk character_set_connection gbk character_set_database gbk character_set_results gbk […]