Apache Rewrite技术

把你的PHP的动态页面映射成HTML的静态页面,这个HTML页面是不存在的,只不过当访问1.HTML的时候,服务器就会把1.HTML映射到1.PHP上!
Rewrite 很简单的说,就是把类似
==> /phpbb2/viewtopic.php?t=1388&start=0
动态网页,转成
==> /phpbb2/viewtopic-1388-0.html
好处有:
1. URL 短一点,静态网址的接受度较高。
2. Search Engine 比较吃的下去~
3. 静态的网址会有比较好的 SE-BENCHMARK

首先要看看你的空间是否支持REWRITE
看看探针就可以了!http://www.feelone.net/iprober.php?act=phpinfo

url_rewriter.tags a=href,area=href,frame=src,form=,fieldset= a=href,area=href,frame=src,form=,fieldset=
如果有的话
恭喜
请继续跟我来
写一个
.htaccess
文件
内容是:
RewriteEngine on
RewriteRule k([0-9]+).html$ read.php?tid=$1
RewriteRule k([0-9]+).html$ read.php?tid=$1&fpage=$2
RewriteRule t([0-9]+).html$ thread.php?fid=$1
RewriteRule p([0-9]+).html$ post.php?fid=$1
RewriteRule p1([0-9]+).html$ post.php?action=vote&fid=$1
RewriteRule index.html$ index.php
RewriteRule iprober.html$ iprober.php
只针对PHPWIND
其他的PHP地址请自己写
这样就已经被映射好了
解释一下,第一个是你的版块地址
第二个是你的帖子地址!
明白了吗?
不明白?
再看,还不明白?还看^^^
测试一下!
www.feelone.net/index.php
www.feelone.net/index.html

http://www.feelone.net/t40.html
http://www.feelone.net/thread.php?fid=40&page=

http://www.feelone.net/k7423.html
http://www.feelone.net/read.php?tid=7423

CentOS下MySql 5.0.x的安装、优化及安全设置

groupadd mysql
新建一个名为mysql的用户组
useradd -g mysql mysql
在mysql用户组下新建一个名为mysql的用户
gunzip < mysql-VERSION.tar.gz | tar -xvf -
解压下载到的.gz文件
cd mysql-VERSION
进入解压后的目录
CFLAGS=”-O3 -mcpu=pentium4″ CXX=gcc CXXFLAGS=”-O3 -march=pentium4 -felide-constructors -fno-exceptions -fno-rtti” ./configure –prefix=/home/mysql/ –without-debug    –with-unix-socket-path=/home/mysql/tmp/mysql.sock –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –with-extra-charsets=gbk,gb2312,utf8 –without-innodb –without-isam –with-pthread –enable-thread-safe-client
配置mysql
gcc的相关参数:

