Feb 24, 2010
我们今天要向大家介绍的是PHP magic_quotes_gpc的具体使用方法。大家都知道在PHP中一个特殊的函数魔术函数,它在引用的过程中只有在传递$_GET,$_POST,$_COOKIE时才会发生作用。
1.
条件: PHP magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
数据: $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
2.
条件: PHP magic_quotes_gpc=off
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow”’’sun (和输入一样)
输出数据格式:snow”’’sun (和输入一样)
说明: addslashes()函数将单引号转换为\’的转义字符使sql语句成功执行,
但\’并未作为数据存入数据库,数据库保存的是snow”’’sun 而并不是我们想象的snow\’\’\’\’sun
3.
条件: PHP magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
数据: $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow”’’sun (和输入一样)
输出数据格式:snow”’’sun (和输入一样)
说明: PHP magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行,
但\’并未作为数据入数据库,数据库保存的是snow”’’sun而并不是我们想象的snow\’\’\’\’sun。
4.
条件: PHP magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow\’\’\’\’sun (添加了转义字符)
输出数据格式:snow\’\’\’\’sun (添加了转义字符)
说明: PHP magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行,
addslashes又将即将写入数据库的单引号转换为\’,后者的转换被作为数据写入
数据库,数据库保存的是snow\’\’\’\’sun
总结如下:
1. 对于PHP magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于PHP magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
PHP magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime [...]
Feb 8, 2010
apache对资源要求总是很高,尽管前面挂了一个lighttpd,可以对静态资源做一些处理,
但涉及到动态处理的程序,必须还得使用apache。(当然,lighttpd可以处理所有工作,但
似乎存在一些bug,在此不多赘述)下面讲一下迁移过程吧。
上午还是被折腾了挺久,在apache上配置多个vhost挺熟了,但nginx还没试过。网上
search了一把,其实还很简单。但是迁我的wordpress的时候,出问题了,访问所有的页面
都是404,有些不解了。又注意到url为/2009/06/07/XXX,恍然大悟,原来处理前做了
分发。查了下lighttpd,apache的rewite规则,没有任何对wordpress的分发。实际不解了,
只好再baidu一把,原来.htaccess做了这个工作,但nginx不支持.htaccess功能。了解了这
些就简单了,把.htaccess重写一遍就可以了。
重写如下:
wordpress.conf
location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
然后在nginx.conf需要的地方include wordpress.conf就可以了。
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 29, 2010
实这时最好用日志轮询,之前这个WEB服务器没有做这个配置,本应该配置WEB服务器时就应该做的。现在配置下也不晚。
1.首先得要软件http://cronolog.org/download/index.html
Version 1.6.2 released 2002-01-24 (gzip’ed tar file)
Version 1.6.1 released 1999-12-20 (gzip’ed tar file)
Win 32 version (ZIP file)
Version 1.6 released 1999-12-16 (gzip’ed tar file)
Version 1.5b9 released on 4 June 1998 (gzip’ed tar file)
Version 1.4 released 20 December 1996 (gzip’ed tar file)
如果有Windows的要下Win_32_version(ZIP file) Linux习惯用哪种包就用哪种.
2. 在Linux 下安装cronolog
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure (注意:默认是安装在/usr/local下 cronolog的命令在/usr/local/sbin下,这个要清楚)
make ; make install
3.在Windows下安装cronolog
在Windows下很简单,直接把cronolog.exe解压Copy到apache目录下的bin目录中.
4.配置都是一样的格式,不过要注意Linux和Windows下斜杠的方向.
Linux下
例:cronolog命令在/usr/local/sbin 下 日志文件在 /usr/local/apache2/logs/下
在FormatLog附近加入两句:
CustomLog [...]
Jan 26, 2010
有时候经常使用sort来排序,需要预处理把需要排序的field语言在最前面。实际上这是
完全没有必要的,利用-k参数就足够了。
比如sort all
1 4
2 3
3 2
4 1
5 0
如果sort -k 2的话,那么执行结果就是
5 0
4 1
3 2
2 3
1 4
它按照第二个域进行排序。
如下为man sort:
Usage: sort [OPTION]… [FILE]…
Write sorted concatenation of all FILE(s) to standard output.
Ordering options:
Mandatory arguments to long options are mandatory for short options too.
-b, –ignore-leading-blanks ignore leading blanks
-d, –dictionary-order consider only blanks and alphanumeric characters
-f, –ignore-case fold lower case [...]
Jan 26, 2010
字符匹配语法:
\d 匹配数字(0~9) ‘\d’匹配8,不匹配12;
\D 匹配非数字 ‘\D’匹配c,不匹配3;
\w 匹配任意单字符 ‘\w\w’ 匹配A3,不匹配@3;
\W 匹配非单字符 ‘\W’匹配@,不匹配c;
\s 匹配空白字符 ‘\d\s\d’匹配3 d,不匹配abc;
\S 匹配非空字符 ‘\S\S\S’匹配A#4,不匹配3 d;
. 匹配任意字符 ‘….’匹配A$ 5,不匹配换行;
[…] 匹配括号中任意字符 [b-d]匹配b、c、d, 不匹配e;
[^…] 匹配非括号字符 [^b-z]匹配a,不匹配b-z的字符;
重复匹配语法:
{n} 匹配n次字符 \d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d
{n,} 匹配n次和n次以上 \w{2}匹配\w\w和\w\w\w以上,不匹配\w
{n,m} 匹配n次上m次下 \s{1,3}匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s
? 匹配0或1次 5?匹配5或0,不匹配非5和0
+ 匹配一次或多次 \S+匹配一个以上\S,不匹配非一个以上\S
* 匹配0次以上 \W*匹配0以上\W,不匹配非N*\W
字符定位语法:
^ 定位后面模式开始位置
$ 前面模式位于字符串末端
\A 前面模式开始位置
\z 前面模式结束位置
\Z 前面模式结束位置(换行前)
\b 匹配一个单词边界
\B 匹配一个非单词边界
转义匹配语法:
“\”+实际字符 \ . * + ? | ( ) { }^ $ 例如:\\匹配字符“\”
\n [...]