PHP开发者常犯的10个MySQL错误

数据库是Web大多数应用开发的基础。如果你是用PHP,那么大多数据库用的是MySQL也是LAMP架构的重要部分。PHP看起来很简单,一个初学者也可以几个小时内就能开始写函数了。但是建立一个稳定、可靠的数据库确需要时间和经验。下面就是一些这样的经验,不仅仅是MYSQL,其他数据库也一样可以参考。

1.使用MyISAM而不是InnoDB
MySQL有很多的数据库引擎,单一般也就用MyISAM和InnoDB。
MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的,那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束,这是保证数据 完整性的精华所在啊。另外,MyISAM会在添加或者更新数据的时候将整个表锁住,这在以后的扩展性能上会有很大的问题。
解决办法很简单:使用InnoDB。 继续阅读PHP开发者常犯的10个MySQL错误

ThinkPHP防范XSS跨站攻击

一直使用ThinkPHP,通过乌云有向提交了ThinkPHP XSS攻击的bug,抽时间看了一下。
原理是通过URL传入script标签,ThinkPHP异常错误页面直接输出了script。

原理:

http://ask.lenovo.com.cn/index.php?s=1%3Cbody+onload=alert(1)%3E

其中m的值是一个不存在的module,同时是一个完全的script,在异常错误页面中被执行实现XSS跨站攻击。

防范方法
找到异常错误页面模板ThinkException.tpl.php(2,x),think_exception.tpl(3.x)有两个地方要修改:

第57行 echo($_SERVER[‘PHP_SELF’])
改为 echo strip_tags($_SERVER[‘PHP_SELF’])
第62行 echo $e[‘message’]
改为 echo strip_tags($e[‘message’])

另外,马上要发布的3.0官方已经对TP变量GROUP_NAME,MODULE_NAME,ACTION_NAME,__URL__,__SELF__,__APP__,$_SERVER[‘PHP_SELF’]做了安全处理。

PS:安全不是框架的责任,大家在开发的时候须自己注意。

Debian安全升级Debian 5至Debian 6

第一步:修改更新源为debian 6.0

# vi /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
deb http://volatile.debian.org/debian-volatile squeeze/volatile main
deb-src http://volatile.debian.org/debian-volatile squeeze/volatile main

第二步:更新源及软件包

apt-get update
apt-get install apt dpkg aptitude
apt-get dist-upgrade

第三步:重启

reboot

第四步:检查升级后系统运行情况

lsb_release -a
netstat -tulpn
tail -f /var/log/messages
other log files for linuxany.com

yum更新提示Segmentation fault错误解决办法

最近在一台古董服务器(Centos5.4)上通过yum安装一些php需要的库文件时发生错误:

# yum update
Setting up Update Process
Setting up repositories
Segmentation fault

开始以为是yum源的问题,折腾了好半天,发现原来是我们安装的zlib1.2.5时指定了安装目录(./configure -prefix=/usr)对yum产生了影响,所以总结如下:
1、安装完系统后,运行一次#yum update(yum产生了缓存) ,然后再安装zlib1.2.5,之后如果不执行#yum clean all,则一直可以使用yum,不会报段错误

2、如果在执行yum前已经安装了zlib1.2.5,则需要做如下处理

#cd /usr/lib
#ln -sf libz.so.1.2.3 libz.so
#ln -sf libz.so.1.2.3 libz.so.1

但此后zlib就使用了旧版本,在成功执行了yum后,还需要将软连接更改

#cd /usr/lib
#ln -sf libz.so.1.2.5 libz.so
#ln -sf libz.so.1.2.5 libz.so.1

至此,问题解决了!

[转]用Gow在Windows使用Linux命令

如果你是 Linux 及 Windows 的双料用户,而且是深度 CLI 控的话,可能会像我一样在用 Win 的时候会不知不觉间输入一些 Linux 的命令, 当然这肯定无法执行的。现在,有一个名为 Gow 的工具包就可以发挥作用了。

Gow 是一个相当于 Cygwin 的轻量级替代品,里面封装了130 多个的开源工具及 Linux 命令,其中包括:

Shell : bash , zsh
压缩工具: gzip, zip, bzip2, compress
SSH: putty, psftp, pscp, pageant, plink
下载工具 : cURL, wget
FTP: NcFTP
编辑器 :vim
字处理 : grep, agrep, less, cat, tail, head
文件工具: mv, cp, du, ls, pwd, rmdir, whereis
开发工具: make, diff, diff3, sleep, cvs, dos2unix, unix2dos
用户下载一个 Win 安装程序并安装后,它会自动设置好相应的环境变量,这样无论在哪个目录下都能使用这些命令了。

主页:http://wiki.github.com/bmatzelle/gow/
安装程序下载:http://github.com/bmatzelle/gow/downloads

安装完后,就可以打开 CMD 窗口来使用这命令及工具了。

原文:http://www.oschina.net/question/12_10312

[转]程序员的5种类型

在我的代码旅程和编程经历中,已经遭遇很多奇特的对手,还有更为奇特的盟友。我至少发现有5种代码勇士,有些是出色的战友,其他则似乎都在搅黄我的每个计划。不过他们都在软件开发的万神殿上都有一席之地。如果没有不同编程风格的良好组合,你可能会发现你的项目要不就是耗时过长,要不就是太不稳定或太过完美而无人去做。

不过他们都在软件开发的万神殿上都有一席之地。如果没有不同编程风格的良好组合,你可能会发现你的项目要不就是耗时过长,要不就是太不稳定或太过完美而无人去做。

1. The duct tape programmer 喉咙贴了胶带的程序员
The code may not be pretty, but damnit, it works! 代码或许不漂亮,但能用!
这种家伙是公司的基石。代码有问题的时候,他能快速补漏,下不再犯。当然他并不关注代码看起来怎么样,是否容易使用,以及其他琐碎的问题,但是他能搞定,没有一堆废话或不会唧唧歪歪。用这种程序员的最佳方式是,你指出问题后走开就可以了。 继续阅读[转]程序员的5种类型

升级bugfree2.1.3后无法记住密码解决办法

今天早上,升级bugfree至2.1.3后发现勾选“记住密码”会导致无法登录,但是php、nginx日志并没任何发现。
看了一下源码发现2.1.3版本开始使用了mcrypt类库:

但是从bugfree更新日志中并没有提到。
解决办法:
重新编译php开启mcrypt扩展,但在此之前要先安装libmcrypt-dev。步骤如下:

  1. apt-get install libmcrypt-dev
  2. ./configure [省略] –with-mcrypt

PHP中两个float(浮点数)比较的问题

最近在开发一个合同管理系统的时候,涉及到两个浮点数比较,算是把我郁闷惨了。
在N久以前,就不晓得从哪里听来的一个“不要用等号去比较浮点数”的“真理”,自己平时也在用,好像没有出现啥问题,可这次问题总算是来了。