-O3 \
-O
-O1
      优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.
      不使用`-O’选项时,编译器的目标是减少编译的开销,使编译结果能够调试.语句是独立的:如果在 两条语句之间用断点中止程序,你可以对任何变量重新赋值,或者在函数体内把程序计数器指到其他语句,以及从源程序中 精确地获取你期待的结果.
      不使用`-O’选项时,只有声明了register的变量才分配使用寄存器.编译结果比不用 `-O’选项的PCC要略逊一筹.
      使用了`-O’选项,编译器会试图减少目标码的大小和执行时间.
      如果指定了`-O’选项, `-fthread-jumps’和`-fdefer-pop’选项将被 打开.在有delay slot的机器上, `-fdelayed-branch’选项将被打开.在即使没有帧指针 (frame pointer)也支持调试的机器上, `-fomit-frame-pointer’选项将被打开.某些机器上 还可能会打开其他选项.
-O2
      多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不进行循环展开(loop unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既增加了编译时间,也提高了生成代码的 运行效果.
-O3
      优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.
-O0
      不优化.
如果指定了多个-O选项,不管带不带数字,最后一个选项才是生效的选项。
-mcpu=pentium4 \根据CPU类型优化编译,可以让你的mysq表现更好!可选项目很多:i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp,athlon-mp,winchip-c6, winchip2 , c3.
-fomit-frame-pointer \对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,并将寄存器用于普通用途。所有”-O”级别都打开着一选项,但仅在调试器可以不依靠栈指针运行时才有效。建议不需要调试的情况下显式的设置它。

configure的相关参数:
–prefix=/home/mysql/  \指定安装目录
–without-debug \去除debug模式
–with-extra-charsets=gbk,gb2312,utf8  \添加gbk,gb2312,utf8中文字符支持
–with-pthread \强制使用pthread库(posix线程库)
–enable-assembler \使用一些字符函数的汇编版本
–enable-thread-safe-client \以线程方式编译客户端
–with-client-ldflags=-all-static \以纯静态方式编译客户端
–with-mysqld-ldflags=-all-static\以纯静态方式编译服务端
–without-isam \去掉isam表类型支持,现在很少用了,isam表是一种依赖平台的表
–without-innodb\去掉innodb表支持,innodb是一种支持事务处理的表,适合企业级应用

make
编译
make install
安装
cp support-files/my-medium.cnf /etc/my.cnf
将mysql的配置文件copy到/etc目录下,并更名为my.cnf

/home/mysql下面有5个my-xxxx.cnf文件
my-small.cnf               最小配置安装,内存<=64M,数据数量最少
my-large.cnf               内存=512M
my-medium.cnf            32M<内存<64M,或者内存有128M,但是数据库与web服务器公用内存
my-huge.cnf               1G<内存<2G,服务器主要运行mysql
my-innodb-heavy-4G.cnf   最大配置安装,内存至少4G

cd /home/mysql
进入安装目录
bin/mysql_install_db –user=mysql
以mysql用户的身份建立数据表
chown -R root    .
将mysql的主目录(即/home/mysql)
的属主设为root用户。这是官方文档上的命令,但奇怪的是,如果将mysql的主目录属主设成root用户,在运行了下面的bin/mysqld_safe –user=mysql &后则不能启动mysql。问题出在“权限”上,运行chown -R mysql .则可以用下面的命令正常启动mysql。难道官方文档有错?希望大家一起来探讨一下。
chown -R mysql var
将var目录的属主设为mysql用户
chgrp -R mysql .
将mysql的主目录的属主设为mysql用户组(注意:和前面的命令不一样,这个命令是对用户组进行赋权)
bin/mysqld_safe –user=mysql &
启动mysql,如果一切正常的话,运行此命令后,不会有任何提示。
bin/mysqladmin -u root password password
修改root用户的密码,这里的root用户指的是mysql的root用户,与Linux的root用户无关。绿色的password就是你需要设置的新密码,牢记!
bin/mysql -u root -p
如果正常的话,用这个名字可以登录,在输入密码后,出现mysql > 的提示符表明登录成功。用quit命令可退出

以下命令用于设置mysql开机自动运行
cd mysql-VERSION
再次进入解压后的目录,即源码目录。
cp support-files/mysql.server /etc/init.d/mysql
将mysql.server这个文件copy到/etc/init.d/目录下,并更名为mysql
chmod 755 /etc/init.d/mysql
给/etc/init.d/mysql这个文件赋予“执行”权限
chkconfig –level 345 mysql on
加入到开机自动运行,运行级别为3 4 5
service mysql restart
重启mysql服务

Q:为什么我用PHP连接Mysql时提示“connect fail:Can’t connect to local MySQL server through socket ‘/home/mysql/tmp/mysql.sock‘ (13)”
A:这是因为PHP没能正常的连接到Mysql套接字,即mysql.sock文件。首先,检查/home/mysql/tmp/目录下是否有mysql.sock这个文件。如果没有,可能是mysql没有正常启动;如果有,可能是/home/mysql/tmp/这个目录的权限不够,用chmod 755 /home/mysql/tmp可解决此问题。

———————————————————————————————–
Mysql的优化设置

打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。调整设置时,请量力而行,这与你的服务器的配置有关,特别是内存大小。以下设置比较适合于1G内存的服务器,但并不绝对。

#指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用show status like ‘key_reads’获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
key_buffer = 384M

#要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。默认数值是50
back_log = 200

#一个包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。缺省地,该值太小必能捕捉大的(可能错误)包。如果你正在使用大的BLOB列,你必须增加该值。它应该象你想要使用的最大BLOB的那么大。
max_allowed_packet = 4M

#允许的同时客户的数量。增加该值增加 mysqld要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100
max_connections = 1024

#指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用show status like ‘Open_tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
table_cache = 512

#每个线程排序所需的缓冲
sort_buffer_size = 4M

#当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
read_buffer_size = 4M

#加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作,应增加read_rnd_buffer_size的值以加速排序操作后面的行读取。仍然不明白这个选项的用处……
read_rnd_buffer_size = 8M

#用于REPAIR TABLE。不明白这个选项的用处,百度上找到的设置方向也是五花八门,有128M、64M、32M等,折中选一个。
myisam_sort_buffer_size = 64M

#可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。
thread_cache_size = 128

#查询结果缓存。第一次执行某条SELECT语句的时候,服务器记住该查询的文本内容和它返回的结果。服务器下一次碰到这个语句的时候,它不会再次执行该语句。作为代替,它直接从查询缓存中的得到结果并把结果返回给客户端。
query_cache_size = 32M

#最大并发线程数,cpu数量*2
thread_concurrency = 2

#设置超时时间,能避免长连接
wait_timeout = 120

#关闭不需要的表类型,如果你需要,就不要加上这个
skip-innodb
skip-bdb

关于mysql的优化设置及检查,这篇文章很值得一看    http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml
———————————————————————————————–
Mysql的安全设置

打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。

#取消文件系统的外部锁
skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题
skip-name-resolve

#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。网络上流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段!
local-infile = 0

#关闭远程连接,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。(你必须确定,你是否真的不需要远程连接mysql)
skip-networking

修改完my.cnf后,还需要对mysql的用户名、帐号、及默认数据库进行调整
首先先登录mysql,在终端窗口输入  /home/mysql/bin/mysql -u root -p
然后会提示输入密码,输入正确密码后,会出现mysql>提示符。

输入以下命令:
mysql>use mysql;
mysql>update user set user=”centos” where user=”root”;       (将mysql的root用户名修改成centos,防止root的密码被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=”;                  (删除user用户)
mysql>delete from user where password=”;               
(删除user用户)
mysql>delete from user where host=”;                     (删除user用户)
mysql>drop database test;             (删除默认的test数据库)
mysql>flush privileges;               (刷新mysql的缓存,让以上设置立即生效)
mysql>quit;

为了使以上优化和安全设置生效,请重启Mysql服务或Linux。

eAccelerator 参数详解

安装完成后,eAccelerator会自动在php.ini里添加以下设置选项(仅英文部分,中文是我自己添加的注解),有趣的是,每次添加的位置可能会不一样,但总的来说,这些设置一定会添加在Zend Optimizer的设置选项之前。Zend Optimizer的相关设置通常在php.ini的末端。(如果没有自动添加以下选项,就手工添加,添加在Zend Optimizer的设置选项之前即可)
zend_extension_ts=”/home/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so”
实际上,安装好eAccelerator以后, /home/php/lib/php/extensions/下会生成2个目录,一个是no-debug-zts-xxxxxxxx,一个是no- debug-non-zts-xxxxxxxx,2个目录下都有eaccelerator.so文件。如果安装的是Zeus,这一句可能要修改成如下形式才能生效,请自己测试。

zend_extension=”/home/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”
默认添加的路径是不正确的,这里需要手工修改路径。在make install以后,终端会输出一个路径,把那个路径填到里面即可。我输出的路径是/home/php/lib/php/extensions/no-debug-zts-20060613/,改之。
如果您使用 thread safe 编译安装 PHP,则您必须使用 “zend_extension_ts” 代替 默认添加的“zend_extension”。我就必须修改这里,否则不起作用。
eaccelerator.shm_size=”32″
eAccelerator 可以使用的共享内存的数量 (以兆为单位) . “0″ 是指操作系统的默认值. 默认值是 “0″.可根据服务器的实际情况来调整,16,32,64,128都是可以的。
eaccelerator.cache_dir=”/home/php/tmp”
这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 “/tmp/eaccelerator“.
eaccelerator.enable=”1″
开启或关闭 eAccelerator。”1″ 为开启,”0″ 为关闭。默认值为 “1″。
eaccelerator.optimizer=”1″
启或关闭内部优化器,可以提升代码执行速度。”1″ 为开启,”0″ 为关闭。默认值为 “1″。
eaccelerator.check_mtime=”1″
打开或者关闭 PHP 的文件修改检查. “1″ 是指打开, “0″ 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 “1″. 默认值是 “1″.
eaccelerator.debug=”0″
开启或关闭调试日志记录。”1″ 为开启,”0″ 为关闭。默认值为 “0″。
eaccelerator.filter=””
判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等)
如果参数以 “!” 开头,则匹配这些参数的文件被忽略缓存。默认值为 “”,即,所有 PHP 文件
都将被缓存。
eaccelerator.shm_max=”0″
当使用 ” eaccelerator_put() ” 函数时禁止其向共享内存中存储过大的文件。该参数指定允许
存储的最大值,单位:字节 (10240, 10K, 1M)。”0″ 为不限制。默认值为 “0″。
eaccelerator.shm_ttl=”0″
当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在
最后 “shm_ttl” 秒内无法存取的脚本缓存。默认值为 “0″,即:不从共享内春中删除
任何缓存文件。
eaccelerator.shm_prune_period=”0″
当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于
“shm_prune_period” 秒的缓存脚本。默认值为 “0″,即:不从共享内春中删除
任何缓存文件。
eaccelerator.shm_only=”0″
允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认
值为 “0″,即:使用磁盘和共享内存进行缓存。
eaccelerator.compress=”1″
允许或禁止压缩内容缓存。默认值为 “1″,即:允许压缩。
eaccelerator.compress_level=”9″
指定内容缓存的压缩等级。默认值为 “9″,为最高等级。

MySQL密码恢复

本文出自信息安全专业论坛-Amxking
因为MySQL密码存储于数据库mysql中的user表中
所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了
在c:\mysql\data\mysql\(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件user.frm、user.MYD、user.MYI
user.frm //user表样式文件
user.MYD //user表数据文件
user.MYI //user表索引文件
为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了
然后#. /etc/rc.d/init.d/mysql stop
#. /etc/rc.d/init.d/mysql start
#mysql -u root -p XXXXXX
好了,可以用windows 2003下mysql密码登陆了
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
这时候会出错,提示user表只有读权限

我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666
在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/mysql/mysql/下ls -l看了一下再
#chown -R mysql:mysql user.*
#chmod 600 user.*
//OK,DONE
重起一下MYSQL
重新连接
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
mysql>FLUSH PRIVILEGES;
有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行
mysql>delete from user where User=”;
mysql>delete from user where Host=’%’;
mysql>FLUSH PRIVILEGES;
好了,到这里恢复密码过程就完成了
这个方法么就是有点局限性,你必须也具备另外的user表文件

其他还有几种方法

其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)
1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。
killall -TERM mysqld
你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。
2. 使用`–skip-grant-tables’ 参数来启动 mysqld。 (LINUX下/usr/bin/safe_mysqld –skip-grant-tables , windows下c:\mysql\bin\mysqld –skip-grant-tables)

3. 然后无密码登录到mysqld server ,
>use mysql
>update user set password=password(”new_pass”) where user=”root”;
>flush privileges;
。你也可以这样做:`mysqladmin -h hostname -u user password ‘new password”。

4. 载入权限表: `mysqladmin -h hostname flush-privileges’ ,或者使用 SQL 命令`FLUSH PRIVILEGES’。
5.killall -TERM mysqld
6.用新密码登陆

其它方法二

直接用十六进制编辑器编辑user.MYD文件

不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法直接编辑linux下的user表文件,就不需要重新改文件属主和权限了

Hello world!

欢迎使用 WordPress。这是您的第一篇日志。您可以编辑它或是删除它,然后开始写您自己的 blog。