数据库是Web大多数应用开发的基础。如果你是用PHP,那么大多数据库用的是MySQL也是LAMP架构的重要部分。PHP看起来很简单,一个初学者也可以几个小时内就能开始写函数了。但是建立一个稳定、可靠的数据库确需要时间和经验。下面就是一些这样的经验,不仅仅是MYSQL,其他数据库也一样可以参考。
1.使用MyISAM而不是InnoDB
MySQL有很多的数据库引擎,单一般也就用MyISAM和InnoDB。
MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的,那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束,这是保证数据 完整性的精华所在啊。另外,MyISAM会在添加或者更新数据的时候将整个表锁住,这在以后的扩展性能上会有很大的问题。
解决办法很简单:使用InnoDB。
一直使用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:安全不是框架的责任,大家在开发的时候须自己注意。
executables_list:
agrep 3.37
ansi2knr
basename 1.9.4
bash 2.03
bc 1.05
bison 1.28
bunzip2 1.0.1
bzip2 1.0.1
bzip2recover 1.0
cat 2.0
chgrp 3.16
chmod 3.16
chown 3.16
cksum 2.0
cmp 2.7
comm 2.0
compress 2.0
cp 3.16
csplit 2.0
curl 7.15.0
cut 2.0
cvs 2.0.41a
dc 1.2
dd 3.16
df 3.16
diff 2.7
diff3 2.7
dircolors 3.16
dirname 1.13
dos2unix
du 3.16
egrep 2.4.2
env 1.9.4
expand 5.1.2600.0
expr 1.9.4
factor 1.13
fgrep 2.4.2
flex 2.5.4
fmt 2.0
fold 2.0
fsplit
gawk 3.1.0
gclip 1.0
gow
gplay
grep 2.4.2
gsar 1.12
gunzip 1.2.4
gzip 1.2.4
head 2.0
id 1.9.4
indent 2.2.6
install 3.16
join 2.0
jwhois 2.4.1
less 340
lesskey 340
ln 3.16
logname 1.9.4
ls 3.16
m4 1.4
make 3.78.1
md5sum 2.0
mkdir
mkfifo
mknod 3.16
mv 3.16
mvdir 3.16
ncftp 3.1.8
nl 2.0
od 2.0
pageant 0.60
paste 2.5
patch 2.0
pathchk 1.9.4
pclip 1.0
plink 0.60
pr 2.0
printenv 1.9.4
printf 1.9.4
pscp 0.60
psftp 0.60
putty 0.60
puttygen 0.57
pwd
recode 3.6
rm 3.16
rman 3.0.7
rmdir
rsync 2.6.3
scp
sdiff 2.7
sed 3.02
seq 1.13
sftp
sh
shar 4.1
sleep 1.9.4
sort 2.0
split 2.0
stego
su 1.9.4
sum 2.0
sync 3.16
tac 2.0
tail 2.0
tar 1.12
tee 1.9.4
test 1.9.4
touch 3.16
tr 2.0
type
uname 1.9.4
unexpand 2.0
uniq 2.0
unix2dos
unrar 3.4.3
unshar 4.1
unzip 2.3
uudecode 4.1
vim 6.3
wc 2.0
wget 1.8.1
whereis
which 2.4
whoami 1.9.4
xargs 4.1
yes 1.9.4
zcat 1.2.4
zip 3.0
第一步:修改更新源为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
最近在一台古董服务器(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
至此,问题解决了!
如果你是 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
在我的代码旅程和编程经历中,已经遭遇很多奇特的对手,还有更为奇特的盟友。我至少发现有5种代码勇士,有些是出色的战友,其他则似乎都在搅黄我的每个计划。不过他们都在软件开发的万神殿上都有一席之地。如果没有不同编程风格的良好组合,你可能会发现你的项目要不就是耗时过长,要不就是太不稳定或太过完美而无人去做。
不过他们都在软件开发的万神殿上都有一席之地。如果没有不同编程风格的良好组合,你可能会发现你的项目要不就是耗时过长,要不就是太不稳定或太过完美而无人去做。
1. The duct tape programmer 喉咙贴了胶带的程序员
The code may not be pretty, but damnit, it works! 代码或许不漂亮,但能用!
这种家伙是公司的基石。代码有问题的时候,他能快速补漏,下不再犯。当然他并不关注代码看起来怎么样,是否容易使用,以及其他琐碎的问题,但是他能搞定,没有一堆废话或不会唧唧歪歪。用这种程序员的最佳方式是,你指出问题后走开就可以了。
今天早上,升级bugfree至2.1.3后发现勾选“记住密码”会导致无法登录,但是php、nginx日志并没任何发现。
看了一下源码发现2.1.3版本开始使用了mcrypt类库:

但是从bugfree更新日志中并没有提到。
解决办法:
重新编译php开启mcrypt扩展,但在此之前要先安装libmcrypt-dev。步骤如下:
最近在开发一个合同管理系统的时候,涉及到两个浮点数比较,算是把我郁闷惨了。
在N久以前,就不晓得从哪里听来的一个“不要用等号去比较浮点数”的“真理”,自己平时也在用,好像没有出现啥问题,可这次问题总算是来了。
<?php $sum = "12300.00"; $a = "10000.30"; $b = "2000.30"; $c = "299.40"; $sum = (float) $sum; $s = (float) ($a+$b+$c); var_dump($sum, $s); var_dump($sum==$s);
结果是:
float(12300) float(12300) bool(false)
后来才知道在PHP中,要比较两个浮点数的大小,可以用bccomp(参数1,参数2,小数位)来比较。
<?php $sum = "12300.00"; $a = "10000.30"; $b = "2000.30"; $c = "299.40"; $sum = (float) $sum; $s = (float) ($a+$b+$c); var_dump($sum, $s); var_dump(bccomp($sum,$s,2));
结果:
float(12300) float(12300) int(0) // 0表示两个浮点数值相等
bccomp函数具体用法参与PHP手册。
phone4 ios5不完美越狱后,cydia在中文状态下,点搜索或添加源秒退。只能用其他语言才行。使用很不方便。今天网上搜了一下,有解决的办法,测试可行,给大家试试。
方法很简单:
1.首先安装iFlie;
2.复制/User/Librery/下的Keyboard文件夹到/var/root/Librery/;
3.点/var/root/Librery/Keyboard文件夹右边的那个右箭头。
4.所有权改为:
所有者:root
组:wheel
并选择“应用到所有层级”。