自己在线下安装一次:
把:
data目录下的:
cache_skinlist.php
mod_template.php
替换线上的俩文件即可,恢复到defaule模版,再做操作,还以为是写入DB的,看来不是,是写入文件中的。
把:
data目录下的:
cache_skinlist.php
mod_template.php
替换线上的俩文件即可,恢复到defaule模版,再做操作,还以为是写入DB的,看来不是,是写入文件中的。
Bo-blog是一款非常优秀的个人博客发布系统,非常适合个人用户使用。向东的博客(www.jackxiang.com)认为,bo-blog安装不困难,困难在于管理一个博客站点,而管理最让人头疼的问题就是如何管理好博友的评论和留言,拒绝垃圾广告信息和无意义的评论。在bo-blog得管理系统中,已经具备了这些功能,只需要我们稍加设置,就可以有效拒绝垃圾评论和广告信息的产生,博主即使不懂技术,用起来也会得心应手。这就是bo-blog的强大之处。
Bo-blog的演示和下载请访问:Bo-Blog开源博客系统
向东的博客(www.jackxiang.com)告诉你四招bo-blog设置技巧,可以有效防止垃圾评论和广告信息的产生。
一、启用发言验证码
设置方法:登陆bo-blog管理后台,点击“常规设置”,选择“blog设置”,启用“基础设置”下的“发言时启用验证码”功能。
启用该功能后,用户发表 评论、留言都需要手动输入验证码,这样就可以有效拒绝机器人、马甲的自动发帖,可以避免产生大量的垃圾信息。
image0018 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
二、开启bo-blog关键字词过滤功能
登陆bo-blog管理后台,点击“杂项设置”,中的“限制设置”,就可以有针对性、过滤博友得评论、留言内容,将一些含有垃圾留言特征的词汇直接拒之门外。
image0036 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
三、开评论审核功能
如果博主有充分的时间,或博客站前期评论很少,建议博主启用“所有言论都须经过审核”,开启该功能后,只有通过人工审核得评论,才允许发布。使用该功能,需要消耗博主的大量精力和时间,但可以100%拒绝垃圾信息的产生。
开启评论审核的方法:
登陆bo-blog管理后台,点击“常规设置”,选择“参数设置”下面的“留言、评论及应用”开启功能板块中的“所有言论都必须经过审核”
image0055 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
四、如果博主疏忽,博客站点已经有大量的垃圾评论和留言的解决办法
如果你的博客网站之前疏于防范,产生了大量的垃圾信息。向东的博客(www.jackxiang.com)在这里介绍一个“宁杀误纵”的方法。就是操作mysql数据库表,执行mysql语句,将信息直接删除。是用该方法,需要博主有一定的技术背景,请谨慎选择操作。
操作方法:
登陆管理员后台,选择“数据库维护”下的“MYSQL”,然后执行下列SQL语句删除信息的命令,即可完成。
下列命令解析与用户说明:
命令: 命令功能
delete from [db]replies where reproperty=2 删除所有未审核的评论
delete from [db]messages where reproperty=2 删除所有未审核的留言
delete from [db]replies where reproperty=0/ 删除所有已审核的评论(非常危险)
delete from [db]replies where reproperty=5 删除所有未审核的引用
delete from [db]replies where reproperty=4 删除所有已审核的引用
如:网站已经有上千条评论了,要快速清除这些未审核的评论,我们只要执行 (delete from [db]replies where reproperty=2)一次删除命令就可以了。
参考:http://jackxiang.com/post/4307/
来源:http://www.jackxiang.com/1175.html
Bo-blog的演示和下载请访问:Bo-Blog开源博客系统
向东的博客(www.jackxiang.com)告诉你四招bo-blog设置技巧,可以有效防止垃圾评论和广告信息的产生。
一、启用发言验证码
设置方法:登陆bo-blog管理后台,点击“常规设置”,选择“blog设置”,启用“基础设置”下的“发言时启用验证码”功能。
启用该功能后,用户发表 评论、留言都需要手动输入验证码,这样就可以有效拒绝机器人、马甲的自动发帖,可以避免产生大量的垃圾信息。
image0018 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
二、开启bo-blog关键字词过滤功能
登陆bo-blog管理后台,点击“杂项设置”,中的“限制设置”,就可以有针对性、过滤博友得评论、留言内容,将一些含有垃圾留言特征的词汇直接拒之门外。
image0036 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
三、开评论审核功能
如果博主有充分的时间,或博客站前期评论很少,建议博主启用“所有言论都须经过审核”,开启该功能后,只有通过人工审核得评论,才允许发布。使用该功能,需要消耗博主的大量精力和时间,但可以100%拒绝垃圾信息的产生。
开启评论审核的方法:
登陆bo-blog管理后台,点击“常规设置”,选择“参数设置”下面的“留言、评论及应用”开启功能板块中的“所有言论都必须经过审核”
image0055 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
四、如果博主疏忽,博客站点已经有大量的垃圾评论和留言的解决办法
如果你的博客网站之前疏于防范,产生了大量的垃圾信息。向东的博客(www.jackxiang.com)在这里介绍一个“宁杀误纵”的方法。就是操作mysql数据库表,执行mysql语句,将信息直接删除。是用该方法,需要博主有一定的技术背景,请谨慎选择操作。
操作方法:
登陆管理员后台,选择“数据库维护”下的“MYSQL”,然后执行下列SQL语句删除信息的命令,即可完成。
下列命令解析与用户说明:
命令: 命令功能
delete from [db]replies where reproperty=2 删除所有未审核的评论
delete from [db]messages where reproperty=2 删除所有未审核的留言
delete from [db]replies where reproperty=0/ 删除所有已审核的评论(非常危险)
delete from [db]replies where reproperty=5 删除所有未审核的引用
delete from [db]replies where reproperty=4 删除所有已审核的引用
如:网站已经有上千条评论了,要快速清除这些未审核的评论,我们只要执行 (delete from [db]replies where reproperty=2)一次删除命令就可以了。
参考:http://jackxiang.com/post/4307/
来源:http://www.jackxiang.com/1175.html
http://bbs.umiwi.com/thread-114319-1-1.html
因为特别的原因,需要从Memcached中导出所有的数据。因为Memcached对数据的遍历是明确不支持的,所以必须想歪门邪道的方法。
现在网络上主要有两种思路,一种是通过Memcached提供的stats cachedump命令导出,例如下面这些网址:
dump all keys from memcached
Dumping MemcacheD Content (Keys) with PHP
Robbin的文章
以上文章都利用这个命令导出了部分数据。但事实上,cachedump的输出会限制在 2*1024*1024=2M 字节的长度内(Memecahed source: items.c, func: do_item_cachedump),其导出的格式如下所示:
ITEM key990017 [1 b; 1270394155 s]
ITEM key990016 [1 b; 1270394155 s]
ITEM key990015 [1 b; 1270394155 s]
ITEM key990014 [1 b; 1270394155 s]
即使不计算key的长度,每一条数据至少要占掉近三十个字节,2M最多到几万项数据。对于Item数量很大的情况下,这种方法并不能导出全部数据。
下面的地址佐证了这些观点。
官方邮件列表上的解释
上面提到的文章 memcache dump and load 的读者也在评论中进行了分析
第二种思路来自 Twitter infrastructure team 的 Evan Weaver 的 peeping into memcached , 利用 linux 的 ptrace 系统调用导出memcached进程中数据,分析这些数据得到memcached的所有Key。
但是这种方式有其限制的,一方面,编译Memcached时必须编译入调试信息 (参见link); 另一方面,在分析时对内存消耗太大。我们对一个只使用了64M内存、含有76万左右数据项的Memcached进程进行分析,在完成23万左右数据项时,分析进程占用内存的达到1040M,导致虚拟机内存用满,关闭了该进程。
因为我们现在运行的memcached是不带编译符号的,所以放弃了第二种方式。 第一种方式,则只能考虑怎么将slabs中的数据分批导出来。 Memcached 支持一个可选的 slabs reassign 命令,可以将一个slab内的数据项移动到其他slab。但这个命令必须在编译 memcached 时加入该特性。
最后,还是利用了第一种方法,每一次导出一批数据以后就从memcached中删除这一批数据,直到全部导出为止。 虽然这种办法很土,但是还是能够应付一次性数据迁移。 当然这是不得以而为之,明智的做法还是在一开始就不要将需要持久化的数据持久化到其他服务中,而不是只存放于memcached中。
来源:http://blog.feihoo.com/2010/04/dump_memcached.html
现在网络上主要有两种思路,一种是通过Memcached提供的stats cachedump命令导出,例如下面这些网址:
dump all keys from memcached
Dumping MemcacheD Content (Keys) with PHP
Robbin的文章
以上文章都利用这个命令导出了部分数据。但事实上,cachedump的输出会限制在 2*1024*1024=2M 字节的长度内(Memecahed source: items.c, func: do_item_cachedump),其导出的格式如下所示:
ITEM key990017 [1 b; 1270394155 s]
ITEM key990016 [1 b; 1270394155 s]
ITEM key990015 [1 b; 1270394155 s]
ITEM key990014 [1 b; 1270394155 s]
即使不计算key的长度,每一条数据至少要占掉近三十个字节,2M最多到几万项数据。对于Item数量很大的情况下,这种方法并不能导出全部数据。
下面的地址佐证了这些观点。
官方邮件列表上的解释
上面提到的文章 memcache dump and load 的读者也在评论中进行了分析
第二种思路来自 Twitter infrastructure team 的 Evan Weaver 的 peeping into memcached , 利用 linux 的 ptrace 系统调用导出memcached进程中数据,分析这些数据得到memcached的所有Key。
但是这种方式有其限制的,一方面,编译Memcached时必须编译入调试信息 (参见link); 另一方面,在分析时对内存消耗太大。我们对一个只使用了64M内存、含有76万左右数据项的Memcached进程进行分析,在完成23万左右数据项时,分析进程占用内存的达到1040M,导致虚拟机内存用满,关闭了该进程。
因为我们现在运行的memcached是不带编译符号的,所以放弃了第二种方式。 第一种方式,则只能考虑怎么将slabs中的数据分批导出来。 Memcached 支持一个可选的 slabs reassign 命令,可以将一个slab内的数据项移动到其他slab。但这个命令必须在编译 memcached 时加入该特性。
最后,还是利用了第一种方法,每一次导出一批数据以后就从memcached中删除这一批数据,直到全部导出为止。 虽然这种办法很土,但是还是能够应付一次性数据迁移。 当然这是不得以而为之,明智的做法还是在一开始就不要将需要持久化的数据持久化到其他服务中,而不是只存放于memcached中。
来源:http://blog.feihoo.com/2010/04/dump_memcached.html
在 WEB 开发中,会使用到页面锚点。HTML 页面锚点用于链接到一个页面的某一章节。W3School 中说到,创建锚点使用 <a> (锚)标签和 name 属性,但这不是创建页面锚点的唯一方法。下面简要说一下制作 HTML 页面锚点的两种方式。
我们可以利用 W3School 的在线测试工具来进行测试。打开链接后的测试代码使用的是 <a href=”#C4″> 和 <a name=”C4″>,测试没有问题。再将“ <h2> <a name=”C4″>Chapter 4 </a> </h2>”改为“ <h2 id=”C4″>Chapter 4 </h2>” 后进行测试,效果一样。
说明,制作页面锚点除了使用 锚点标签 name 属性之外,还可以使用 id 属性。锚点 <a> 标签中 href 属性的值为 # 开头加上目标的 name 或 id 的值:
<html>
<body>
<p>
<a href="#method1">页面锚点方法一</a>
</p>
<p>
<a href="#method2">页面锚点方法二</a>
</p>
<h2><a name="method1">方法一</a></h2>
<p>使用锚标签的 href 和 name 属性</p>
<h2 id="method2">方法二</h2>
<p>使用锚标签和 id 属性</p>
</body>
</html>
来源:http://magicalboy.com/html-named-anchors.html#method1
我们可以利用 W3School 的在线测试工具来进行测试。打开链接后的测试代码使用的是 <a href=”#C4″> 和 <a name=”C4″>,测试没有问题。再将“ <h2> <a name=”C4″>Chapter 4 </a> </h2>”改为“ <h2 id=”C4″>Chapter 4 </h2>” 后进行测试,效果一样。
说明,制作页面锚点除了使用 锚点标签 name 属性之外,还可以使用 id 属性。锚点 <a> 标签中 href 属性的值为 # 开头加上目标的 name 或 id 的值:
<html>
<body>
<p>
<a href="#method1">页面锚点方法一</a>
</p>
<p>
<a href="#method2">页面锚点方法二</a>
</p>
<h2><a name="method1">方法一</a></h2>
<p>使用锚标签的 href 和 name 属性</p>
<h2 id="method2">方法二</h2>
<p>使用锚标签和 id 属性</p>
</body>
</html>
来源:http://magicalboy.com/html-named-anchors.html#method1
在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能。具体用法:
以上代码是我测试的代码Ok。
来源:http://www.ljf.cn/2008/3/Item23839.html
www-authenticate是一种简单的用户身份认证技术。
很多验证都采用这种验证方式,尤其在嵌入式领域中。
优点:方便
缺点:这种认证方式在传输过程中采用的用户名密码加密方式为BASE-64,其解码过程非常简单,如果被嗅探密码几乎是透明的.
服务器收到请求后,首先会解析发送来的数据中是否包含有:
Authorization: Basic XXXX=这种格式的数据
如果没有这样的header数据
那么服务器会发送HTTP信息头WWW-Authenticate: Basic realm=""到浏览器
要求浏览器发送合法的用户名和密码到服务端,为了进一步告知浏览器,这个页面需要认证 我们最还还是接着发送一个401错误
Header("HTTP/1.0 401 Unauthorized");
用户输入用户名:admin 密码:admin后,浏览器将以下面这种格式将数据发送给服务器端:Authorization: Basic YWRtaW46YWRtaW4=
Authorization: Basic为www-authenticate认证的标准HTTP信息头
YWRtaW46YWRtaW4=是经BASE-64加密后的用户名和密码
经解密后的格式为 admin:admin
这时我们就可以用过PHP的全局变量来使用它们了
$_SERVER['PHP_AUTH_USER'];
$_SERVER['PHP_AUTH_PW'];
路由器都是这么做的
来自:http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201322384241640/
<?php
//判断用户名和密码是否相同
if(!$PHP_AUTH_USER || !$PHP_AUTH_PW){
header("WWW-Authenticate: Basic Realm=".mb_convert_encoding("你好", "GBK", "UTF-8"));
header("HTTP/1.0 401 Unauthorized");
$title = "请与管理员联系!";
//include("header.php");
//输入提示消息
echo " <br> <font color=red>请与管理员联系,获取登录的用户名和密码! </font> <br>";
//include("footer.php");
exit;
}
else{
//设置用户登录的用户名和密码!
if($PHP_AUTH_USER != "admin" && $PHP_AUTH_PW != "123"){
$title = "";
//include("header.php");
echo "Incorrect Login.";
//include("footer.php");
exit;
}
}
echo "登陆成功!";
?>
//判断用户名和密码是否相同
if(!$PHP_AUTH_USER || !$PHP_AUTH_PW){
header("WWW-Authenticate: Basic Realm=".mb_convert_encoding("你好", "GBK", "UTF-8"));
header("HTTP/1.0 401 Unauthorized");
$title = "请与管理员联系!";
//include("header.php");
//输入提示消息
echo " <br> <font color=red>请与管理员联系,获取登录的用户名和密码! </font> <br>";
//include("footer.php");
exit;
}
else{
//设置用户登录的用户名和密码!
if($PHP_AUTH_USER != "admin" && $PHP_AUTH_PW != "123"){
$title = "";
//include("header.php");
echo "Incorrect Login.";
//include("footer.php");
exit;
}
}
echo "登陆成功!";
?>
以上代码是我测试的代码Ok。
来源:http://www.ljf.cn/2008/3/Item23839.html
www-authenticate是一种简单的用户身份认证技术。
很多验证都采用这种验证方式,尤其在嵌入式领域中。
优点:方便
缺点:这种认证方式在传输过程中采用的用户名密码加密方式为BASE-64,其解码过程非常简单,如果被嗅探密码几乎是透明的.
服务器收到请求后,首先会解析发送来的数据中是否包含有:
Authorization: Basic XXXX=这种格式的数据
如果没有这样的header数据
那么服务器会发送HTTP信息头WWW-Authenticate: Basic realm=""到浏览器
要求浏览器发送合法的用户名和密码到服务端,为了进一步告知浏览器,这个页面需要认证 我们最还还是接着发送一个401错误
Header("HTTP/1.0 401 Unauthorized");
用户输入用户名:admin 密码:admin后,浏览器将以下面这种格式将数据发送给服务器端:Authorization: Basic YWRtaW46YWRtaW4=
Authorization: Basic为www-authenticate认证的标准HTTP信息头
YWRtaW46YWRtaW4=是经BASE-64加密后的用户名和密码
经解密后的格式为 admin:admin
这时我们就可以用过PHP的全局变量来使用它们了
$_SERVER['PHP_AUTH_USER'];
$_SERVER['PHP_AUTH_PW'];
路由器都是这么做的
来自:http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201322384241640/
HTTP协议状态码,调用函数时候只需要将$num赋予一个下表中的已知值就直接会返回状态了。
阅读全文
阅读全文
2011 做点什么?
眼看着越来越多的解决方案,越来越开放的技术分享,不由得让人生疑:架构是否已经不再重要?其实,构建一般中到大型的站点,已经没什么秘密技术可言(比如,还有人一度放出来"腾讯大讲堂"这样的内部信息资料,颇为戏剧性,但大家看了之后也就是新鲜几天而已,网络中更有价值的信息已经是比比皆是了)。重要的是如何用成熟的技术将产品做好,加快开发节奏,更快改进产品质量。
所以,对我自己而言,新的一年重要的还是回归基本技术,和团队一起将丁香园( http://dxy.com )的产品做好,"望着天上的星,也要看着脚下的坑",关注新东西,更要避免因为技术冒进造成不必要的人力物力浪费,说起来容易,真的做起来,怕是也没那么简单。
来源:http://www.dbanotes.net/opensource/2011_tech_review.html
眼看着越来越多的解决方案,越来越开放的技术分享,不由得让人生疑:架构是否已经不再重要?其实,构建一般中到大型的站点,已经没什么秘密技术可言(比如,还有人一度放出来"腾讯大讲堂"这样的内部信息资料,颇为戏剧性,但大家看了之后也就是新鲜几天而已,网络中更有价值的信息已经是比比皆是了)。重要的是如何用成熟的技术将产品做好,加快开发节奏,更快改进产品质量。
所以,对我自己而言,新的一年重要的还是回归基本技术,和团队一起将丁香园( http://dxy.com )的产品做好,"望着天上的星,也要看着脚下的坑",关注新东西,更要避免因为技术冒进造成不必要的人力物力浪费,说起来容易,真的做起来,怕是也没那么简单。
来源:http://www.dbanotes.net/opensource/2011_tech_review.html
curl请求默认的User-Agent会是下面的样子
curl/xxxx (xxx) libcurl/xxx
通过判断这个是能确认是不是curl过来的请求
不过如果请求时使用CURLOPT_USERAGENT设置了其它的User-Agent就没法判断了
curl/xxxx (xxx) libcurl/xxx
通过判断这个是能确认是不是curl过来的请求
不过如果请求时使用CURLOPT_USERAGENT设置了其它的User-Agent就没法判断了
至于性能方面我没怎么关注, 官方说静态的比动态的在性能方面多5%左右。From:http://www.ha97.com/2612.html
我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46
说明,因为两个版本的编译命令是有所区别的。
系统和所需软件:
Redhat9.0
apache:1.3.27 和 2.0.46
php: 4.3.2
mysql:4.0.13
1。首先来安装mysql,这不是我们的重点,所以关于mysql的安装配置我就很快过去了
tar zvxf mysql-4.0.13.tar.gz
cd mysql-4.0.13
./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql &&
make &&
make install
安装完成!
然后初始化数据库
/usr/local/mysql/bin/mysql_install_db
设置权限:
chown -R root /usr/local/mysql
复制配置文件;
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
启动mysql:
/use/local/mysql/bin/mysqld_safe --user=root &
修改密码:初始的root密码是空的
/usr/local/mysql/bin/mysqladmin -u root -p password 1234
enter password:
把密码修改为1234,由于初始密码为空,所以enter password直接回车就行
测试一下新的密码:
mysql -u root -p mysql
enter password:1234
如果顺利的话就能进入mysql。
好了mysql就讲这么多,有什么问题也不要问我,我对mysql不是很熟悉。
好了下面是我们的重头戏,我将分别通过静态和动态DSO编译apache+php
至于什么是静态,什么是DSO动态我这里就不多讲了,本人个人倾向大家用DSO动态编译。
首先是apache1.3.27+php4.3.2+mysql4.0.13的静态编译
apache第一次编译,并不要安装,因为php的编译需要apache至少已经编译过一次
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure --prefix=/usr/local/apache
编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apache=../apache_1.3.27 &&
make &&
make install
第二次编译安装apache:
cd ../apache_1.3.27
./configure --prefi=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a &&
make &&
make install
cp ../php4.3.2/php.ini.dist /usr/local/php/lib/php.ini
修改/usr/local/apache/conf/httpd.conf
查找<IfModule mod_mime.c>;
在此范围添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
注意:apache和php的源码包在同一个目录,--with-apache=../apache_1.3.27是指向源码解压的目录
ok!静态编译完成,大家只要启动一下服务器
/usr/local/apache/bin/apachectl start
然后些个php测试页info.php:内容如下
<?php
phpinfo();
?>;
正常的话,应该能看到php的信息了,恭喜你静态编译成功!!!
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
然后编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs &&
make &&
make install
然后修改httpd.conf,方法同静态编译的方法
OK,DSO动态编译就完成了,大家应该看出明堂来了吧,中间有什么区别应该看的很清楚了吧!!!
接下来我们讲apache2.0.46+php4.3.2的编译方法,我这里只讲DSO动态编译,静态编译实在没有时间测试了,
留给大家自己去试了。
一样现编译安装apache
tar zvxf httpd-2.0.46.tar.gz
cd httpd-2.0.46
./configure --prefix=/usr/local/apache2 --enable-so \
--enable-mods-shared=most &&
make &&
make install
大家注意了--enable-so相当与1.3.27的--enable-module=so,而--enable-mods-shared=most又等同与以前的
--enable-shared=max 这些区别大家要注意了,否则编译错了不要找我
然后还是编译PHP
tar zvxf php4.3.2.tar.gz
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache2/bin/apxs &&
make &&
make install
注意这里是apxs2!!!
修改httpd.conf与1.3.27也有所不同,大家寻找Add Type application/x-tar .tgz 在下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
另外要显示中文的话,
修改:
AddDefaultCharset gb2312
启动一下apache
/usr/local/apache2/bin/apachectl start
用那个info.php测试一下,应该不会有多大问题哦!!!
好了写了这么多,希望对大家有所帮助!!!
来源:http://www.chinaunix.net/jh/13/118899.html
这个哥们的动静态编译的文章还不错,转了,URL:
http://huagelinux.blog.163.com/blog/static/87337083201022535916208/
以前编译apache的时候
都是google搜索到的直接拿来用
这次自己编译mod_rewrite和ssl遇到了问题
又不知道问题出在哪里
一个是mod_rewrite模块没有起作用
一个是以ssl启动apache的时候报告如下错误:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free
后来经过查找
明白了问题出在哪里
当时我是这么编译apache的
./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
而问题就出在–enable-so
现在知道了–enable-so的意思是说
让apache 核心装载DSO,但是不实际编译任何动态模块
–enable-ModuleName的意思是说 编译并包含模块ModuleName
而 –enable-ModuleName=shared 的意思是说将这个模块编译成动态的.
明白了这几个选项的意思,感觉就水落石出了
根据上面的总结
我应该去掉–enable-so这行
如何希望动态编译模块
比如:–enable-rewrite应该替换为: –enable-rewrite=shared
最后,我将要编译的应该为:
./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
上面中 –enable-mods-shared=most的意思是说 动态的编译进来大多数的模块
而 –enable-mods-shared=all是指动态的编译所有的模块
如果把-shared去掉,就是静态的编译了…
综上所述
总结出了我个人对apache的动态与静态编译的理解
好比有两个人a和m
a代表apache,m代表module
要想让a使用m的东西
一个方法是把m的东西都放到a那里去,a使用的时候就是现成的了
就是所谓的静态编译
还有一个方法,
就是告诉a, m的住址,当a要使用m的东西的时候,a去找m,然后使用
不过,这种方法要注意的一个问题就是:m必须要有实际的住址,
否则a会找不到m而产生错误的,我此文开始提到的 apachectl startssl产生
的错误就是这个原因,应该再编译好ssl才可以的.
这种方法也就是apache 的动态(DSO)编译了
apache的动态和静态编译区别
一、含义:
动态意味着不用此模块的时候就不需要Load进来,使用的时候需要显示的Load进来;
静态意味着先把模块Load进来,想用的时候直接使用.
二、编译:
1、静态编译:
当只需要静态编译module的时候,语法应写成–enable-ssl或–enable-ssl=static。
例如:
#./configure --prefix=/usr/local/apache2 --enable-ssl[=static]
查看哪些modules被静态编译进apache里:
#/usr/local/apache2/bin/httpd -lCompiled in modules: core.c mod_ssl.c
2、动态编译:
当只需要动态编译module的时候,语法写成–enable-ssl=shared即可。
#./configure --prefix=/usr/local/apache2 --enable-ssl=shared
查看哪些modules被动态编译进apache里:
#ls -l /usr/local/apache2/modules/-rw-r--r-- 1 root root 8504 Aug 25 14:49 httpd.exp-rwxr-xr-x 1 root root 806898 Aug 7 13:57 mod_ssl.so
3、静动混合:
当既需要动态又需要动态的时候,语法写成–enable-ssl=static[动态编译] –enable-rewrite=shared[静态编译]
以下为示例:
#./configure --prefix=/usr/local/apache2 --enable-ssl=static --enable-rewite=shared
三、使用:
1、动态编译使用:
会生成相关的so文件,例如:
1)、动态加载module,在配置文件里需要加上如下语句:
LoadModule access_module /usr/local/apache2/modules/mod_ssl.so
我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46
说明,因为两个版本的编译命令是有所区别的。
系统和所需软件:
Redhat9.0
apache:1.3.27 和 2.0.46
php: 4.3.2
mysql:4.0.13
1。首先来安装mysql,这不是我们的重点,所以关于mysql的安装配置我就很快过去了
tar zvxf mysql-4.0.13.tar.gz
cd mysql-4.0.13
./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql &&
make &&
make install
安装完成!
然后初始化数据库
/usr/local/mysql/bin/mysql_install_db
设置权限:
chown -R root /usr/local/mysql
复制配置文件;
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
启动mysql:
/use/local/mysql/bin/mysqld_safe --user=root &
修改密码:初始的root密码是空的
/usr/local/mysql/bin/mysqladmin -u root -p password 1234
enter password:
把密码修改为1234,由于初始密码为空,所以enter password直接回车就行
测试一下新的密码:
mysql -u root -p mysql
enter password:1234
如果顺利的话就能进入mysql。
好了mysql就讲这么多,有什么问题也不要问我,我对mysql不是很熟悉。
好了下面是我们的重头戏,我将分别通过静态和动态DSO编译apache+php
至于什么是静态,什么是DSO动态我这里就不多讲了,本人个人倾向大家用DSO动态编译。
首先是apache1.3.27+php4.3.2+mysql4.0.13的静态编译
apache第一次编译,并不要安装,因为php的编译需要apache至少已经编译过一次
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure --prefix=/usr/local/apache
编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apache=../apache_1.3.27 &&
make &&
make install
第二次编译安装apache:
cd ../apache_1.3.27
./configure --prefi=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a &&
make &&
make install
cp ../php4.3.2/php.ini.dist /usr/local/php/lib/php.ini
修改/usr/local/apache/conf/httpd.conf
查找<IfModule mod_mime.c>;
在此范围添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
注意:apache和php的源码包在同一个目录,--with-apache=../apache_1.3.27是指向源码解压的目录
ok!静态编译完成,大家只要启动一下服务器
/usr/local/apache/bin/apachectl start
然后些个php测试页info.php:内容如下
<?php
phpinfo();
?>;
正常的话,应该能看到php的信息了,恭喜你静态编译成功!!!
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
然后编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs &&
make &&
make install
然后修改httpd.conf,方法同静态编译的方法
OK,DSO动态编译就完成了,大家应该看出明堂来了吧,中间有什么区别应该看的很清楚了吧!!!
接下来我们讲apache2.0.46+php4.3.2的编译方法,我这里只讲DSO动态编译,静态编译实在没有时间测试了,
留给大家自己去试了。
一样现编译安装apache
tar zvxf httpd-2.0.46.tar.gz
cd httpd-2.0.46
./configure --prefix=/usr/local/apache2 --enable-so \
--enable-mods-shared=most &&
make &&
make install
大家注意了--enable-so相当与1.3.27的--enable-module=so,而--enable-mods-shared=most又等同与以前的
--enable-shared=max 这些区别大家要注意了,否则编译错了不要找我
然后还是编译PHP
tar zvxf php4.3.2.tar.gz
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache2/bin/apxs &&
make &&
make install
注意这里是apxs2!!!
修改httpd.conf与1.3.27也有所不同,大家寻找Add Type application/x-tar .tgz 在下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
另外要显示中文的话,
修改:
AddDefaultCharset gb2312
启动一下apache
/usr/local/apache2/bin/apachectl start
用那个info.php测试一下,应该不会有多大问题哦!!!
好了写了这么多,希望对大家有所帮助!!!
来源:http://www.chinaunix.net/jh/13/118899.html
这个哥们的动静态编译的文章还不错,转了,URL:
http://huagelinux.blog.163.com/blog/static/87337083201022535916208/
以前编译apache的时候
都是google搜索到的直接拿来用
这次自己编译mod_rewrite和ssl遇到了问题
又不知道问题出在哪里
一个是mod_rewrite模块没有起作用
一个是以ssl启动apache的时候报告如下错误:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free
后来经过查找
明白了问题出在哪里
当时我是这么编译apache的
./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
而问题就出在–enable-so
现在知道了–enable-so的意思是说
让apache 核心装载DSO,但是不实际编译任何动态模块
–enable-ModuleName的意思是说 编译并包含模块ModuleName
而 –enable-ModuleName=shared 的意思是说将这个模块编译成动态的.
明白了这几个选项的意思,感觉就水落石出了
根据上面的总结
我应该去掉–enable-so这行
如何希望动态编译模块
比如:–enable-rewrite应该替换为: –enable-rewrite=shared
最后,我将要编译的应该为:
./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
上面中 –enable-mods-shared=most的意思是说 动态的编译进来大多数的模块
而 –enable-mods-shared=all是指动态的编译所有的模块
如果把-shared去掉,就是静态的编译了…
综上所述
总结出了我个人对apache的动态与静态编译的理解
好比有两个人a和m
a代表apache,m代表module
要想让a使用m的东西
一个方法是把m的东西都放到a那里去,a使用的时候就是现成的了
就是所谓的静态编译
还有一个方法,
就是告诉a, m的住址,当a要使用m的东西的时候,a去找m,然后使用
不过,这种方法要注意的一个问题就是:m必须要有实际的住址,
否则a会找不到m而产生错误的,我此文开始提到的 apachectl startssl产生
的错误就是这个原因,应该再编译好ssl才可以的.
这种方法也就是apache 的动态(DSO)编译了
apache的动态和静态编译区别
一、含义:
动态意味着不用此模块的时候就不需要Load进来,使用的时候需要显示的Load进来;
静态意味着先把模块Load进来,想用的时候直接使用.
二、编译:
1、静态编译:
当只需要静态编译module的时候,语法应写成–enable-ssl或–enable-ssl=static。
例如:
#./configure --prefix=/usr/local/apache2 --enable-ssl[=static]
查看哪些modules被静态编译进apache里:
#/usr/local/apache2/bin/httpd -lCompiled in modules: core.c mod_ssl.c
2、动态编译:
当只需要动态编译module的时候,语法写成–enable-ssl=shared即可。
#./configure --prefix=/usr/local/apache2 --enable-ssl=shared
查看哪些modules被动态编译进apache里:
#ls -l /usr/local/apache2/modules/-rw-r--r-- 1 root root 8504 Aug 25 14:49 httpd.exp-rwxr-xr-x 1 root root 806898 Aug 7 13:57 mod_ssl.so
3、静动混合:
当既需要动态又需要动态的时候,语法写成–enable-ssl=static[动态编译] –enable-rewrite=shared[静态编译]
以下为示例:
#./configure --prefix=/usr/local/apache2 --enable-ssl=static --enable-rewite=shared
三、使用:
1、动态编译使用:
会生成相关的so文件,例如:
1)、动态加载module,在配置文件里需要加上如下语句:
LoadModule access_module /usr/local/apache2/modules/mod_ssl.so
当一家公司发展到一定规模的时候,可能就不如初创时那么有朝气了,初创时,没有包袱,轻装前进,高标准,严要求。而江山渐渐坐稳,"创新"渐渐就会成为一个熟悉而陌生的词汇。
如果整天喊着创新而实际上产品没有任何新意的时候,应该注意一下是否那些管理人员在其中起着阻碍者的作用。所谓创新,如果不能充分调动基层员工的积极性,那是不可能做到的事情,而无意识的妨碍基层员工进行创新,更多是出于管理者自身本位主义的考虑,管理者们应该知道"不破不立"的道理,但是"破"对他们来说,风险太大,远不如原地踏步,或是拿来主义,这样才稳妥,这样最不济犯错也是别人先犯。这个时候,很难去对他们奢求"用户第一"的自我要求。
回过头来,如果产品自身千疮百孔,被用户整天批得体无完肤。与其开发一些未必靠谱的产品,还不如埋下头来把当下的问题搞定。创新要在一定基础之上,缺乏叫座的产品做铺垫,所谓的"创新"只是空中楼阁。
创新还是撞墙,这是个问题。
--EOF--
http://www.dbanotes.net/review/innovation.html
如果整天喊着创新而实际上产品没有任何新意的时候,应该注意一下是否那些管理人员在其中起着阻碍者的作用。所谓创新,如果不能充分调动基层员工的积极性,那是不可能做到的事情,而无意识的妨碍基层员工进行创新,更多是出于管理者自身本位主义的考虑,管理者们应该知道"不破不立"的道理,但是"破"对他们来说,风险太大,远不如原地踏步,或是拿来主义,这样才稳妥,这样最不济犯错也是别人先犯。这个时候,很难去对他们奢求"用户第一"的自我要求。
回过头来,如果产品自身千疮百孔,被用户整天批得体无完肤。与其开发一些未必靠谱的产品,还不如埋下头来把当下的问题搞定。创新要在一定基础之上,缺乏叫座的产品做铺垫,所谓的"创新"只是空中楼阁。
创新还是撞墙,这是个问题。
--EOF--
http://www.dbanotes.net/review/innovation.html
tempnam — 建立一个具有唯一文件名的文件
说明
string tempnam ( string $dir , string $prefix )
在指定目录中建立一个具有唯一文件名的文件。如果该目录不存在,tempnam() 会在系统临时目录中生成一个文件,并返回其文件名。
简单Demo:
阅读全文
说明
string tempnam ( string $dir , string $prefix )
在指定目录中建立一个具有唯一文件名的文件。如果该目录不存在,tempnam() 会在系统临时目录中生成一个文件,并返回其文件名。
简单Demo:
<?php
$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle, "writing to tempfile");
fclose($handle);
// do here something
unlink($tmpfname);
?>
$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle, "writing to tempfile");
fclose($handle);
// do here something
unlink($tmpfname);
?>
阅读全文
http://www.coreseek.cn/products-install/mysql5-5-sphinxse/
Sphinx 1.10 实时索引实现——sphinx新特性体验:
http://www.sphinxsearch.org/archives/260
Sphinx 1.10 实时索引实现——sphinx新特性体验:
http://www.sphinxsearch.org/archives/260
在命令提示符里输入:mspaint。大小写皆可。