Llsmp
文章摘自 http://llsmp.org/ LLsMP的意思 LLsMP 是Linux + Litespeed + MySQL + PHP 的简称,意思就是在Linux 系统上配置Litespeed网页伺服器、MySQL数据伺服器与PHP的一键安装包。 只需执行几个简单的命令,LLsMP一键安装包就会帮您自动执行安装以及配置,免除繁复、琐碎的过程。 LLsMP的好处 LLsMP的好处就是采用了Litespeed网页伺服器,处理动态效能上比Nginx优朥,也比Nginx、Apache等网页伺服器省资源,非常适合少内存的伺服器。除此之外,LLsMP完全兼容Apache的mod_rewrite和.htaccess,免除像Nginx般需转换Rewrite规则的烦恼。 LLsMP的扩展 LLsMP除了帮你一键配置Litespeed网页伺服器 + MySQL + PHP外,还提供多项优化伺服器的扩展,包括eAccelerator,的Zend Optimizer和ionCube Loader,以及Google Performace Tools、舒缓Litespeed并发的Nginx前端扩展和vsftpd等等。 LLsMP 0.6 正式版发布 更新说明: 1.修正nginx前端安装脚本 2.加入PHP 5.3安装版本 测试平台:CentOS 5/6 , Debian 5/6 , Ubuntu 10/11 安装命令: 安装PHP5.3版本完成之后要手动启动一下MYSQL /etc/init.d/mysql start CentOS: PHP5.2 wget http://llsmp.googlecode.com/files/llsmp0.6_centos.t
这才是真正的“匈牙利命名法”
从刚进大学开始学习 C 语言,就听说了实际开发中会用到的各种变量命名方法,例如常见的匈牙利命名法、骆驼命名法、Pascal 命名法等。 后来自己真正开始用 C/C++ 写程序,开始使用匈牙利命名法,总觉得十分别扭。好好的变量名 name,严格按照命名规则,非得在前面加类型前缀,改写成 lpszName。 如今的 IDE 都会自动检查变量类型,而且类型错误在编译时也比较容易发现,在变量名前面强制加上类型信息实在不知道有什么意义。 直到无意中在《More Joel on Software》[1] 这本书第 23 章看到匈牙利命名法作者——Charles Simonyi 的本意。 1. 应用型匈牙利命名法——鲜为人知的正统 Simonyi 的匈牙利命名法的原型在微软公司内部最初被叫做“应用型匈牙利命名法”(Apps Hungarian),因为它是在“应用程序部”(Applications Division)中使用的,也就是用在 Word 和 Excel 身上。在 Excel 的源码中,你可以看到大量的 rw 和 col 。 使用这种“应用型匈牙利命名法”,我们可以在看到变量后很快理解其含义,并很容易发现代码中的问题。 例如在代码中看到 xl = cb, xl 表示“相对于页面的横坐标”,horizontal coordinates relatives to the layout;cb 表示“字节个数”,count
11个重要的数据库设计规则
◆ 简 介 在您开始阅读这篇文章之前,我得明确地告诉您,我并不是一个数据库设计领域的大师。以下列出的 11 点是我对自己在平时项目实践和阅读中学习到的经验总结出来的个人见解。我个人认为它们对我的数据库设计提供了很大的帮助。实属一家之言,欢迎拍砖 : ) 我之所以写下这篇这么完整的文章是因为,很多开发者一参与到数据库设计,就会很自然地把 “三范式” 当作银弹一样来使用。他们往往认为遵循这个规范就是数据库设计的唯一标准。由于这种心态,他们往往尽管一路碰壁也会坚持把项目做下去。 如果你对 “三范式” 不清楚,请点击这里(FQ)一步一步的了解什么是“三范式”。 大家都说标准规范是重要的指导方针并且也这么做着,但是把它当作石头上的一块标记来记着(死记硬背)还是会带来麻烦的。以下 11 点是我在数据库设计时最优先考虑的规则。 ◆ 规则 1:弄清楚将要开发的应用程序是什么性质的(OLTP 还是 OPAP)? 当你要开始设计一个数据库的时候,你应该首先要分析出你为之设计的应用程序是什么类型的,它是 “事务处理型”(Transactional) 的还是 “分析型” (Analytical)的?你会发现许多开发人员采用标准化做法去设计数据库,而不考虑目标程序是
三种东西永远不要放到数据库里
我已经在很多演讲里说过,改进你的系统的最好的方法是先避免做“蠢事”。我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含 的牵连,认识不到这样做对系统维护尤其是系统升级带来多大的麻烦。作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好 的结果的。 图片,文件,二进制数据 既然数据库支持BLOB类型的数据,把文件塞进BLOB字段里一定没有错了!?错,不是这样的!别的先不提,在很多数据库语言里,处理大字段都不是很容易。 把文件存放在数据库里有很多问题: 对数据库的读/写的速度永远都赶不上文件系统处理的速度 数据库备份变的巨大,越来越耗时间 对文件的访问需要穿越你的应用层和数据库层 这后两个是真正的杀手。把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。 给自己行个方便吧,在数据库里只简单的存放一个磁盘上你的文件的相对路径,或者使用S3或CDN之类的服务。 短生命期数据 使用情况统计数据,测量数据,GPS定位数据,session数据,任何只是短时间内对你有用,或经常变化的数据。如果你发现自己正在使用定时任务从某个表里删除有效期只有一小
游戏:VIM大冒险
不知道大家是否还记得“Vim简明攻略”呢?你是不是对Vim的那一大堆热键很头痛呢?现在好好,下面这个游戏是一个使用VIM热键玩的游戏。你可以在玩游戏的过程中熟悉Vim的热键。 你可以点击图片,或是图片下的网址打开这个游戏 http://vim-adventures.com/ 我试玩了一下这个游戏,真的很不错,下面是一些我给的游戏攻略。 第一关,场景一,首先是使用vim的h, j, k, l四个键来控制方向。(如果你妄图使用光标键的话,系统会出现黄色警告的)你需要使用h, j, k, l 四个方向走到图的右边,找到一把钥匙。(注意:迷宫墙上有些斜面,你可以通过斜面),找到钥匙后,钥匙会出现在你的右上角的位置,示意着你的光标要向那个 方向移动,当你到达一个门的时候,会自动开门,进入第二关。 第二关,每一关的小人都会给你一些英文提示,教你怎么玩。关于第二关,你会看到你过不去,小会提示你,那些绿草地就向我们文件中的行,你在行上按 上下键,光标会在这一列上移动,如果这一下面的一行没有这么长,光标会到行尾。这个vim的特性会告诉我们如何过这一关——移到最上面的行尾(因为是最长 的可以越过最下面的障碍),然后按下光标键,到最后一行时你就会发现光标已经过了阻碍
用Unix的设计思想来应对多变的需求
之前,@风枫峰 在“这是谁的错?”中说过开发团队对需求来者不拒,而@weidagang 也在“需求变更和IoC” 中说过用IoC来最大程度地解决需求变更。今天我也想从Unix设计思想的角度来说说什么是好的软件设计,什么样的设计可以把需求变更对开发的影响降低。(注意:这并不能解决用户或是PM的无理需求,面对无理需求,需要仔细分析需求,而用技术的手段无法搞定这个事,但是可以减轻需求变更带来的痛苦) 我曾经在《Unix传奇》的下篇中写过一些Unix的设计哲学和思想(这里重点推荐大家看一下《The Art of Unix Programming》,我推荐过多次了),以前也发过一篇“一些软件设计的原则”,不过,这些东西都太多了,记不住。其实,这么多年来,我的经验告诉我,无论是Unix设计,还是面向对象设计,还是别的什么如SOA,ECB,消息,事件,MVC,网络七层模型,数据库设计,等等,他们都在干三件事——解耦,解耦,还是解耦!所谓解耦,就是让程序员的模块和模块间尽量少地依赖起来。 现实当中的例子 让我先举几个现实生活中的例子: 1、现实社会中,制造灯具的工厂完全不关心制造灯饰的工厂,制造灯饰的工厂完全不关心制造灯具的工厂,但是,灯具和灯饰可以很完美地组合成用记
史上最全的css hack(ie6-9,firefox,chrome,opera,safari)
在这个浏览器百花争鸣的时代,作为前端开发的我们为了我们漂亮的设计能适应各个浏览器可为煞费苦心,主要体现在javascript和css上面。javascript我这次就不谈了,先说说css。 为了适应不同浏览器不同的版本(版本主要就ie来说),ie这朵奇葩现在我们要兼容6-9,它的10也快出来了。。。在ie下我们可以写条件注释来区分 ie和其他浏览器,以及ie的版本,这些请大家自行google。这篇文章主要讨论的是css hack。下面废话补多说了,直接上代码 <!DOCTYPE html> <html> <head> <title>Css Hack</title> <style> #test { width:300px; height:300px; background-color:blue; /*firefox*/ background-color:red\9; /*all ie*/ background-color:yellow\0; /*ie8*/ +background-color:pink; /*ie7*/ _background-color:orange; /*ie6*/ } :root #test { background-color:purple\9; } /*ie9*/ @media all and (min-width:0px){ #test {background-color:black\0;} } /*opera*/ @media screen and (-webkit-min-device-pixel-ratio:0){ #test {b
从一生的角度看程序员的学习和发展
很多人谈学习和发展的时候,往往忽略人的先天自然条件,在这里我们从这个视角切入,来探讨一下程序员一生的可能轨迹。 如果把程序员的人生分为三个阶段,那么他们是: 毕业~30岁:这个时间段里,大多数人无牵无挂,家里面父亲母亲不用太操心,也没娃,可能会犯愁找不到老婆或老公, 但基本上自由时间较为充沛,身体比较健康。 算是上升时期。 30~45岁:这个时间段大多数人处在上有老,下有小。父亲母亲可能需要较多照顾,倒霉的话自己还有点小毛病。 时间不是很充沛了,算是能发光发热的黄金时期。 45岁~退休:这个时间段值得牵挂的事会变少,反倒又能回归到自身。脑力体力逐步开始衰减,算是守成时期。 如果运气不好,也有英年早逝的可能。 限于IT行业的年龄,当下这个年龄段的程序员还不多,有的大多也走到了比较高的位置。 对大多数人而言,这30几年追求的恐怕不是成就一番事业,而是财务自由。 (创业始终值得尊重和赞赏,但从人数上看估计不会是主流) 这样的话,我们可以讲,一个人的资本是可自由支配的时间,而目标产出是财务自由。 至于怎么分配时间,《货殖列传》里有段话可以做点参考: 是以无财作力,少有斗智,既饶争时,此其大经也。 (什么也没有的时候要靠力
PHP代码审计
文档去年做的,按说应该更新了,写得不咋好,有些没写全,参考了很多文档。 话说owasp codereview,也该出2.0了。 牛们路过,给提点建议。 目录 1. 概述 3 2. 输入验证和输出显示 3 2.1 命令注入 4 2.2 跨站脚本 4 2.3 文件包含 5 2.4 代码注入 5 2.5 SQL注入 6 2.6 XPath注入 6 2.7 HTTP响应拆分 6 2.8 文件管理 6 2.9 文件上传 7 2.10 变量覆盖 7 2.11 动态函数 7 3. 会话安全 8 3.1 HTTPOnly设置 8 3.2 domain设置 8 3.3 path设置 8 3.4 cookies持续时间 8 3.5 secure设置 8 3.6 session固定 9 3.7 CSRF 9 4. 加密 9 4.1 明文存储密码 9 4.2 密码弱加密 9 4.3 密码存储在攻击者能访问到的文件 9 5. 认证和授权 10 5.1 用户认证 10 5.2 函数或文件的未认证调用 10 5.3 密码硬编码 10 6. 随机函数 10 6.1 rand() 10 6.2 mt_srand()和mt_rand() 11 7. 特殊字符和多字节编码 11 7.1 多字节编码 11 8. PHP危险函数 11 8.1 缓冲区溢出 11 8.2 session_destroy()删除文件漏洞 12 8.3 unset()-zend_hash_del_key_or_index漏洞 12 9. 信息泄露 13 9.1 phpinfo 13 10. PHP环境 13 10.1 open_basedir设置 13 10.2 allow_url_fopen设置 13 10.3 allow_url_include设置 13 10.4 safe_
PHP漏洞全解(九)-文件上传漏洞
一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件。 下面是一个简单的文件上传表单 <form action="upload.php" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file1" /><br /> <input type="submit" value="上传文件" /> <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> </form> php的配置文件php.ini,其中选项upload_max_filesize指定允许上传的文件大小,默认是2M $_FILES数组变量 PHP使用变量$_FILES来上传文件,$_FILES是一个数组。如果上传test.txt,那么$_FILES数组的内容为: $FILES Array { [file] => Array { [name] => test.txt //文件名称 [type] => text/plain //MIME类型 [tmp_name] => /tmp/php5D.tmp //临时文件 [error] => 0 //错误信息 [size] => 536 //文件大小,单位字节 } } 如果上传文件按钮的name属性值为file <input type="file" name="file" /> 那么使用$