问题由来: 我买了美国的虚拟主机,机器性能很好,空间巨大(150G) ,唯一的也是最大的问题,就是访问速度慢。 其实服务器本身至少能保证3M的带宽,我用其他服务器,单线程wget美国主机的文件,都可以稳定地保持在300K/s以上。 但用浏览器访问,由于需要发起多次tcp连接,而每次连接只传很小的几k文件就立即断掉,所以很慢。 最让我抓狂的就是,我上传一个软件包,总大小也就4、5M,但文件数量特别多,至少有几百甚至上千,传这么一个文件夹,没有2小时根本完不了。 我就想,如果虚拟主机有命令行,可以执行压缩或解压命令就好了。 传单个文件,再慢,也能保证每秒50K,像这样几M的文件,几分钟就可以搞定。 但如何解压呢? 答案就是:web版的命令行工具。 最简单的,就是system或exec函数,可以像SSH客户端一样,执行我们想要的命令。 注意,有些虚拟主机限制执行system和exec这两个函数,但我做了测试,证明是有其他方法的,一会儿再说这个方法是什么。 请您看到这个方法后,不要大肆宣传,或利用这个方法做一些危害主机安全的操作。如果这个方法也被禁用了,那以后就再也没有类似的方法了。 有了web的ssh,我们该怎么用呢? 1、首先要有清晰的unix文件的路径知识,知道什么是绝对路径,什么是相对路径,如何引用一个路径,等等。因为web版ssh只能方便地在当前一个目录下操作,稍有不慎,就可能造成无法挽回的后果。 […]
原创
MySQL 字符集
两个不同的字符串,分别插入一个表,保存字符串的字段叫 word,在 word 上建了唯一索引(unique key)。 连续插入这 2 个字符串,第二个居然报错:Duplicate entry ‘%s’ for key %d – Error: […]
PHP 性能优化 二进制转换 pack()
今天搞一个数据存储程序,需要把数据转换成二进制存储。 在转换过程中,发现效率很低,不能满足需要。 经过反复测试和修改,总结了一些经验。 写在我的 Wiki 里了,Wiki 里贴代码比较方便,也顺便在这里推广一下我的Wiki。 <<Leakon’s Wiki>> 性能优化的Wiki地址:http://wiki.leakon.com/PerformancePack
如何做事
很巧的一件事,让我感觉到,在做事的时候,人与人之间的差别怎么那么大。 今早,公司发布了IM。以前一直没有见过真正的版本,公司在保密方面做得还不错。 早上到公司,马上试用了一下。 心想这也是个大新闻了,就想发在博客里,吸引一下大家的眼球。 感觉直接发在博客上,有点不太好,毕竟是内测的软件,多少有点泄密的感觉,虽然早在我之前,就有好多人把消息泄露给各大网站了。 于是想到在雪宝宝论坛发这个,毕竟Discuz的论坛,发图片,还可以防盗链,同时,只有注册的会员才可以看到图片。 就算趁机给雪宝宝带点流量吧。 把软件的使用截图,用户名部分经过模糊处理后,发给了yoyo,她帮我在雪宝宝上发帖(感谢老婆~~) 。 看到帖子后,我立刻把链接发给qq里和msn里的每个好友,只发给在线的了,加在一起20多个人吧。 过了一会儿,大家的反应,真是让我感慨颇深。 超过一半以上的人,给我回复的是:“您所在的用户组无法下载或查看附件”,看不了啊! 我就不明白了,您就不会自己注册一下吗? 这就是我这篇文章要说的问题,做事的方法! 可能我们这代人,尤其是在北京长大的这帮少爷小姐们,过惯了衣来伸手饭来张口的日子,习惯了别人为我们准备好一切,自己只要直接拿到结果就可以了,甚至不愿意为了结果付出那么一丁点的劳动。 […]
IE 盒模型
很多网站在写HTML的时候,没有指定DTD,也就是没有设置DOCTYPE。 上学的时候,老师说,DreamWeaver 生成的页面,头部的DOCTYPE都是垃圾信息,应该直接写成<html>。 学院派真是误人子弟…… W3C标准是要制定DOCTYPE的,最显著的区别,我认为就是IE显示Div等元素时采用的盒模型问题。 也就是说,对margin、border等样式所占的面积,是算在Div内部还是外部? 在设定DOCTYPE之前和之后,显示方式是完全不同的。 可以在 http://leakon.googlecode.com/svn/trunk/leakon/html/ie_box/ 看到源码。 通过设置dtd参数,可以看到在两种DOCTYPE下显示方式的不同。 但在Firefox等现代浏览器下,两种显示方式是一样的。
Symfony 温故而知新
使用Symfony的同学,连接数据库时,如果想指定编码,需要在得到数据库Connection的时候发送一条SET NAMES UTF-8语句,以保证统一。 针对这个问题,我以前写过2篇Blog,地址: Symfony 数据库连接 utf8 Symfony 数据库连接 utf8 (二) 里面是通过修改Creole的源码,symfony/vendor/creole/Creole.php,加入一个setUTF8方法。 这个方式管用,但不是最好。 这两天看了Symfony的 Code […]
Symfony Apache Url Rewrite
今天在服务器上新装了apache,把用Symfony开发的后台程序部署到服务器上,发现生产版本的环境无法使用,居然报404 Not Found。 刚开始没想到是什么原因,反复翻文档,检查虚拟主机的配置,和目录权限,以及.htaccess文件,都正确无误。 在自己的Windows环境是好好的,但在服务器上却不行。 后来就拿.htaccess开刀,因为受到一点Apache手册的启发,就是在.htaccess中添加一些错误代码,以检查.htaccess是否正确运行。 其实本来就应该能想到这样做的,只是觉得问题可能出现在其他地方。 果不其然,就是.htaccess中的<IfModule mod_rewrite.c>,在这个分支里面随便写任何东西,都不会起作用。 看来Apache没有正确安装mod_rewrite.so。 一时也不知道如何验证,后来在网上查了半天才查到。 先列一串命令吧: apache/bin/httpd -l 列出当前环境中安装了哪些module […]
编码检查 UTF-8 浏览器编码
编码问题一直是做网站开发的工程师们很头疼的事,如果你希望自己的网站能够被更多不同语言环境的人浏览和使用,那就一定要解决好编码的问题。 我的经验是,从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 […]
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 […]
Web在线任务管理
今天终于找到一个好用的在线任务管理网站: http://www.rememberthemilk.com/ 中文名怎么翻译呢?别忘了喝奶? 挺有意思的,小奶牛的图标很可爱,一下就吸引了我,让我决心好好研究一番。 是我自己要寻找这样的网站,最近好忙,每天都有好多工作要做,还有好多事想做。事情总是这样,有时候突然想做点什么,但工作很忙,没有时间;等周末休息的时候,有时间了,却突然不知道该做点什么。 工作的时候,会有很多很多任务,如何安排这些事,每件事应该在什么时候完成,都应该有预先的安排。新的工作环境,对我有很大影响。这里做事都必须有安排。 每周的开始,都要列出本周要完成的任务,以及每个任务的时间点。而且要明确任务结果,必须设置预期结果。 比如,今天是周一,制定本周计划: 某项目的升级详细设计,周三完成文档,周五完成评审; 某项目的升级模块,周二完成开发,周三完成测试,周四完成上线; 注意“完成”两个字,每件事,都要早明确的时间点,取得明确的结果。 这里不能使用应该、差不多、也许、大概和基本等等模糊的词汇。 现在我的工作状态越来越好,我觉得这背后的原因,就是做事有安排,合理分配,按时完成。 不过,我还缺少一个工具,来帮我规划个人任务。 以前我是写便签纸,就是黄色的小方块,上面有一条不干胶,记录我今天要做什么。 […]