日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | ||||||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
| 26 | 27 | 28 | 29 | 30 | 31 | ||||
搜索标题
-
MySQL Replace INTO的使用
2008-04-15 10:45:01
出处:http://www.ccvita.com/index.php/206.html
10-08
今天DST里面有个插件作者问我关于Replace INTO和INSERT INTO的区别,我和他说晚上上我的blog看吧,那时候还在忙,现在从MYSQL手册里找了点东西,MYSQL手册里说REPLACE INTO说的还是比较详细的.
REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。请参见13.2.4节,“INSERT语法”。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
所有列的值均取自在REPLACE语句中被指定的值。所有缺失的列被设置为各自的默认值,这和INSERT一样。您不能从当前行中引用值,也不能在 新行中使用值。如果您使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。
为了能够使用REPLACE,您必须同时拥有表的INSERT和DELETE权限。
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插 入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧 行的值,则有可能是一个单一行替换了多个旧行。
受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或更大(替换)。
如果您正在使用C API,则可以使用mysql_affected_rows()函数获得受影响的行数。
目前,您不能在一个子查询中,向一个表中更换,同时从同一个表中选择。
以下是所用算法的更详细的说明(该算法也用于LOAD DATA…REPLACE):
1. 尝试把新行插入到表中
2. 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:
a. 从表中删除含有重复关键字值的冲突行
b. 再次尝试把新行插入到表中
今天喉咙疼死我了,闪人睡觉去.
使用格式:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
VALUES ({expr | DEFAULT},…),(…),…
或:REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, …
或:REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
SELECT … -
对人友好?机器友好?
2008-04-15 04:23:03
大凡谈到PHP项目的软件优化时,很多作出的答案是:过程式编程,取消MVC和ORM,策略缓冲(网页静态化),内存表,算法优化,代码优化,数据结构优化,启用新技术,消除过度设计。。。
当然还有使用定时任务(计划任务),启用蜘蛛和爬虫来辅助数据采集、整理,建立索引等方法。
这些做法的一个核心,就是以系统为中心,说白了,就是对机器友好,除了基本功能的实现方法优化外,采用用空间换时间的方法,让你需要数据的时候,不需要后台跑运算,取过来就完事,关键词:取的巧,取的快,取的多,取的合理。为了达到这样的目的,衍生出许多学科来为实现算法做理论基础。
而这样做的最终目的,是对人友好,也就是提升使用者对大流量系统的使用满意度。既达到目的,又赏心悦目。
因此做优化工作,往往是计算机专业的研究生出身比较理想。很多公司招技术总监,需要研究生毕业,也就是这个道理。
不过有一个问题:往往在实现优化技术的环节中,忽略了对人友好这一环节,举个例子:好多对大流量支持得很好的系统,在代码结构和可读性方面,就让人望而生畏。
极端的例子是汇编,对机器99%的友好,对人友好只有1%,而把汇编再编译二进制代码,那就完全是对机器100%友好,对人100%不友好了。
IT业最重要的目标之一是对人友好,但一步就让人用二进制代码表示创意和思想实在“残忍”,在使用LAMP技术开发WEB2.0网站时,在需求分析阶段,技术对创意索缚得越少,对人友好的元素也会越多,一个系统的好坏,实际上就是三点,一是在设计和实现时被砍掉的好的元素的比例。二是没有砍掉部分的实现方法最佳化程度。三是扩容时对结构合理性的保证程度。
对人和对机器都友好的成功实例,是搜索引挚。对机器友好,我们人类没有体会,但是可以从结果推出搜索引挚一定对机器友好,因为无论是信息的时效性和完整性都做得如此出色,自动化程度是如此的高。
总结:
机器友好:指把世界装入机器的能力指数;
对人友好:轻轻一点,得到的是整个世界。
-
实现各种编码之间的转换
2008-04-14 20:50:56
在我的电脑上,用file_put_contents()保存一个文件,默认的格式是GB18030,数据库是UTF8的,因此从这个文件读出的信息保存到表里,英文没有关系,中文却无法显示。
先是用utf8_encode,无法奏效,因为这个函数是把ISO-8859-1编码转换成UTF8的,后来找到一个iconv()函数,功能倒是多多了,可以在许多格式中转来转去,比如要把GB18030转换成UTF8,可以这样用:
iconv("GB18030", "UTF-8", $string);
-
错位
2008-04-13 13:25:51
大家都知道,艺术是感性的,科学是理性的,艺术要求你天马行空,不守常规,而科学往往需要严谨的作风,来不得半点演绎和编造。
这样的一种常识能造就规规矩矩的职业人,但是扼杀了不少天才。
往往天才都在极高和极低中跳跃,只要他还是个天才,由于自己没有慧眼或一生没有遇到伯乐,不少天才往往坠落成职业人,他有一个异度空间,但是终生没有找到找开这个异度空间的钥匙。
于是会有天才在贫困撩倒中死去,他的价值也许要过几百年才能被后人所体会,但这是幸运儿,也许其中的大部分,即使后人,也无法察觉。
也因此,对天才的定义,在于:“你是不是一个在活着的时候能打开异度空间的人”,是,就是天才,不是,做个知足常乐的老百姓吧!不要管你有多少个异度空间,打不开,白搭。
但是错位,这个比较有趣的现象,却是打开异度空间的钥匙,如果你能实现错位,而且错位得很有创造力,或许会发现身上其实充满了能量,而在以前,却无法察觉。
错位,其实是一种创造力。它会让你在你的位置上,做出这个位置上的人绝对不会做出的事情。
错位,不是发疯,不是对资源的浪费,对社会的破坏,而是因为出人意料的想法和做法,以超越常规数个数量级的能量,为社会创造巨大的福祉。
错一点点小位,别人会叫他全才,位错大了,就是大泰斗,创造历史的人。
世界是由错位的人领导着的,循规蹈矩的,就只配做他的臣民。
或者说错位的人创造规则,其他人使用规则。
-
一日数悟和成长加速度
2008-04-12 19:56:31
自从进了现在的公司后,每天都有所悟,一日常有数悟。
这也许是一种缘份,会让我在这里,有一番作为!
-
这次我是不是真的长了?
2008-04-12 19:48:56
我一直是ZF这边风景独好的理派,是因为我拿了API和手册学ZF很久了,一直不得门而入。因此当然是理论派了。
PHP框架中,我独尊ZF和SYMFONY,但我只能选一样来学,看着ZF开发过程中的那天,那地,那云,那一片色彩,就选了ZF,一尝,却不是那味,有点想不通。
再想不通,决定要学的事,是不能放弃的,于是在黑暗中探索真理,偶然也会有星星从暗的边缘露出少许星光,但是路却又在数秒后被暗吞没。白昼,只在我无尽的向往和思念中抬头。
一个人只要下定了决心,不放弃,白昼总是要来来临的。正在感叹PHP6正式版马上要放出,PHP5的阳光还刚照在大地一角,眼看又要放PHP6所掩盖时,那一刹那,感到心里有一样东西,在胸口涌了那么一下。
于是,我想到了学习ZF的几大元素:
元素一:API,结果:无用;
元素二:手册,结果:无用;
元素三:原版电子书,结果:无用;
元素四:QQ群,结果:无用;
元素五:经典项目源代码,结果:无用;
元素六:ZF源代码,结果:·#¥……——¥%#¥·……***—(%¥#
元素六是我的贵人,我从开始看的那一刹那,就有一种强烈的预感,这,就是我的突破口。因为我看着,觉得那么亲切,那么自然,那么有感觉。这种感觉,形象地比喻,就是如果对方是个女孩,是会追上做老婆的那种。
但愿,能早点追上,这是个时间问题,我肯定。
-
扎扎实实的三年代码生活
2008-04-12 17:45:34
早些天,看到客齐集的PHP程序员招聘启事,不管年龄也不管学历,要的是三年扎扎实实的写代码经验,这一要求,不可能是HR凭空想出来的,一定是在不停的招聘过程中,摸索出来的。比起那些动则“精通”的招聘启事,技术含量要高得多。
如果一个人写了三年代码,到了三年零一天的时候,对自己所做的工作,还很有成就感的话,他应该可以做一个架构师了。
因为扎扎实实地写过三年的话,那些纸上有的,书里讲过的,论坛里热议的,别人源代码里包含的,应该都不在话下了,三年中,他会时时地为当前的一些问题所挑战着,然后用尽一切办法去解决,凡是别人那里找得到答案的,相信他也找到了,只有一些找不到答案,需要他自己去解决的,需要的时间会长一些,难度高一些,虽然在开源社区中,这样的可能性比例不大,但,总是有的。
通过这三年,他的视野由窄变宽,一个好的程序员需要的素质,都已磨炼得差不多了,刚好意气奋发,要出成绩了,碰到客齐集这样的伯乐来发邀约,合作的可能性是很大的。
因此三年是一关,一些无名的企业,在自己花了三年时间把一个程序员培养到越来越好用时,就有那些名企,来摘桃子。这些培养人的企业真是挤的是奶,吃得是草,有老黄牛的精神,又好比辛辛苦苦地种树,到树长到成才了,却叫人给砍了去。
这种现象的后果当然也很严重,对于软件这样的行业,当然的人才的含金量越高,造就企业辉煌的可能性也就越大,当人才还未成年时,贡献有限,人才过气后,作用也不大,当打之年才是宝贝。你老是用不到好的人才,企业就做不大,也就没有大场面,如果还没有好的氛围和企业文件,自然有好多人动离开的念头。
剖析员工羽毛刚丰时拨腿想飞的心态,无非有那么几种:
1 薪金;绝对不讲待遇的员工是不存在的,但也不是首位的,把它放在第一个讲是因为这个因素比例较高。
2 更宽广的舞台;人都有事业心,当曾经的挑战都成过往烟云时,有进取心的人自然会寻找更高的境界,当现有公司不能给出其所要求的机会时,自然会萌出去意。因此公司的领导要有大雄心,每天除了日常的业务外,要有开创大场面的举动,随时要准备打世界大战,以战代练,让员工在炮火中成长。
3 更人性化的,更有吸引力的企业文化。近代的中国被“洋大人”打怕了,所以对西方世界的人有敬畏感,有人说中国人崇洋媚外,其实只说对了一半,我想没有国人会去崇媚墨西哥人,菲律宾人,虽然他们也是外国人,国人崇媚的,是曾经把我们打得头破血流的西方强国的人。所以,人所崇媚的,一般都是强权,财富,先进,这也无可厚非,如果有一天,中国成了世界强国,一定也会有人崇媚我们。道理都是一样的,跟性别,年龄,肤色,宗教信仰无关。
4 更多的发展机会和培训机会,这就是“人往高处走”的含义。而且这也给了一般企业一个机会:你可以把外企培养出来的高手中的高手再请回来啊,用得好一定是对提升公司有数量级的帮助的。
还有一种情况,就是一般企业向优秀企业跳跃的模式,乌鸡变凤凰,这就要求企业要有凤凰的格,要有凤凰头,这对现下有些企业的老板,要求是高了点,于是难免会在二三流的高度,横着走完一生,曾至高开低走!
-
把多维数组转化成一维数组的函数
2008-04-10 18:01:10
<?php
function array_multi2single($array)
{
static $result_array=array();
foreach($array as $value)
{
if(is_array($value))
{
array_multi2single($value);
}
else
$result_array[]=$value;
}
return $result_array;
}
-
[精华] Perl 中的正则表达式
2008-04-09 10:53:56
原文出自:
http://263.aka.org.cn/Lectures/002/Lecture-2.1.2/perl-reg.html
感谢AKA及作者。
9 Perl 中的正则表达式
正则表达式的三种形式
正则表达式中的常用模式
正则表达式的 8 大原则
正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。
--------------------------------------------------------------------------------
9.1 正则表达式的三种形式
首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:
匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
替换:s/<pattern>;/<replacement>;/
转化:tr/<pattern>;/<replacemnt>;/
这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn't),并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:
$str = "I love Perl";
$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。
另外还有:
foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中,并对 $_ 进行替换处理。
while (<FILE>;) { print if (m/error/); } # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。
Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:
$string = "I love perl";
$string =~ s/(love)/<$1>;/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love>; perl"
$string = "i love perl";
$string =~ s/(i)(.*)(perl)/<$3>;$2<$1>;/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl>; love <i>;"
替换操作 s/<pattern>;/<replacement>;/ 还可以在末尾加上 e 或 g 参数,他们的含义分别为:
s/<pattern>;/<replacement>;/g 表示把待处理字符串中所有符合 <pattern>; 的模式全部替换为 <replacement>; 字符串,而不是只替换第一个出现的模式。
s/<pattern>;/<replacement>;/e 表示将把 <replacemnet>; 部分当作一个运算符,这个参数用的不多。
比如下面的例子:
$string = "i:love:perl";
$string =~ s/:/*/; #此时 $string="i*love:perl";
$string = "i:love:perl";
$string =~ s/:/*/g; #此时 $string="i*love*perl";
$string =~ tr/*/ /; #此时 $string="i love perl";
$string = "www22cgi44";
$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 "www44cgi88"。
下面给出一个完整的例子:
#!/usr/bin/perl
print"请输入一个字符串!\n";
$string = <STDIN>;; # <STIDN>;代表标准输入,会让使用者输入一字符串
chop($string); # 将$string最后一个换行的字符\n删除掉
if($string =~ /perl/){
print("输入的字符串中有 perl 这个字符串!\n";
}
如果输入的字符串含有 perl 这个字符串的话,就会显示后面的提示信息。
9.2 正则表达式中的常用模式
下面是正则表达式中的一些常用模式。
/pattern/ 结果
. 匹配除换行符以外的所有字符
x? 匹配 0 次或一次 x 字符串
x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.* 匹配 0 次或一次的任何字符
.+ 匹配 1 次或多次的任何字符
{m} 匹配刚好是 m 个 的指定字符串
{m,n} 匹配在 m个 以上 n个 以下 的指定字符串
{m,} 匹配 m个 以上 的指定字符串
[] 匹配符合 [] 内的字符
[^] 匹配不符合 [] 内的字符
[0-9] 匹配所有数字字符
[a-z] 匹配所有小写字母字符
[^0-9] 匹配所有非数字字符
[^a-z] 匹配所有非小写字母字符
^ 匹配字符开头的字符
$ 匹配字符结尾的字符
\d 匹配一个数字的字符,和 [0-9] 语法一样
\d+ 匹配多个数字字符串,和 [0-9]+ 语法一样
\D 非数字,其他同 \d
\D+ 非数字,其他同 \d+
\w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
\w+ 和 [a-zA-Z0-9]+ 语法一样
\W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
\W+ 和 [^a-zA-Z0-9]+ 语法一样
\s 空格,和 [\n\t\r\f] 语法一样
\s+ 和 [\n\t\r\f]+ 一样
\S 非空格,和 [^\n\t\r\f] 语法一样
\S+ 和 [^\n\t\r\f]+ 语法一样
\b 匹配以英文字母,数字为边界的字符串
\B 匹配不以英文字母,数值为边界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
abc 匹配含有 abc 的字符串
(pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去。
/pattern/i i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。
\ 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 \ 符号,这样才会让特殊字符失效
下面给出一些例子:
范例 说明
/perl/ 找到含有 perl 的字符串
/^perl/ 找到开头是 perl 的字符串
/perl$/ 找到结尾是 perl 的字符串
/c|g|i/ 找到含有 c 或 g 或 i 的字符串
/cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串
/cg{2,}i/ 找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串
/cg{2}i/ 找到 c 后面跟着 2个 g,再跟着 i 的字符串
/cg*i/ 找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i/
/cg+i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/
/cg?i/ 找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/
/c.i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串
/c..i/ 找到 c 后面跟着二个任意字符,再跟着 i 的字符串
/[cgi]/ 找到符合有这三个字符任意一个的字符串
/[^cgi]/ 找到没有这三个字符中任意一个的字符串
/\d/ 找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串
/\D/ 找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的字符串
/\*/ 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 \ 符号,这样才会让这个特殊字符失效
/abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写
9.3 正则表达式的八大原则
如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。
正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。
正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则:
· 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。
· 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。
· 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = 'string 2')。
· 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = " s" )。
· 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。
· 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/\w+/ 匹配一个或多个单词字符;$a =~ m/\d/" 匹配零个或多个数字。
· 原则7:如果欲匹配不止一个字符集合,Perl使用 "|" 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。
· 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)
想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。 -
泛域名解析配置方法
2008-04-08 11:20:22
nosoft 2006-1-9 18:31
如何为用户提供2级域名服务.
网站本域为example.com,向用户提供username.example.com的个人页访问服务
步骤如下:
1.配置一条默认DNS规则*.example.com --> example.com
2.配置apache conf,在example的VHost加入一条规则ServerAlias *.example.com
3.程序中访问 $_SERVER['HTTP_HOST'] 来获取当前域名
比如nosoft.example.com -
什么是泛域名解析?
2008-04-08 10:56:24
-
[转自Blogbeta]深度观察多用户论坛托管站点
2008-04-07 21:30:39
本月两大重量级论坛程序提供商phpwind与discuz相继发布自己的论坛托管服务:uu1001.com 与 5d6d.com 。此类服务并不新鲜,但本月上线的两个站点在2006年互联网环境向社区建设回归的大背景下自有其历史意义。解决海量数据存储与承载巨大流量在今天已不是 大问题,discuz与phpwind旗下这两个站点在将来担负着创造新的利润增长点的重要任务。相比于单纯为社区建设提供软件解决方案与后继技术支持, 在普遍开源的今天,同站长合作,依托分类信息广告发布与站点托管的前景显得更为美妙。可以想象,一个重量级论坛托管商的巨大流量,必定催生一个巨大的在线广告平台。
然 而对于选择类似服务的建站者,在享受免费托管,不再担心空间,流量与安全的同时,服务背后的风险同样是显而易见。首先,在目前站长不享有对论坛数据的控 制权,无法导入导出。论坛的核心掌握在托管方手中;其次,这样的服务高度缺乏可定制性,大到模版风格设定,小到广告投放频次,全都无法自行设定;第三,站 点无法维持稳定的流量,因为风格趋同性质相近的众多同域站点随时都会分流来之不易的人气,如果不依靠升级解决域名捆绑问题的话。
最为重要的问题,来自这一类站点建立与经营的哲学。 我们 承认wiki托管是有价值的,blog托管的意义也毋庸置疑。如果借用数据结构的思想来认识程序本身,我们来考察信息在这些不同应用中的组织,流动与增 殖:wiki作为有效的非线性知识管理,在结构与内容上是自洽的,它的意义在数据被写入的瞬间就得以确立,wiki托管是在真正的存档信息,这就是它的价 值。所谓多人共创的结构其实并不是它发现价值的过程,那是信息消除噪音自我适应的一种实现手段。wiki的价值,仅在于在一个非稳定的结构中动态地展现信息;blog更进一步,理想的blog需要交互,但是究其本身,核心的语义还是按照时序有组织地展现信息。 那么我们来看论坛的实质,它真切地要求交互,一个独语的论坛是不可想象的,那么对于最终用户而言,他可以欣然接受一个新的blogger开始订阅,可以注 册一个全新的wiki进行知识管理,但是具体到一个信息交换的论坛站点,进入的阻力被放大了几个数量级。仅就交流信息而言,他可以轻而易举地在众多的大型 论坛上完成想要的一切。在这个意义上,论坛要想成功,依靠综合的思路在今天那是完全和绝对的错误。但有两条路还没有堵死,一是成为淘金时代的卖水人,不管 是提供知识资源还是具体提供论坛托管;第二是走专业化道路垂直地发展,依托独有资源优质内容实现关键性跨越。如果缺乏重要的资源支持,离开上述这两条路的 社区建设都将是希望渺茫。而在事实上,目前托管服务前景也不甚明朗,5d6d上线一周,所谓暴涨的注册换来目前3000多个用户,包括了众多重复的id抢 劫者,在uu1001之类三脚猫域名了无新意的前提下,将来来自用户的持续内容提供显得动力不足,流量背后的实际商业价值也会打上问号。还是那句话:托管 论坛集群,和托管其他web应用,提供论坛解决方案,执行思路是完全不同的。百度贴吧为什么成功?它有允许自我创立信息簇的机制,同时在总体上把握着信息交互的规模与方向,这最重要的结果在于有效降低了同一域内信息的低水平重复,平抑了众多噪音。而我们可以设想,在5d6d与uu1001这样的站点上,所谓的热点,焦点,将在众多子域内不可避免地杂乱复现,这将在总体上悲剧性地降低站点内部信息交换的有效性。
如何在托管服务里有效避免上述问题? http://bbs.cn.com 无意品评同类服务领域各大站点现行的策略,只举相近领域现成站点的例子:如果你到blog-city.com 托管自己的博客,注册到好id的几率比其他站点好上百倍。因为这个站点定期清洗淘汰非活跃id,确保站内页面与链接的质量,以此在内容上把关。同时它提供多域名选择,分流敏感与有争议的内容发布,降低运营风险;第二个例子,中国优秀的cgi论坛程序ccb,可以平行设立无限分区,其极限仅仅来自linux下文件数目极限。但在开设新区时,站点表现出一种吝啬的管理机制;类似的例子还有很多。有的时候,是google的理念害了我们,它的一大信条教导我们站长:信息一经写入就不予修改,更不用说删除。必须承认这是确保数据结构稳定的有效手段,但是对于对公的信息发布,交换,归档,众多的无效链接/低活力站点构成了无比生厌的噪音。如果你用TOP100的热门关键词调查不同服务众多托管商的子域,多数情况下你看到的只是毫无价值的虚空。 -
[转]看5d6d和Uu1001之争
2008-04-07 21:16:40
0转自51.la
5d6d 和uu1001分别是 discuz和phpwind几乎同时推出的产品。我记得在他们刚推出产品之时,一大群国内的论坛用户惊呼“狼来了”。确实是,国内两大社区软软件提供商 无疑是discuz和phpwind。动网一统天下的日子早已经一去不复返,虽然动网的残留势力仍旧能在短时期内撑起一片天,但颓败的势头一发不可阻挡, 明日黄花已经是众人皆认的事情。在这里就不多引言了。两大巨头同时瞄准免费论坛这块肥肉,无疑在一定程度上引发了国内论坛市场的极度恐慌。但冷眼观两虎之 争,我们仍然能看到不少有价值的东西。
咱们先来说说discuz和phpwind目前的一些情况。
这段时间里宣传攻势很猛的discuz确实吸引了不少人的目光,而且他们拿了风险投资的钱,听说小戴还为此白手送给了周鸿袆30%的股份,是否真实不得而知了。正所谓无风不起浪,说开了去,discuz粘上了周鸿袆这个人,以后的日子将有点难过。
Phpwind 在discuz宣布开源之前,一直保持了很强势的发展姿态,特别是其优秀的负载处理能力和页面访问速度,得到了众多用户的肯定,估计这也是迫使 discuz开源的重要原因之一。discuz开源之后便拿了风险投资,之后进行疯狂的市场推广、宣传等活动,一定程度上抢占了不少市场,在高端用户上也 建立了一定的蝴蝶效应。Phpwind则在这段时间以来显得有点沉闷,除了一场浙江理工大学的讲座之外,鲜少见到phpwind活跃在其他媒体或活动中。 倒是phpwind.net站内的活动搞得如火如荼。虽然这样的活动活跃了现有用户,并刺激了现有用户的黏性,但在如何开拓更多用户层面,phpwind 还需要走更多的道路。
较为让人感兴趣的是,discuz的市场策略似乎太过于急进了,他们有想一口把目前市场上的竞争对手都吃掉的意图。 从phpwind官方论坛上观察到的,如邀请pphwind官方论坛的版主参观discuz,甚至于直接用金钱到phpwind官方论坛去挖抢插件制作者 和风格制作者等等,这样的竞争手段于一个具有较高知名度的互联网公司而言是极不符合其身份的,但行为处事颇有周鸿袆的作风,也可以理解了。题外话,我们回 到主题上来。
在11月份,discuz和phpwind分别推出了多用户论坛系统5d6d和uu1001,两家公司能够如此拥有相似的 敏捷触觉,真让人感到吃惊。但不能否认的是,两家同时瞄准了多用户论坛市场,的确说明了国内论坛市场竞争的激烈,只有想方设法抢占市场才能获得更多生存的 空间。而5d6d和uu1001出生的日期如此的相似,就已经注定他们之间必然的龙虎之斗将非常精彩。
一、 盈利
任 何一个项目的开发和运营,都不可避免的产生盈利方式的考虑。从两个网站目前的运作上来看,基本上是采取增值服务来获得盈利目的,我们可以观察一下他们的 alexa排名走向,可以看出两个网站的发展都是非常迅速的,其依靠增值服务实现盈利也应该是较为理性和合理的方式。从目前市场上存有的多用户论坛托管运 营商的盈利方式来看,他们可能采取的增值服务将主要集中在广告投放,风格、插件的购买,以及域名绑定和数据导入、导出等方面。
再来看一下 他们所列出的业务,基本上是一些相似度很高的增值服务,如域名绑定、数据备份、风格购买、插件购买等。5d6d这段时间还打出了“绑定域名不花钱”的广 告,但只要稍微细心一点的用户都能发现这其实是一个骗局,打开他们的控制面板,点击域名绑定服务,仍然可以很清晰的看到每月10个金币的提示字样。其他服 务也一样,都需要花费一定的金币才能获得服务支持。由此看来,5d6d的宣传有点华而不实,带有一定的欺骗性质。
Uu1001早再前几个 星期就已经推出了“U豆计划”,但目前也只是一个计划,还没有看到实质性的东西。从计划上来看,提供的服务基本上雷同于5d6d现有的服务,但在U豆的充 值方式上则比5d6d提供了更多的通道,一定程度上方便了不少用户。具体的增值内容则还需要继续观察。
二、系统架构
5d6d和uu1001分别采用了最为流行的discuz和phpwind两个优秀国产软件的最新版本。可以说,在功能和系统负载上来说,更有千秋,也各具竞争力。但在一些小细节方面,仍然有一些可以区别的地方。
5d6d采用的是通行证的方式。据其官方网站的介绍是:
通行证是用户在“我的领地”的“身份证”,申请了“我的领地”通行证后,您就成为“我的领地”大家庭的一员了,它可以实现您“一 次登录,畅游领地”的梦想,能使您充分的享受我的领地为您提供的各种服务。真所谓“一证在手,领地任我行”。
在 一定程度上而言,这种方式确实方便了很多用户,只要注册一个帐号便可以通行无阻的游览5d6d上的任何一个论坛。但同时从其他角度思考,则对一个论坛的发 展,以及论坛会员对论坛的忠诚度而言,都是有较大影响的。另外,采取通行证之后,用户登陆和注册都需要链接到5d6d的专有页面,这让众多用户感觉“不是 一个独立的论坛”,一定程度上影响了5d6d的发展。相比之下,uu1001的模式则显得相对的独立,各个论坛之间基本上不会受到干扰,容易保持论坛会员 的忠诚和稳定。但在一定程序上,则对用户造成了一定的不方便性。可以说,5d6d和uu1001两者采取的论坛管理模式,各自具备各自的优缺点,是好是 坏,最终还需要取决于用户的选择。
三、 官方交流论坛
任何一个项目的运作,必不可少的涉及到人。只要有人存在的地方,就必不可少的涉及到对人的评价。5d6d和uu1001也一样,各自的项目有各自的人员在进行各自的运作,我们可以参照一下他们参与管理的人员来获取一些信息,从而分析出一些端倪。
从5d6d 目前广为流传的团队集体照片上来看,参与5d6d建设的都是清一色男性。照片上虽然都显得虎虎生威,但总觉得缺少一点什么。Uu1001则保持了 phpwind一贯的神秘色彩,能从他们官方交流论坛或者其他渠道获取他们的信息量是少之又少。观察他们的官方交流论坛,其ID“我要喝蒙牛~”应该是一 位女性。正所谓男女搭配,干活不累,我个人还是较喜欢uu1001这点的(纯属个人意见,莫怪莫怪),从目前他们各自的官方论坛活跃程度就可以看出一些明 显的差距。Uu1001明显把5d6d拉在了后面,5d6d还需要更多的努力。
5d6d参与官方交流论坛管理的ID目前主要有“蓝色旋 风”、“囤囵”、“土豆”,我比较看好“蓝色旋风”与会员的沟通能力,但听闻是从phpwind上被挖过去的。不管怎样,“蓝色旋风”出现之后对于 5d6d官方交流论坛气氛的活跃还是起到了很大的作用的,但稍微可惜的是5d6d的版面设置不太人性话,缺少一种互动的氛围。值得肯定的是,5d6d的一 些帮助教程和新手引导还是做的很不错的,让人进入论坛之后没有找不到北的感觉。 5d6d官方交流论坛整体感觉:严肃、大方;
Uu1001 参与官方交流论坛管理的ID目前主要有破帽遮颜、我要喝猛牛~,破帽遮颜这段时间出现的机率比较小,可以看出论坛的主要管理者还是“我要喝猛牛~”。较为 让人看好的是,管理员能主动“走下神坛”,参与到论坛的气氛建设上去,很好的带动起了论坛气氛,但需要注意的是,这样较容易引起一些管理上的问题,带来不 必要的麻烦。Uu1001保持了phpwind一向的快速反应能力,对用户的问题基本上能够及时的解答,并能够及时的进行系统功能的修改等,确实可圈可 点。Uu1001官方交流论坛整体感觉:年轻、活力。
以上分析,可以看出5d6d和uu1001在管理策略上各有不同,但实质上都是围绕如何实现各自的盈利目的而进行的。无论他们之间的竞争是如何,市场上能同时拥有5d6d和uu1001,确实是用户的一种幸福。
从个人出发,我更是期望他们能不断的竞争,不断的进步,为我们提供更多优秀的服务。国内的互联网市场瞬息万变,谁也不能肯定下一秒钟会发生什么样的故事,我们不妨放开心态,静观5d6d和uu1001的变化 -
从猪肉涨价看PHP人才培养和使用
2008-04-04 09:41:12
猪肉之所以要涨,不是个人行为,是经济规律。
原因自然很简单:供求关系不平衡!
为什么会造成供求关系不平衡?其中一个情形是:当供方的利益得到最大化时,供应在加速增长,当其速度超过需求的增长时,这种不平衡积累到一定程序时,就会价格上反映出来。
不过,07年开始的猪肉涨价现象是另一种情形:当供方无利可图时,供应因养猪成本大幅上升,养猪人大量转业,种猪大量被屠而减少,无法满足正常的需求,这种不平衡在价格上反映出来后的结果就是你要花比以往高一倍曾至更多的价格来吃猪肉。
而且,由于本来的猪肉价格偏低,即使达到新的供求平衡,价格也不可能回落到原来的水平了。
人才市场上也有同样的规律,从整体上来看,PHP程序员的需求在加速增长,需要培养大量的PHP人才来适应需求高速增长的要求。但是从目前的情况来看,PHP程序员无论是从质和量上都存在着问题,四个字概括是:量少质次。
造成这个现象的原因多种多样:
1 正规学校罕见开设PHP课程,或所学跟不上所用;
2 用人单位不愿意培养;
3 培训机构速成心理较重,圈快钱心态明显;
4 PHP程序员人力资源素质整体偏低;
综上所述:目前PHP整体人才水平是高者越高,低者越低,两极分化现象严重,薪资水平同样也反应出这个现象,高的可以直逼20K,低的1K不到。
程序员从初级成长到中高级的途径也比较单一,基本上除了名企培养外就是自学成才,后者因为开发环境的影响无法真正得到检验。毕竟在localhost上做出来的作品无法评测大访问量带来的影响和出现的问题。
已经从业的PHP程序员也存在知识更新慢的现象,这一方面是由于开发任务重,身心疲惫造成的。另一方面,中国技术人员骨子里的傲慢也难逃干系,做了几个系统,就觉得老子天下第一,敢骂thinkphp,敢骂ZF,对别人的能力不屑一顾。这一点,你可以从站点论坛中一掳一大把。而且中高级程序员之间的小框架骂大框架,张框架骂李框架现象也十分普遍,乃至动用马甲,雇撬边发功,脏话满天。旁眼人一看:PHP程序员的素质还真差!很难想象,如果这样的人做为上司,下属会有什么前途?
招人难,用人也难。需要通过同时提高用人企业和应聘人员的各个方面才能解决。
-
应该是一个好下属而不是一个好上司
2008-03-30 13:39:50
一个人,如果具备了以下两个优点:
1 毅力
2 亲和力
你觉得他适合做你的:
1 领导
2 同事
3 下属
4 老板
看博的兄弟可以留言谈谈
-
江湖,又见江湖
2008-03-22 15:44:56
江湖中的险,在于好人也许会做伤你的事,恶人也许会救你的命!
看过了几个PHP论坛,水,也许都没有PHPCHINA那么深,江湖之险,险在水深!
因为一个深字,隐藏了无穷的可能,也会让你细嫩的心灵中积累的那么一点所谓经验,处处地碰壁,最终成了支离破碎的伤心和挫败,渐渐地迷失了前进的方向。
上海话中,“老甲鱼”是有深意的,我在PHPCHINA中,最近也碰到了一条这样的“老甲鱼”。
其实也不是什么大事,只是让我对江湖的水深,有了进一步的认识,也体会到,即使是在技术论坛中,也有所谓人的用心,在起着作用。
当然,我已经没有了细嫩的心灵了,我,已经是两个孩子的父亲了,在人生步入又一个新的路程时,我突然返朴归真,想要在这浊世上寻找一片净土,几年的努力寻找,让我找到了一个结果:
这浊世上没有净土,净土,只能在我的心中。
因此,没有选择,保持着心中的这片净土,还让它那么净,那么无邪,只是下了决心,披一件浊世的外衣,与浊世的人,作浊世模式的斗争。
斗争,是生存的最好方式!
-
集市还是议会
2008-03-06 21:37:49
最近我一直在PHPCHINA写休闲生活的杂项版块。
因为我越来越把这个网站,看成了一个集市。
不是吗?各色人等,三教九流,肩挑着,车拉着,篮子拎着,或是自产,或是批发,统统地拿到这个集市上,来吆喝着,瞄着可能的客人,争取做成一两个小单子。
人气不可谓不足,对生活的重要性也无可非议,只是脚下的泥水多了一些,还夹杂着来自不同农副产品身上特有的气味。吵吵嚷嚷的让人头脑发胀。
但是,谁又离得开集市呢?菜篮子工程的重要性是不需要体会也能意识到的。
多收了三五斗的来了,欠收的也来了,总希望来到这个市上,会多多少少的有那么一点好处。不过,又有好多人可能会为此感到失望。失望是因为这个集市的氛围,和心目中那块技术至真无暇的神圣,无论如何也挂不上一丝的边。
多么希望有一种议会的等级感,和LAWMAKER的凌驾于草民之上的感觉。不是坛子的管理者也是这么期望的,老是官方官方地称呼自己。
不过就是官方官方的一邦兄弟,把这个论坛管成了一个集市。
-
今天累了没有思想
2008-03-03 21:58:25
不管哪行哪业,最有价值的都是创新。
创新意味着做前人没有做过的事,而且是有意义的,无聊不是创新。
开源的社区如此强大,因此有太多太多的应用,在你想要去做的时候,如果你有较强的查询能力,就会发现已经有人早拿了成品出来,并且已经开源了。
于是,你会下载了源代码,然行在那一行行成熟的代码间,寻找你的构想与实际作品之间的差距。也就会有了轮子之说,如果你真的有需要,你可以把轮子拿过来,装在自己的战车上,让它如风一样地飞翔。
而且,现在轮子也已经太多了,因此,如果有必要,你可以让战车有一百个轮子,就象蜈蚣一样多足(如果有必要的话)。
渐渐地,你会发现你的编程能力实际上就是一种胶水能力,你只要把一个又一个成熟的代码片断用你的胶水代码粘起来,优化,作简单的调试。然后就可以投入到实际应用中去了。
如此一来, PHPer的价值从哪里可以体现出来呢?
看到有公司招聘程序员时,非要象其它的语言一样,让战战兢兢的面试者放弃现有的函数,做出一个算法的实现来。这本来没有错,不过兄弟,我问一句,你是在招工匠还是招战士?
什么意思?我的脑里在假设PHPer是驾驭战车驰骋作战的战士,他们手中的兵器是兵工厂中师傅的作品,战士要做的,是把手中的剑,刺到敌人的心脏中去,而这把剑,很普遍的情况下, 并不是战士本身锻造出来的。这活,是铸剑师的。
当然,如果你是在招铸剑师,那对于算法,语法这些知识,你要大考特考,否则,打出几柄次品,战士扛了去玩命,是真的要丢老命的。
ZF是铸剑师的作品,SYMFONY也是,还有很多很多的,有名的或无名的神兵利器,是一代优秀铸剑师群体的心血和智慧的结晶,他们数年磨一剑,为的是有朝一日,会有战士,执着他们的杰作,划出一条美丽的弧线,制胜于战场之上。而这样的名器,如果只是在一个乡下破落的厨房中,用来切几片猪头肉,拍一条黄瓜作个凉菜,实在是暴殄天物,大煞风景!
偏偏又有视力有问题的兄弟,把这些圣朝名器,随意地与那些切猪头肉拍黄瓜的玩意儿,混在一起,放下了身上纵横沙场的英雄气慨,支一条二郎腿,偏坐于田梗之上,看蚂蚁行军,日落西山!
-
最基础的也是最考验人实力的
2008-02-26 12:14:52
因为需要,最近在对一个2003年由老外开发的程序进行加工。
这是一种奇妙的感觉,就好象是通过时光隧道回到了5年前,那时候没有太多的对MVC的呼声,一个INDEX有五六千行那么长,主程序中用$_GET和$_POST读入浏览器返回的请求,用CASE语句进行分支处理,分支中,一般的结构是这样的:
printheader();
editpage();
printfooter();
die();
在editpage函数中,是很重的php代码块,HTML块,JS块,各种逻辑和界面元素混在一起,自也有它固有的章法。那个时候,还没有firefox,因此,如果不修改的话,在FF中是无法运行的。
看着这样一个产品,(的确是一个产品!),与最新推出的一些开源产品进行了一番对比,个人得出了一些结论:
1 有一些东西是永恒的,比如正则表达式,ftp,文件/目录操作。
2 要做好一个网站,光有PHP是万万不行的,要有扎实的PHP,CSS,HTML,DHTML/XHTML,JS,MySQL知识。
3 要做好一个产品,光有技术是不行的,要有做好产品的一系列的步骤。
有一个常见的误区是:你如果使用一种落后的技术,你就做不好产品,这样说不全面,就做好一个产品的要素来说,技术只是一个方面。一些程序员做事马马马虎虎,重实现,轻设计,重代码,轻测试,重PHP,轻其它技术,做出的作品经不起考验,这样在历史上就留不下足迹,很快就烟消云散了。
说到自己身上,现在离一个产品级的程序员,还有很大的差距,从一些优秀产品的代码中,立起一面镜子,照出自己的不足,也许能得到代码本身包含的技术之外的别一种收获。
-
[连载]--实战PEAR -- PHP程序员进阶手册[3]
2008-02-16 20:08:38
[连载]--实战PEAR -- PHP程序员进阶手册[3]
什么是PEAR?(第三篇)
第三篇▓ PEAR套件的管理安装完基本套件后,当开发者需要使用基本套件以外的其他套件时,会需要安装套件,若不需要某个套件时,就会想要移除套件,若套件版本过於老旧,则需要升级套件,也就是說开发者需要一套PEAR套件的管理系统。在Windows作业系统下的套件安装与管理可以有两种方式,一种是使用Web的管理介面,另一种足使用「套件指令」。笔者较为推荐后者,因为执行的速度较快,但若您对指令有畏惧感,也可以用第一种来轻松管理套件。用web介面管理套件Web的套件管理在上一个单元安装基本套件时.就已经顺便安装好了。上一个单元中安装完PEAR基本套件的画面,在最下方会出现Start Web Rrontend of the PEAR instoller>>这个连结,点选后即可进入套件管理的Web介面,如下图:
管理介面网页档的所在位置,就是上一个单元的第9个设定项Filename of WebFrontend,我使用的范例是设为c :AppServ\www\pearindex.php,记得将它加入我的最爱。另外,先前的pear.php挡可以刪除了。请注意上图画面的上方有3个连结,所代表的意义分別是显示已安装套件(list installed packages) 、显示所有套件(list all packages)、显示尚未安装套件(list not installed packages)。一进入套件管理Web介面时出现的是显示已安装套件的画面,画面中有套件名称,套件功能的概略敘述与套件的版本编号,Local代表目前安装版本的编号,Latest代表PEAR官网上的最新版本的编号。
若目前安装的不是最新版本时,会出现一个upgrade的图案,按下图案即可升级套件,版本编号旁的回收筒图案若按下,会将套件移除,请大家特別注意。接著我们进入显示尚未安装套件画面,如下图:与显示已安装套件的画面大同小異,比较下同的是沒有了垃圾桶图案,取旧代之是一个╂图案,意思是使用者只要按下图案即可安装该套件。安装失败? 使用者安装时有时会出现该怎麼办呢?通常会安装失败问题大多出在套件的「相依性」,何谓「相依性」? 简单的說就是有些套件需要先安装其他套件才可使用,所以安装此套件前须先安装相依的套件,大家可点选画面中的回收筒图案,可观看套件的详细讯息,其中会提到与套件相依的其它套件。如下图:
例如:上图中,笔者安装Cache套件前,点选(!+ )图案,观看套件的详细资讯时,在最下面的Packages that depend on Cache中发现Net_Dict、Image Graph等5个套件与Cache套件相依,所以须先安装cache套件才可安装这5个套件。否则,直接安装这些套件会出现”安装失败”的讯息视窗。
套件的管理利用Web界面实在是简单又方便,但速度稍嫌缓慢,而且Web的使用者必须对放置套件的资料夹(本范例为c:AppServ\php\PEAR)具有写入的权限。笔者推荐用另一种管理方法,推荐的理由是因为它下载套件更快速,管理功能更強大,但缺点是需要打指令。用指令管理PEAR套件首先,与上一个方法一樣需先用pear.php网页来安装完基本套件,虽然安装后已有Web的套件管理介面可用,可是请使用者备而不用,接著到 桌面的我的电脑图案,按下右键,出现选单,请选择「内容」,会跳出系统内容视窗,在第4个名为进阶的标签中点选环境变数按钮,如下图:
出现璟境变数视窗,请点选下方系统变数窗格中的Path,按编辑钮,会出现编辑系统变数视窗,请在变数值栏位最后加上“;C:AppServ\php”,请注意,“C:”前须有一个分号(“;”)喔,编辑完按确定钮关闭视窗,如下图:只要完成这个步骤,就可以使用指令来管理PEAR套件了。我们来做个测试好了,请选择「开始/所有程式(程式集)/附属应用程式/命令提示字元」。在 > 后输入:
这个指令后按下键盘上的Enter键,将会出现所有PEAR管理指令与說明,如下画面:
注意:PEAR指令在Windows系统中使用大写和小写皆可
我接著根据上图的說明,试验一下其他指令。例如若要显示所有已安装套件,只要输入“pear list”即可,画面将会出现目前已安装套件的名称、套件编号、套件状态,如下图:
指令失效?别急,若发现指令失效,只要到C:WINDOWS下找到php.ini档并用任何一中文字编辑器将它打开,将原本的 “register_argc_argv=OFF”改为“register_argc_argv=ON”,存档后,将命令提示字元视窗关闭后重开,即可以 无障碍地使用PEAR指令了。就可以进行安装,请注意,套件名称使用大小写都可以,若套件状态为stable版则不用输入套件编号,例如:笔者要安装benchmark套件,只要输入当最后一行出现“install ok:Benchmark 1.2.1”即代表安装成功。
但若安装时出现相依性的问题而安装失败时,该怎麼办呢? 例如笔者安装Html_QuickForm套件时.出现需要先安装Html_Common套件的讯息,所以我只好再输入“pear install html_common”.这个指令,终於出现“install ok”的字樣了。接著再安装Html_QuickForm套件,如下图,即可大功告成。若您安装的是Beta或Alpha版也就是试用版的套件,请在pear install后输入完整的套件版本号码。例如,若您要安装liveuser这个套件,但这个套件目前並沒有释出stable版,那麼您需要使用以下指令:
也就是套件名称后面必须加上套件的版本编号,大家又会问,我怎麼会知道套件的版本编号呢?这就请查询PEAR官方网站了。若安装的套件不是Stable版卻沒有填写套件编号,安装时会出现”安装非Stable版”的错误讯息,並停止安装。介绍您一个偷懒的好方法:若您一定要安装某个套件,不管它足stable版还是beta版,这时候可以使用一个指令:例如,同樣想安装liveuser套件,卻懒得去查版本编号,那就使用这樣的指令吧:指令中的“-f”代表強迫的意思「force」,就是不管如何都要安装就对了。
用指令移除PEAR套件移除套件比安装简单多了,只要输入:这樣的指令即可,如下图:假设我将移除名为benchmark套件,如下图:最后出现“uninstall ok”代表移除套件成功了,移除套件的失败机率很低,请大家放心。
用指令升级PEAR套件套件会有新的版本不停的释出,若要将旧套件升级成新套件也非常简单,只需要输入指令:
即可,例如:笔者若要升级名为cache的套件,只要输入:
就可以了。升级的过程与安装套件一樣,有时会出现相依性的问题而升级失败,此时只要先安装相依套件就可以了
其它指令较少用到,我在这里不再介绍了,请大家自行观看。只要在命令提示字元视窗中输入pear指令后,就会出现指令的說明。
修改php.ini档这是PEAR使用前最后的工作了,不管您用Web介面,还足用指令来管理套件,都需要修改php.ini档。这个档放在C:WINDOWS目錄下,请用文字编辑器将它打开加入一行字如下:加入后,记得存档,並将Apache重新执行,这樣就可以了。大家应该看的出来,include_path的值就是下载並安装PEAR套件的所在路径,但是,为何要加入此行呢?笔者下一章会加以說明。我们来检视一下加入这一行是否让设定值改变了。请您在c:AppServ\www中建立一个档案,名为phpinfo.php,档案内只写入一行:接着在浏览器输入http;//127.0.0.1/phpinfo.php或http;//localhost/phpinfo.php,将可看见如下图:
另外,我还建议,将php.ini档中的allowcall_time_passreference设定项的值改为On,原因我会在第6章做解释。若一切动作沒有错误,出现的画面如上图,那么,就准备享受PEAR所带来的倍增PHP功力的絕佳体验吧。文章内容有部分摘录和改编自:PEAR/Wiki网站To be continued......下一篇是介绍在Linux和FreeBSD上PEAR套件的安装与管理
