61阅读

经验技巧-甩棍经验技巧

发布时间:2018-03-28 所属栏目:语言

一 : 甩棍经验技巧

甩棍经验技巧超深度解析 本文内容总结来自于个人经历,可能有一些偏执的地方,欢迎各位朋友们拍砖探讨:

1,棍对刀:不管是遇到短刀(匕首类,以捅刺为主要杀伤手段)还是长刀(砍刀类,以劈砍为主要杀伤手段),绝对不要大意,有喷子类远程武器的尽量先用喷子。如果没有,那这时候你的首要攻击目标一定是对方的持械手!谨慎出手,因为很可能对方挨你一棍的时候你也挨了一刀,这是亏本的!——什么?你说你能一击KO对方?听过鱼死网破这个词么,就算对方被击中要害被KO,只要在攻击范围内,对方也是来得及条件反射的给你最后一下的,这一下也许就能要人命!所以解除威胁是第一位的!永远不要低估对手,不要犯错,因为实战中犯下的第一个错误也许就是你的最后一个错误。一定要先攻击对自己威胁最大的目标,

保护自己才能消灭敌人!打持械手!持械手!手!

2,速度:其实短刀的威胁比长刀更大,因为短刀的动作不明显,尺寸小,重量轻,出刀速度非常快而隐蔽!身形矫健的对手如果抗着挨棍贴身过来给你几下,那是极度危险的。我自己刀和甩棍都练,攻击频率出一棍的时间可以出两刀(不包括战术直刀,那个重很多,达不到这个速度)所以——遇到持短刀贴身搏命的对手千万别逞英雄硬抗!避实就虚,边跑边打

~这叫运动战,不丢人。

3,步伐:我经常打羽毛球,觉得羽毛球锻炼是对甩棍基础最好的练习!技巧和力量,都很类似,特别是步伐——滑步,垫步,还有腕力的运用。攻防转换,重心的控制,等等。可以这么说,羽毛球会极大增强你用甩棍的手感,打击精确性也会大增,想打大拇指绝对不会碰

到食指,想想高速对抗中羽毛球的速度吧。

4,节奏:一定要把握战斗节奏,控制主动权,你拥有不同的武器,需要发挥出最适合自己的最大威力,就要把握节奏,你是拿速度慢攻击频率低但是威力大的重武器,比如说关公偃月刀(打个比方哈,呵呵),就一定要跑动拉开双方距离,保证迎击对方的是你劲头上的刀锋!如果你是用单手的短兵器,那就一定要大胆的绕着贴上去。其实这个主要还是看个人的心理素质和实战经验,很多人一遇到真正的紧急情况就肾上腺分泌过盛,头脑一热就一顿没头没脑的猛冲猛打,也有那种双脚发软原地发呆不知所措的。提高心理素质,冷静,把握了

节奏你才能稳操胜券~跟那个啥一个道理,恩,男人,懂的:)

5,制止力:个人认为,普通实战中锐器的制止力还是要大于钝器,除非持锐器者不敢下杀手。因为在人体高度紧张的时候,身体的非敏感部位部位被钝器击中其实是感觉不到什么疼痛(我左大腿一次被围攻激烈少对多时挨过哈密瓜钢管重击,当时真没感觉多痛,照样蹦跳自如KO对方,但过后瘸了小半个月,呵呵,当然,可能我也比较抗打),这也是为什么要讲究打击部位的原因。而锐器的制止力来得非常快,一旦流血,受伤者的心理也会被震撼,现实中应该不会有几个影视剧里那种英雄吧?——先被对方打得半死不活血都快流干了,然后突然小宇宙爆发,秒杀反一号。真实的情况是,一旦被占上方,就被对方一鼓作气KO了。

甩棍最大的优势只有一个————相对和谐,不易造成严重后果!

6,专心:一旦不可避免的开打了就不要前怕狼后怕虎,只有勇气才会激发出你更多的潜能。多对多的时候不要分神去搀扶倒地或者受伤的同伴,可以赶跑旁边的敌人,但一定不要破坏

自己的战斗姿势,一定要先击倒对方控制场面才能顾及我方的损失。

7,适用性:棍不像锐器,使用者没有一定的力量,击打没有一定的加速距离都是发挥不出威力的,虽然说有跟寸拳类似的棍法,但威力和大劈棍相比是大打折扣的。所以不要迷信越长的棍越威猛,越长越重,灵活性越低,打出同样效果需要的加速时间和空间越大,而实战中不是总有开阔地给你大挥大舞的。相反,使棍速度过低的话,被对方躲闪或抢棍缠斗的几率大幅上升!就算不被夺走,至少也丧失了自身的武器优势。所以选棍尺寸的时候一定要考虑到自身的力量和速度,个人认为要能以一个冲锋抢攻中5秒挥出5劈棍为参考(打空气的话要3秒5棍,当然,越快越好)————这也是为什么在很多实战中我并不甩开棍,而是收缩状态按匕首的格斗手法使用的原因。实战中速度永远是第一位!以快打慢,大优。

8,捅击:容易被忽视的棍法,用好了威力非常惊人!此招KO狗急跳墙敢对冲而来之敌次数非常多。尤其是在对手持短刀时(可以参考子弹哥的《杀破狼》里对刺时候的捅肋骨),可以在对方的杀伤范围外对敌实施打击,需要注意的是一定要借助整个身体扭转的力量而不仅仅是手臂,捅击的部位以面部,胃部,软肋为最佳,制止能力都是一击KO级别。这里

特别强赞一下现在GAS的锁定!捅击挑击一次都没解锁过!值得信赖!

9,天敌:柔道,摔跤,这两种武术里面都有技术迅速近身缠斗,而且练这两类的人抗钝器击打能力都及其惊人!这对于没有对战经验的持棍者来说是无解的,有机会再另外开贴讨论,呵呵。之所以这么肯定的讲,是因为我们这边哈密瓜小偷里来了个原来练摔跤的高手(据说还是国家级运动员,暴寒),09年参与过暴乱放出来后流窜到我们这。那块头(看上去就不怎么怕打),那技术,跟他缠斗危险系数极高!(我也练柔道,不过刚入门)所以基本上都用

喷子辅助解决。

10,力量:发力不光是取决于肌肉力量和绝对力量有多大,更在于发力的方式。人的身体,腿、腰、背、胸、肩、臂,力量依次减小,只是挥动手臂出棍,那么其力量是很有限的;如果拧腰转肩带动手臂出棍,力量自然增大;再加上腿部发力,转动髋部带动上半身出棍,那就是一记很有威力的重棍!纯粹练力量会加大肌肉块,但增加身体负担会降低敏捷,怎样

取得一个平衡呢,自己把握吧。肥大不等于强大,重量不是力量。

11,警惕:千万警惕一切靠近你的人,如果是不认识的,一定要要保持距离,很可能那人装作围观或者帮忙,却是对方的同伙,故意靠近后突然抱住你或者捅你一刀,你就挂了。和

谐本地扒手的时候这类情况最多。

12,训练:各种技能的训练,原则就是重复,不停地重复!把技术动作和对战反应固化到你的身体和反射神经中。不管是徒手还是兵器格斗,都如行云流水,流畅简洁。在不同的时刻使用不同的格斗技。千言万语还是一句话:棍是死的,人是活的。随机应变,才能应付各种情况,身经百战,自然人棍合一(=。=!人棍,好别扭)很可能一个随意简单的劈棍,在经常练习经常使用的人手里那也是一招威力无比的大杀技。威力最大的永远不是武器,

而是使用武器的人!

特别写在结尾:

希望看到本文的朋友们在尚武的同时更能够保持高尚的武德,更多的是做有益于社会的事,

而不是用于逞强好胜,打架斗殴。

很多时候,能智取的还是智取,力之用一,智之用百!武力只是最迫不得已的办法:)

永远不需要用到的武力才是最有威慑的武力!

不被注意的甩棍使用要点

其实我并非武学爱好者,在这里只是说说之前经验及个人分析出的几个甩棍使用要点,几个不常被注意到的、却又很有用的要点。

1、甩击:也就是在闭锁状态下的棍子,向对方甩出展开并同时进行的第一击。因为大多数人在此之前并不会明白你手上拿的是什么,更不会想到这么短短的一根棍子会突然伸长,所以必然会掉以轻心来不及闪躲,打个出其不意。这第一击如果击中对方的要害例如锁骨、臂骨、腕骨等就可以马上结束战斗。人在无法闪躲的第一反应就是用手挡,因此击中手骨的机会是相当大的。(有人担心甩击是否能准确打中对方,其实很容易,把钢卡力度调合适点,平时拿个塑料瓶子做目标多练几次就可以很娴熟了)

2、连击:很多初学者使用甩棍前总是把甩棍想像成一击就倒的外星武器。我曾经见过一个经典案例,一持甩棍者背后偷袭一练家子,一棍把那练家子打了个头破血流,打完了,站在原地傻看等他倒下,结果被反应过来的练家子回头揍了他个满地找牙。顾名思义,连击就是说你打了一棍以后,不要多想什么,更不要停下动作,马上就连着打下一棍,直到对方倒下为止。

3、捅击:甩棍一般人都是拿来敲,其实拿来捅的威力远比敲的威力大。前提是你的棍子必须锁紧(这点对蚂蚁这样以锁定著称的棍子来说完全不成问题),只要全力往对方身上捅一下,中了肚子就得当场趴下,就算中胸部、后背等地方也只剩半条命了。尤其是在对方背对你的时候,敲击是不起什么作用的(除非你打头或脖子),这时候就更能体现出捅击的杀伤力了。

4、杵击:这里主要讲的是收棍状态下的攻击。这种攻击方式多见于对方距离过近、或是空间太小无法出棍等情况。杵、顾名思意就是直接用棍头方向正手前捅,或是用尾盖反手砸向对方,由于这个方式的攻击力度没有挥棍的力度大,所以可以直接攻击对方的头部、面部等部位,只要力量充足可以立刻将对方击倒,至少也能趁机拉开合适距离。如果换上了增强尾盖杀伤力的锥形尾盖,更是可以产生巨大的打击效果。另外这里必须强调的是,用尾盖反手砸的话,记得要用大拇指把棍头按住,不然有可能会造成意外出棍。

二 : 关于DYNED经验技巧总结31

关于DYNED的经验技巧总结

09级经贸院15班学习委员 孙文鹤

最重要的一点,不要刷TLS和TM两个模块,这两个是选修内容,结业对这两个模块不做要求;

首先,来规定一下我后面的用词。屏幕最下面的一排按键,从左到右依次为:ESC;录音键;回放键;向前键;重复键;暂停键;向后键;ABC键

1、 千万不要点ABC键,否则你的智能辅导分会狂掉。

想要显示文字有另一张方法,就是点“向前”键,然后电脑就会显示前一句的文字,趁它没消失的时候,点“录音”键,这时文字就会定住。这种方法不会掉智能辅导,但是会掉水准。

2、 关于进度:(1)时间是影响进度的首要因素。每遍PRESENTATION的时间太长或太少 都对进度增长不利。以DBE为例,3分钟的PRESENTATION,4分钟听完只能增长2%的进度,20分钟听完也只能增长13%的进度,但10分钟听完可以增长10%。所以,建议PRESENTATION都用10分钟左右刷一遍(NDE可以15分钟,要多多使用录音、回放和重复键),这样的时间利用率最高。

(2)关于水准:水准是影响进度增长快慢的重要因素。在课程记录里,每次PRESENTATION和做题的水准都不一样,水准一般会随着做题次数逐渐提高,直到3.0。水准越高,进度增长越快。以FIB为例,水准为0.8时,10分钟可以进度增长6%,但水准为3.0时,10分钟可以进度增长17%。

所以,对于那些一心只想刷进度的同学们,可以在前几次水准低的时候,4分钟一遍地刷PRESENTATION,等水准达到2.0之后再回到10分钟一遍。

3、 关于智能辅导:对于智能辅导分,大家一定要有针对性,要知道自己还缺哪几个方面的

智能分,怎么样才能刷上去。在此,我把我所发现的一些分享给大家。

(1) 录音功能用的好。(你没有做足够的录音练习)

(2) 重复键使用的好。(请更多使用重复键)

这两个是大家一定要会的技巧。如果想要这4分(如果你有括号里的这两句,那么就有8分的上升空间),你就要有牺牲精神,一个3分钟的PRESENTATION,你要拿出来30-40分钟来刷一遍,电脑念一句,然后你就录音,回放,重复,录音,回放,重复??这样每句3-4轮(电脑能够记录的是每句录音5次)。一遍后,你应该就有这两个“好”了。

(3)(请将你的录音与原声做对比)

如果你的智能辅导里有这一句,那么原因不在你的PRESENTATION,而在于后面有“SR”的题目。一般你读完后,电脑会放原声,这时候你要点“回放”然后“重复”,点个十来次,这两分就可以到手了。注意:如果你很久不这样点,那么你也会拥有这句话的。

(3) 语音识别做的好(你在语音识别中有困难)

这个嘛,就是在后面有“SR”的题目里,如果你所有的语音识别题,至今为止的语音识别正确率(一次就录入成功的算正确)超过了70%,就可以得到这个“好”。教你一手:一些有选项的语音识别题,比如GRAMMER FILL-IN、FIB中的语音录入等,如果有一句话你很难让电脑识别,就用鼠标点吧,点对了也算正确录入。

(4) 听力理解提问做的好

这个与PRESENTATION里的问题回答正确率,和FOCOS EXERCISE的正确率有关。我的DBE,是连续把FOCUS EXERCISE做全对了四五次,就得到了这个“好”。

(5) 学习频率好(请更加频繁地学习)

这个大家应该都很熟悉了吧。需要注意的是,如果上面的这两句你都没有的话,一天10分

钟,不到一个星期就可以刷上去两分的智能辅导分。但是如果你很久没去刷的话,学习频率分是个无底洞,它会一直让你的智能辅导分往下掉,直到-12。有些同学的智能辅导上有一大堆“好”,但智能辅导仍然不到4分,那很可能就是学习频率的问题。学习频率掉了多少分,其实都可以刷回来的,不过要花费一些时间了。

(6) 超过30天的有效练习

好像是刷听力总时间超过了60小时,就可以得到第一个评价。这时候,你所有的课程的智能辅导,都可以加上2分。所以,如果你即将达到60小时,有一个课程的进度够了,智能辅导却只有2分,那么不要急,先刷其他的课程,等待这2分就可以。

(7) 单元测试成绩好

任何模块,你第一次考到90分以上的时候就可以得到这个“好”,但只能得到一次,而且,如果连续考差两三次,这个“好”也会消失的。

(8) 如果发现自己的智能辅导太奇怪,可以直接去问北二那位负责解锁的老师,也可以 去论坛发帖。在听力教室的电脑上打开IE浏览器,进入“学习论坛”,可以发帖,也可以查看“2009级听力制度与进度”,来看自己需要听哪些课程。

注意:关于DYNED的问题,最好不要去问学长学姐,因为08和09级的听力制度有很多差

异,学长学姐们的经验不一定适用的。

(9)临近期末,大家要特别小心了。下学期,我们的第二学期的课程会被全部解锁。因为每个模块的学习频率是分开计算的,所以当你刷一个模块时,所有其他曾经刷过的模块,频率分都会一直在掉。(从没碰过的模块,还有没锁的单元都考完了的模块,智能辅导分不会掉)。大家要做好准备。

4、 关于考试:

(1)有一些听问题做选择的题目,右下角的时间7秒就转一圈,大家第一圈没把握的话就

不要选,等电脑重复一遍问题,然后在第二圈的时间里再作答,答对的话得到的仍然是全分(4分)。所有的问题,15秒以内作答都可以得到全分。

(2)同一个模块的考试,比如DBE-1和DBE-2的考试,必须相隔48小时才可以。

(3)如果第一次考试不到85分,那么补考的条件是:相隔一星期以上,所有进度条达到

100%,智能辅导达到6分;第二次还没过,就再等一星期,进度达到120%,智能辅导达到8分。如果第三次还没过,就不用再考了,挂了。

(4)EBTN的考试,题目会多于25道,(好像是30多道吧)大家要有心理准备。

(5)关于结业,是在每学期第5或第14周申请,申请通过后要进行结业考试才可以结业。

结业考试完全不用担心,所有完成了全部进度的同学都会得到75分,结业的听力考试只占10分,口语考试也只占15分。所以,不可能要重修的??结业后的同学就不用再上听力课了。

以上就是我至今所发现的所有关于DYNED的经验技巧的总结,欢迎大家的补充和建议!

从去年接触到DynEd这个所谓的智能听力软件到现在,经历了繁复的混沌的一百七十多个小时,我终于从中解脱。当然咯,也从各方神圣口中听到了不少可以节省时间的好方法,现在和大家分享~~

AL Advanced Listening

这个课程是最让我痛苦的了,一堆教授没完没了地说一些过时的让我们完全不感兴趣的话题,听到最后精神处于将要崩溃状。不过在我即将把所有课程听完时,才发现了一个堪称绝妙的方法。有兴趣一定要试试,非常神奇,原来40分钟刷一个part,后来径直缩短到20分钟左右。

先不要听Presentation,一上来先听Language Skills,而且只听第一个Vocabulary。一般给出的单词或者词组猜猜蒙蒙再加上本来就认识的,基本上不会错多少。当把所有词都挺过来后,就不要听他念题目了,直接疯狂地点击上面的标题栏,就是对话框最上面的蓝条,到问题的时候停下来选,其余时候就点那个条pass掉那堆题干。我粗率统计,大概在6~10分钟内就可以听到100%。

这时候再返回来听Presentation,注意关键在这里,每个lecture前都会有个介绍,例如:Lecture 1 Dealing With Stress……Listening to the question……这时候按回退键,返回去继续听这一段话,大概3,4次左右的重复,就可以在完全不用听内容的情况下,轻松把进度刷到100%以上。

最后是Interactive Listening。其实这个部分主要是看你做题的准确性。所以我一般会仔细听一遍并打开字幕,把每一句都看明白,这样回答问题的准确性就比较高,刷的时间就会比较短。一般听一两遍后就是重复的题目了,就可以用刷Vocabulary的方法,跳过演讲,直接选答案。进程会非常快的~~~

Clear Speech Works

其实这个课程还是很容易刷的,因为要求是一共刷够5个小时,并且每个part都刷到,所以一般情况下只用听Video就OK了,听的时候可以干一点自己喜欢的事情,很快就过去咯!

English By The Numbers

这么多课程里,我觉得这个是最值得一听的。毕竟实用性很强,而且不那么枯燥,presentation刷个两三遍的就到80%了,Quiz做起来也不那么无聊。不过这个不建议点上面的标题栏,我尝试过,时间短还是会使的进度减慢的,不很划算!

FIB Functioning in Business

这个课程比起NDE和DBE来说真的是太好刷了,每个Episode所用的实际时间也就100分钟,虽然那个白痴“智能软件”记的时间会到110分钟至2个小时。和AL中的Interactive Listening一样,这里也是看准确性的,所以就可以使用狂点标题栏只做题的方法完成,DynEd计时应该在45分钟左右。以前没有用这个方法的时候,每次DynEd的计时大概会在70~80分钟,所以还是能节省很多时间的!Function Gird也是做题的效率比较高,干听是最耗费时间的了。这里的Presentation我没有试过用AL的方法,所以效果还不太清楚,今天晚上试验一下再分享给大家。剩余的像Variations,Dictation本来就很好应付,小技巧用起来效

果并不明显。不过我个人刷Dictation时,一般就找两个,然后轮流听,最后把词都记得很熟了,就直接填词,然后每句话再重复一遍,一旦水准级到2.0以上,进度就会非常快了,所以一定核对没有错误了再check。Dictation一般在15到18分钟左右就OK。

DBE Dynamic Business English

这个是最让我无语的了,Presentation里面的每个部分都要到80%以上,简直在慢性消磨我的生命一般。而且这个部分就是以时间的长短为衡量的,对于点标题栏完全无效,狂点的后果是计时1,2分钟,进度0%。晕~所以后来我就一边听MP3一边听DynEd,没事再哼上两句,我要为自己的生命保值啊!!

这个课程的其余部分还是很好刷的,虽然很无聊,但总比Presentation感觉有希望得多。而且做题的准确性越高,进度会加快,所以题还是要认真做的!

NDE New Dynamic English

这个白痴到顶的课程是最耗费时间的,我Module6用了12个小时,Module7用了11个半小时,Module8比较悲剧,最后一个8-3挂掉了,结果刷到100%后用了16个小时,无语!!这个课程也是无计可施的,如果有人发现好方法一定要快快分享啊,就自己于水深火热之中!不过实话讲,这8-3据调查挂掉的人很多,前两天在校内上看到两个非常优秀的学长学姐也不幸挂掉,还把文章都发上去了。我记得前几个选词填空就比较让人纠结,所以注意一下文章中用的小词儿,不起眼,但和容易出错。

三 : 经验之谈:日常请客点菜技巧

点菜技巧 特色菜 荤素搭配

请客吃饭人皆有之,吃人人都会,但是怎么点菜往往难倒你。所以点菜时个技术活,下面是笔者从网络收集的一些点菜技巧,这里和大家一起分享。

一、你要确认同去吃饭的人他们不吃哪些食物,他们有没有哪些特别想吃的菜;

二、这次吃饭是朋友聚会还是商务目的,还是游玩旅行:

1、如果是朋友聚会,这个比较随性,可以让大家自己每人点一个菜;

2、如果是商务目的,记得一定要有几道菜一定是要体现贵,贵,贵。客人如果是外地人,那就还需要加上当地特色菜;

3、如果是游玩旅行,不用多说了一定要当地特色菜咯!

三、关于菜品荤素搭配具体内容:

一般看情形,如果是去熟悉的饭馆,如何点菜就靠自我发挥。

不熟悉的饭馆我一般都让服务员推荐他们的自家菜。因为每家饭店都有自家的招牌菜、特色菜,这些一定不会差。以下按一桌12人搭配建议:

1、2人:一荤一素一汤;

2、3-4人:三荤一素一汤;

3、5-6人以内:备四或者五道菜就三荤两素一汤;

4、6-10人(或者6-12人):备十道菜,七荤三素两汤。

PS:本人是南方人,吃饭一定备汤。。。我就不懂得这个是不是同样适合北方的朋友们。。。

四、小小建议:

还有一种省事点菜方式就是:如果你光顾的是一家星级餐厅,这样的饭店都有备专业点菜员。你可以告诉点菜员这次的饭局你的预算是多少,一共是多少人同桌,让TA列菜单给你审核。

查看TA列的菜单时,注意是否有这家店的特色菜,是不是素菜为多,荤菜太少。适当的你还可以根据实际大家需求调整。不够吃的时候可以加菜。

我最喜欢这样的点菜方式。。。大家都很满意,个人也很省事。。。

四 : 32CM0304经验技巧战术大总结

CM0304经验技巧战术大总结 cm0304官方的最后一个补丁4.15也已推出一段时间,也是为这款正统cm的最后之作做一下总结的时候了。明年我们就要在由eidos旗下BGS小组(全部由cm骨灰级玩家组成)制作的拥有现在cm的游戏名称、logo还有外观和感觉(look和feel)的cm5和由si制作的拥有现在cm的游戏内核和庞大的球员数据库的fm2005间做一番艰难的比较和选择。现在我们就抓紧这段最后的时间来享受这最后纯净的cm,为了让大家更好的体验这cm最后之作,我试着用自己的理解来分析一下0304的战术系统,希望能对大家有些帮助。

足球理论发展到现在几百年,各种战术早已成型。Cm作为一款专业的足球游戏,战术系统的仿真做的算是十分出色的了。但游戏终归是游戏,在现实中你无法找出一个绝对高于其他的战术,最后的胜负往往是要靠那些身价上千万的球星来决定。现代的足球不再是70年代那理论革命的时代,现在足球是金元比拼的时代。那些类似今年冠军杯制造冷门的另类的存活期限最多也就一年(再说他们本身也是各自国家小联赛的豪门),明年又会被大洒金元的超级豪门打压下去。但这些在cm中是可以办到的,因为我们可以在一个版本的cm中找到最有效的战术或阵型,然后靠一些没有名气的球员去打败那些不可一世的豪门,照我们自己的足球理念来改造这个等级制度森严的世界足坛。因此我现在要做的不是推出什么新的有突破性的理论,而是想和大家探讨一下适合0304的战术系统。

下面进入主题。自从cm4的2d画面推出以来,原来cm3靠中路打天下的格局产生了巨大的变化。由于边路进攻变的犀利无比,前锋威力无比(尤其是有一定弹跳的中锋头球争顶率不低于50%)的这些特点。我在cm4时代推出的单前锋,双后腰,四后卫这些理念在当时被广泛采用,应用在各自不同的阵中。相信也结束了当时争论颇多的三后卫还是四后卫的问题,之后四后卫加单前锋成为比较主流的战术。

但到了0304一推出,我经过一段时间的试玩,对自己原来的战术理念产生了很大的怀疑。现在我就分前场和后场来阐述我有关疑问从产生到解决的过程。

前场:

相信大家都感觉到,前锋的作用下降是明显变化,你不能不承认这是

cm对原先cm4前锋过于神化的修正,往现实靠拢是好事。但我们就不能放心的使用原来的单前锋的阵型了,因为前锋的争顶能力大幅下降,原先cm4的第一前锋sheva在0304放在突前sc的位置也变成了垃圾。现在只有klose、carew这样的弹跳和身材都绝对超群的无敌中锋才能完成原来极其普遍大多高中锋都能完成的前场牵制2个中卫,然后头球摆渡由影子前锋amc插上完成射门的经典配合,但这两位兄弟的射门得分能力实在不敢恭维。从前sc+amc一个赛季百球以上的时代一去不返了,所以有段时间我不得不放弃我的单前锋战术,但在前场多配置上一名前锋的代价就是在中场失去人员的优势,原来由amc产生的配置上锋线和中场双重优化及其带来的局部效率不再有效。而且双前锋自动会有往两边扯动的趋势(因为这个趋势后来产生了号称0304最强阵的diablo,这里先留个关子后面再说),这样就难以在中路形成对球门直接的威胁。再加上虽然边路突破依然犀利,但前锋在中路抢点得分能力的下降,使得边路进攻的效率也随之下降。这样原来数脚快速传递然后中路一锤定音的机会就少了很多,取之而代的是中间无法突破,边路有突破但无法有效形成射门而陷入的阵地战中,由于无法打破僵局,漫无目的远射就多了起来,射门有效率的低劣也就不难解释。所以cm0304一推出,普遍的声音就是前锋破门乏术和远射太多。

在这种背景下当时第一个比较出名的阵是442hh,这个阵的最大特点就是所有球员采用长传和两个mc心态防守及两个边路不选run with ball。大家对这个阵的感觉应该是射门的命中率有了质的提高,我个人认为造成这个变化的,就是这个传球方式的选择。因为传球long和不选择run with ball减少了边路球员突破不成而选择远射的次数,而在中路dmc和amc(在这个阵中是两个mc)的过顶身后多了不少,因为long所以一有空挡中场就会在第一时间把球传给在前场空挡的队员而不是慢慢的组织。这样的配合打起来大开大阖,让人有种赏心悦目的感觉。而如果采用shot在禁区前沿的amc和dmc或mc就不会因为找不到在shot范围内可以配合的队友而选择远射了事,在这个位置不射门而再把球分给在边路的对友这样的镜头在442hh产生之前是很难看见的。更耐心的找寻那些稍纵即逝的机会才是有效提高破门效率的方法。

所以442hh的射门不会很多,通常20次以下,但命中范围率一般都高达70%左右,至于破门率就是你的rp问题了。(要看你前锋的状态和别人门将的表现)当然用leeds25推荐的max在你球员足够好的情况下,即有高超的意识和能力的前提下(在联机时这些要求是可以达到的,选秀出来的球员不用强制规定也可以作出比较合理的选择)也可以达到相同或相近的效果。 总的来说,在442hh中前锋可以得到较多在比较好的位置射门的机会,

而不是由中场浪费大把的进攻机会或被迫在尴尬的位置处理球的情况出现,这样前锋破门乏术和无谓远射问题过多就有了解决的方案(注意是无谓的远射,而不是所有的远射,远射也是破僵局的必要手段。所以我们不鼓励不负责任的远射但不要拒绝适时的远射),但442hh也是有很大缺陷的,这个后面再说。 442hh之后出现的一个风靡一时的阵就是一位清华玩家推出的nb433,这个阵在大陆地区知名度极高,一度引起争论要在网站级的比赛中禁用这个阵。确实nb433的进攻力可以算的出奇的强大。那种在0304系统下边锋内切的特殊拉线,确是一个重大的创举。这样的拉线使边锋一直处于边卫和中卫的结合部,属于三不管的地区(边卫、中卫、后腰都不会对这样拉线的球员形成随时有效的放守),这样空位效应的威力是惊人的。一般来说,后卫对正常在位的前锋的防守是随时的,只有后卫失误丢掉position的情况下才可能有意外空位出现。而nb433使2个边锋在一场比赛的大多数时间都处在同样效果的自然空位上,这样的始终无人专门看防的自然空位的效果当然是不言而喻的。这样很多时间只有前锋在空位得球后,后卫才会做出反应,这种情况下只有在后卫能力比前锋高出很多或前锋自己不争气还有就是门将神勇的时候才会不被破门。这个奇怪的特效拉线,也算0304的一大特点了。

可以说nb433在进攻上是有重大突破的,但其实它是个严重失衡的阵,它中路的防守的缺陷是致命的。中路只有一个mc的配置是这个阵的硬伤。这次天邻战队赛中,我4次在前半场十几分钟就3球以上落后的情况下变阵nb433。3次在上半场结束前就成功扳平比分,1次只是拉近比分。但3次半场扳平的比赛只有1个主场最后以5:5平局收场,其他2个客场还是1球小负。还有1次在客场到70分钟还是0:0的情况下,为了战队总比分的胜利我冒险使用nb433,却最后以0:1再败。相信这绝不是偶然,在一共5次的尝试中,取得1平4负的成绩。我全部的败仗都在nb433下取得的,他的防守确实存在巨大的问题。大家平时在它空前强大的攻击力下被迷惑,因为平时大家都是处在强势的一边,防守问题还不显得急迫。但在联机时在大家球队实力相差有限的情况下,这个问题就会被突显了。下面我就再谈谈让nb433的缺点彻底暴露的一个阵。

前面谈到过2个前锋的自然拉边趋势,我当时只是觉的这是个让人头痛难以解决的影响前锋进攻效果的问题,所以又开始转而探索单前锋的可能性。但在战队赛打到中期的时候,我发现了si官方网站上好号称0304最强阵的diablo,初看之下相当普通,只是mc前拉到两个sc的中间这个稍显奇特的设置,我也没多在意研究。但在接下来几天一场对fio的比赛中碰到了一个用这个阵的人,我只是设置了让我的dmc去盯那个mc。但比赛过程中

我发现我的后腰根本盯不住那个mc,两个后卫总会被两个前锋的拉边带开,在中间形成一个小空挡。这时dmc一个适时精准的长传到达这个空位,再由插上的mc在这个空位获得直接面对门将的机会。这场比赛我一开始13分钟,对方3脚射门就3:0领先我,我只好load了nb433想做一博,在20分钟到29分钟连下三城扳平了比分,并保持了比分到了半场结束。这时我最大的失误就是没有换回普通的阵来平衡场面,而是被自己的气势所迷惑,想着一口作气拿下对手,而没意识到半场的后三分之一场面已开始走向均势。果然缓过气的对手,盯着nb433的中路猛打,本来就缺乏保护的两个中卫这时更是完全暴露在diablo精心设计的套中,最后对方mc帽子戏。我也以4:5输掉了比赛,果然掉入暗黑之中。我的man utd战队也一战失去了夺冠的机会。

这场比赛的失利,让我完全意识到了这个阵的价值。也让我体会到了拉线在0304中突出的效果。拉线好用的效果让0304中后插上的隐蔽性和威力比起之前的cm4有过之而无不及。开始让我放弃单前锋的原因我也终于知道了。只是中锋的减效,而不是sc+amc(mc)组合的减效。原来的单中锋无法再给amc足够的支持,而使amc无法发挥完全。之前单前锋吸引两个后卫,然后通过争顶拿到球权,让amc有机会在空位射门的情况比较难出现了;而diablo是通过两个后卫的拉扯,让amc(mc)直接有在空位射门的机会。两个前锋拉扯、dmc抓住机会传空位、mc在空位靠自己能力得分,这就是diablo的精髓——它让后插上的威力再次充分体现出来。

五 : PHP教程.经验技巧

全球超过300万个互联网网站的管理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。

如果你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的认识,使你掌握一些常见的和高级的PHP功能。

一、把PHP安装为Apache的DSO

PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:静态模式、动态模式(DSO)、CGI二进制模式。

由于易于维护和升级,我强烈建议以DSO方式安装PHP。例如,初次安装时如果安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行“make clean”,添加新的配置选项,然后再运行“make”和“make install”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。

下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP:

1、从Apache软件基金会得到最新版本的Apache源代码;

2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、运行下面的命令,把文件安装到apache_[version]目录中:

tar -xvf apache_[version].tar

5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);

6、键入下面的命令为编译Apache作准备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在已经设置了mod_so的新值,它将允许Apache使用DSO模块;

7、回到提示符状态后键入make,并等待再次回到提示符状态;

8、执行“make install”命令。

至此,Apache已经安装完毕,系统将重回到提示符状态。接下来我们开始安装PHP:

1、在PHP主页的下载区中找到最新版本的链接;

2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、执行下面的命令把文件安装在php-[version]目录中:

tar -xvf php-[version]

5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;

至此,已经作好了以DSO方式安装PHP的准备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。为了得到较高的性能,我没有安装对MySQL的支持模块。

./configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs]

6、回到提示符状态后执行make命令,等待重新返回到提示符状态;

7、执行make install命令。

至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。

1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:

ServerAdmin you@yourdomain.com

2、找到以ServerName开头的行,把它改为真正的值,例如:

ServerName localhost

3、找到内容如下所示的小节:

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容:

# And for PHP 4.x, use:

#

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps

保存文件,回到上一级目录,执行下面的命令重新启动Apache:

./bin/apachectl start

如果在启动时没有出现错误提示信息,就可以通过创建一个名为phpinfo.php的只有如下所示一行内容的文件,对安装的Apache、PHP进行测试:

<? phpinfo() ?>

把这个文件保存到Apache的文档根目录(htdocs)中,然后开启浏览器,键入http://localhost/phpinfo.php地址,屏幕上就会出现许多的变量和它们的值。

如果要重新配置PHP,需要再次运行make clean命令,然后执行带有一系列选项的./configure命令,然后再执行make和make install命令,Apache的目录模块中就会出现一个新的模块,只要再重新启动Apache加载这个新的模块,就一切OK了。

二、使用PHP本身的对话

PHP 4.0中最令人期待的特性应该是对对话的支持,PHP 3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP最大的缺憾之一。

只要用户在浏览你的网站,你就可以利用对话维护与特定用户有关的变量,而无需建立多个cookie、使用隐藏表格字段或将信息存储在数据库中。

在一个网页上启动一个对话,就会使PHP引擎知道你想启动一个对话(如果还没有启动)或者继续当前的对话:

session_start();

启动一个对话将通过cookie向用户发送一个识别字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识别字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,这个文件中包含注册的对话变量以及它们的值。

用来显示对话的作用的最常见的例子是访问计数器。启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。因为对话会发送一个头部,因此如果在session_start()之前有空格和HTML代码,就会得到一个出错信息。

<?

// 如果还不存在一个针对某用户的用户,则启动一个对话:

session_start();

然后注册一个名字为count的变量:

session_reGISter('count');

注册一个对话变量后,只要对话存在,名字为count的变量也就存在。现在,count变量还没有被赋值,如果对它执行加1操作,它的值就变为了1。

$count++;

把上述内容综合在一块儿,如果还没有启动一个对话,就会启动一个对话;如果不存在一个对话id,就为用户指定一个好了,注册一个名字为$count的变量,对$count执行加1操作表示用户已经首次访问了该网页。

要知道用户在当前的对话中访问本页面的次数,只要显示$count变量的值即可:

echo "<P>You've been here $count times.</p>";

全部的访问计数器代码如下所示:

<?

session_start();

session_register('count');

$count++;

echo "<P>You've been here $count times.</p>";

?>

如果重新加载上述的脚本文件,就会发现变量count的值增加了1,很酷吧。

还可以在对话中注册一个数组变量,假设我们注册了一个名字为$faves的变量:

$faves = array ('chocolate','coffee','beer','linux');

可以象注册一个简单变量那样注册一个数组变量:

session_register('faves');

引用数组变量与引用简单变量没有什么二样,如果一个用户在网页上指出在生活中的爱好时,可以把他的爱好注册到一个被称作$faves的数组变量中,然后可以在另一个网页中很方便地把这些爱好显示出来:

<?

session_start();

echo "My user likes:

<ul>";

while (list(,$v) = each ($faves)) {

echo "<li>$v"; }

echo "</ul>";

?>

然后你就得到了一个关于用户爱好的清单。

对话变量不能被查询字符串覆盖,也就是说我们不能输入http:///www.yourdomain.com/yourscript.php?count=56给注册变量$count指定一个新值,这一点对于安全很重要:只能在服务器端的脚本中删除一个没有注册的对话变量。

如果要完全删除一个对话变量,首先需要从系统中注销它:

session_unregister('count');

要完全删除一个对话变量的脚本是非常简单,如下所示:

session_destroy();

使用对话变量可以减少访问数据库的频率,使代码更加清晰,而且可以减少对用户发送的cookie的数量,它是最简单的方法了。

三、文件是我们的朋友

无论你在开发的网站规模的大小,都应该意识到代码重用的重要性,无论这些代码是HTML、还是PHP代码。例如,你必须至少每年改变一次包含版权信息的页脚,如果你的网站含有1000个页面,每年修改一次也是个很烦人的事儿。

在PHP中,至少有几个函数可以帮助你实现代码重用的目的,所使用的函数取决于你所重用的代码,主要的函数有:

* include() and include_once()

* require() and require_once()

include()函数包含并对给定的文件进行计算,例如:

include('/home/me/myfile');

在include文件中的任何代码都在include()出现的代码范围内执行,你可以通过联合使用include()和fopen()在自己的服务器上包含静态文件,在另一台服务器上包含目标文件。

include_once()的功能与include()相同,二者之间的区别在于它会检查一个文件中的代码是否已经包含在现有的脚本中,如果代码已经存在,则不会再次包含它。

require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。

为也了解其内容,在版权信息、静态文字和其他不包含变量的元素或者依赖其他正在执行的脚本的元素中我更趋向于使用require函数。例如:

<HTML>

<HEAD><TITLE>Something</TITLE></HEAD>

<BODY>

[a lot of content]

<?

// insert copyright

require('/home/me/mycopyright');

?>

</BODY>

</HTML>

另一方面,我经常在文件的开始使用include()来控制许多的函数:

<?

//得到函数库

include('/home/me/myfunctions');

// do PHP things with my functions ?>

<HTML>

<HEAD><TITLE>Something</TITLE></HEAD>

<BODY>

[a lot of content]

</BODY>

</HTML>

下一个问题就该是“include和require文件在哪里?”,对这个问题简单的回答是,“系统中的任意地方。”如果你的代码中包含有带有用户名和口令的数据库连接,你肯定不会将它们都放在文档根目录中向所有的人都开放。

included或required文件可以在系统上的任何地方,只要PHP运行的系统上的用户可以访问这些文件即可,你可以使这些文件具有任何后缀,或者不使用后缀。

使用include()和require()对在网站中的元素进行具体化是一种普遍的现象,并在需要对网站升级时,给你带来很大的方便。

四、PHP和文件系统的维护

PHP中有许多与文件系统有关的函数,这些函数不仅可以打开文件,还可以显示目录中的内容、移动文件和其他一些功能,许多人甚至用PHP开发基于互联网的文件资源管理器。

关于文件路径的解释:在Windows中,可以在路径中使用/和符号,而在其他的操作系统中只能使用/符号。出于一致性的缘故,我们统一使用/符号。

下面的脚本样例可以显示一个目录清单,注释已经包含在代码中:

<? /*把要读取的目录的全路径名存入一个名字为$dir_name的变量中。 */

$dir_name = "/home/me/";

/* 创建一个句柄,其值是打开一个给定目录的结果*/

$dir = opendir($dir_name);

/* 建立一个文字块,用以放置列表元素(文件名字)*/

$file_list = "<ul>";

/* 使用一个while语句,读取已经打开的目录中的所有元素,如果文件的名字不是“.”或“..”,则显示列表中的名字*/

while ($file_name = readdir($dir)) {

if (($file_name != ".") && ($file_name != "..")) {

$file_list .= "<li>$file_name";

}

}

$file_list .= "</ul>";

/*关闭打开的目录,结束PHP模块*/

closedir($dir);

?>

<!-- Start your HTML -->

<HTML>

<HEAD>

<TITLE>Directory Listing</TITLE>

</HEAD>

<BODY>

<!-- Use PHP to print the name of the directory you read -->

<P>Files in: <? echo "$dir_name"; ?></p>

<!-- Use PHP to print the directory listing -->

<? echo "$file_list"; ?>

</BODY>

</HTML>

好了,我们已经得到了一个目录清单。需要注意的是,要读取一个文件(稍后我们将进行讲解)或目录的内容,PHP运行的系统上的用户必须至少有读取文件的权限。

下面是一个如何拷贝文件的例子:

<? /*把你要拷贝的原文件的全路径赋给一个名字为$original的变量中,把拷贝的文件的全路径赋予一个名字为$copied的变量中*/

$original = "/home/me/mydatabasedump";

$copied = "/archive/mydatabasedumo_1010";

/* 使用copy()函数拷贝原始文件,如果拷贝没有完成则会显示一个错误信息*/

@copy($original, $copied) or die("Couldn't copy file.");

?>

这个例子是一个文件备份系统的原型。在这段脚本运行时,它把文件拷贝到一个不同的位置进行保存。稍微修改一下守护程序,就可以在一天中你指定的时刻执行它,而无需用户的干预。

假定你在系统上安装了Lynx,可以创建一个守护程序的条目访问这个文件,访问这个文件会运行这个脚本并建立一个拷贝文件,下面的例子将在上午5点钟运行这个脚本,然后关闭Lynx:

0 5 * * * [username] lynx -dump http://localhost/copyfile.php 1>/dev/null 2>&1

如果运行的是CGI版本的PHP,可以跳过Lynx部分,而直接调用二进制文件:

0 5 * * * [username] php /path/to/copyfile.php 1>/dev/null 2>&1

五、丰富的数组函数

PHP 4.0中新添加了30个与组数有关的函数,其中一些常见的函数可以判断一个数组中是否包含某个元素,对一个数组中的元素进行计数,添加或删除数组中的元素或者对数组中的元素进行排序。

如果有一个很大的数组,而你需要找出其中是否包含一个特定的元素,就可以使用in_array()。下面的例子将显示“Not found in this array”,因为在一个名字为$namesArray的数组中查找Albert,而在$namesArray数组中不存在这样一个元素。

<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");

$lookingFor = "Albert";

if (in_array($lookingFor, $namesArray)) {

echo "You've found it!";

} else {

echo "Not found in this array!";

}

?>

如果把$lookingFor的值改为Mary,就会得到“You've found it!”的信息,因为Mary是$namesArray数组中的一个元素。

如果要对一个数组中的元素个数进行计数,只要简单地使用count()函数即可:

<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");

$count = count($namesArray); ?>

返回的$count的值为7。

可以在一个数组的开头或结尾处添加元素,还可以使用array_merge()来建立一个包含二个或更多数组中元素的新数组,合并时,元素的顺序会按指定的顺序排列,如果原来的数组是被排过序的,在合并后需要对它重新排序。

我们可以首先利用array_push()在数组的结尾处添加一个元素:

<? /* 建立一个数组 */

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 向数组中添加元素 */

array_push($fruitArray, "grape", "pineapple", "tomato");

/*显示每个元素及其序号*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

?>

运行上面的程序将得到下面的结果:

0 : apple

1 : orange

2 : banana

3 : kiwi

4 : pear

5 : grape

6 : pineapple

7 : tomato

如果需要在数组的开头添加元素,其代码与上面的代码差不多,唯一的不同之处是需要用array_unshift()代替array_push()。

<?

/* 建立一个数组*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 向数组中添加元素*/

array_unshift($fruitArray, "grape", "pineapple", "tomato");

/* 显示每个元素及其序号*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

?>

运行上面的程序将得到下面的结果:

0 : grape

1 : pineapple

2 : tomato

3 : apple

4 : orange

5 : banana

6 : kiwi

7 : pear

array_merge()函数可以把二个或更多的数组合并为一个数组。

<? /*建立第一个数组*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/*/建立第二个数组*/

$vegArray = array("carrot", "green beans", "ASParagus", "artichoke", "corn");

/*把这二个数组合并为一个数组*/

$goodfoodArray = array_merge($fruitArray, $vegArray);

/* 显示每个元素及其序号*/

while (list($key,$value) = each($goodfoodArray)) {

echo "$key : $value<br>";

}

?>

运行上面的脚本将得到下面的结果:

0 : apple

1 : orange

2 : banana

3 : kiwi

4 : pear

5 : carrot

6 : green beans

7 : asparagus

8 : artichoke

9 : corn

现在我们已经掌握了如何添加元素和合并数组,我们再来看看如何从一个数组中删除元素。从一个数组的末尾删除一个元素可以使用array_pop()函数,使用array_shift()函数可以从一个数组的开头删除一个元素。尽管使用array_pop()或 array_shift()从数组中删除了一个元素,你还可以把这个元素当作一个变量来使用。

使用array_pop()从一个数组的末尾删除一个元素:

<?

/*建立一个数组*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 从数组的末尾删除一个元素*/

$popped = array_pop($fruitArray);

/* 显示删除后数组的内容和你删除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

echo "<br>and finally, in $popped: $popped";

?>

运行上面的脚本会得到下面的结果:

0 : apple

1 : orange

2 : banana

3 : kiwi

and finally, in $popped: pear

我们再来讨论一个从一个数组的末尾删除元素的例子:

<?

/* 建立一个数组*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/*从一个数组的开始删除一个元素*/

$shifted = array_shift($fruitArray);

/* 显示删除后数组的内容和你删除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

echo "<br>and finally, in $shifted: $shifted";

?>

运行上述脚本会得到如下的显示结果:

0 : orange

1 : banana

2 : kiwi

3 : pear

and finally, in $shifted: apple

另外还有几个函数可以对数组中的元素进行排序,但在这里我们将只简要介绍基本的排序函数,说明排序的过程:

<? /*建立一个数组*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 对数组进行排序*/

sort($fruitArray);

/*显示每个元素及其序号*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

?>

运行上述的脚本会得到如下的显示结果:

0 : apple

1 : banana

2 : kiwi

3 : orange

4 : pear

六、动态图像的创建

只要安装一些第三方的库文件并具有一定的几何知识,就可以利用PHP来创建和处理图像了。事实上,这不需要太多的几何知识,因为我大学没有毕业,仍然可以利用PHP创建图像。

在使用基本的图像创建函数之前,需要安装GD库文件。如果要使用与JPEG有关的图像创建函数,还需要安装jpeg-6b,如果要在图像中使用Type 1型字体,则必须安装t1lib。

在建立图像创建环境之前,还需要作一些准备工作。首先,安装t1lib;其次安装jpeg-6b,然后再安装GD库文件。在安装时一定要按这里给定的顺序进行安装,因为在编译GD为库时会用到jpeg-6b,如果没有安装jpeg-6b,在编译时就会出错。

在安装完这三个组件后,还需要重新配置PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一。运行make clean,然后在当前的配置中添加下面的内容:

--with-gd=[/path/to/gd]

--with-jpeg-dir=[/path/to/jpeg-6b]

--with-t1lib=[/path/to/t1lib]

完成添加后执行make命令,然后再执行make install命令。重新启动Apache后运行phpinfo()来检查一下新的设置是否生效了。现在就可以开始图像创建工作了。

根据所安装的GD库文件的版本不同,你也许能或者不能创建GIF或PNG格式的图形文件,如果安装的是gd-1.6或以前的版本,可以使用GIF格式的文件但不能创建PNG格式,如果安装的是gd-1.6以后的版本,可以创建PNG文件但不能创建GIF格式的文件。

创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。

在这个例子中,我们将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:

<? header ("Content-type: image/png");

使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250X250的图像,就可以使用下面的语句:

$newImg = ImageCreate(250,250);

由于图像还是空白的,因此你可能会希望用一些彩色来填充它。然而,你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:

$skyblue = ImageColorAllocate($newImg,136,193,255);

接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:

ImageFill([image], [start x point], [start y point], [color])

ImageFill($newImg,0,0,$skyblue);

最后,建立图像后释放图像句柄和所占用的内存:

ImagePNG($newImg);

ImageDestroy($newImg); ?>

这样,创建图像的全部代码如下所示:

<? header ("Content-type: image/png");

$newImg = ImageCreate(250,250);

$skyblue = ImageColorAllocate($newImg,136,193,255);

ImageFill($newImg,0,0,$skyblue);

ImagePNG($newImg);

ImageDestroy($newImg);

?>

如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,就会看到一个天蓝色的250X250的PNG格式的图像。

我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:

假设你有一幅图像,想从中裁剪出一个35X35大小的图像。你所需要作的是创建一个35X35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。

要完成这一任务的关健函数是ImageCopyResized(),它要求的格式如下所示:ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])。

<? /* 发送一个头部,以便让浏览器知道该文件所包含的内容类型*/

header("Content-type: image/png");

/* 建立保存新图像高度和宽度的变量*/

$newWidth = 35;

$newHeight = 35;

/* 建立给定高度和宽度的新的空白图像*/

$newImg = ImageCreate($newWidth,$newHeight);

/* 从原来较大的图像中得到数据*/

$origImg = ImageCreateFromPNG("test.png");

/*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小 */

ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));

/*创建希望得到的图像,释放内存 */

ImagePNG($newImg);

ImageDestroy($newImg); ?>

如果把这一小段脚本保存为resized.php,然后用浏览器对它进行访问,就会看到一个35X35大小的PNG格式的图形。

七、基于PHP的用户认证

如果希望在每一段脚本上都进行口令保护,可以结合使用header()语句、$PHP_AUTH_USER和$PHP_AUTH_PW来建立基本的认证方案,通常的基于服务器的提问/响应顺序都如下所示:

1、用户从服务器上请求一个文件。如果这个文件在服务器上是被保护的,则在响应的头部向用户返回一个401(示经授权的用户)字符串。

2、浏览器收到这个响应后,弹出要求用户输入用户名/口令的对话框。

3、用户在对话框中输入一个用户名和口令,点击OK按钮将信息返回服务器供认证使用。

4、如果用户名和口令有效,被保护的文件将向用户开放,只要用户还在使用文件,认证会一直有效。

一段简单的PHP脚本文件通过向用户发送一个适当的能够引起自动显示用户名/口令对话框的HTTP头部就可以模仿HTTP的提问/响应系统,PHP把用户在用户名/口令对话框中输入的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW中,使用这二个变量,就可以与存储在文本文件、数据库等文件中的用户名/口令进行比较。

这个例子采用了二个硬编码的值进行认证,但无论用户名和口令放在什么地方,其原理都是相同的。

<?

/* 检查$PHP_AUTH_USER和$PHP_AUTH_PW中的值*/

if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {

/* 如果没有值,则发送一个能够引发对话框出现的头部*/

header('WWW-Authenticate: Basic realm="My Private Stuff"');

header('HTTP/1.0 401 Unauthorized');

echo 'Authorization Required.';

exit;

} else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){

/* 变量中有值,检查它们是否正确*/

if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {

/* 如果输入的用户名和口令中有一个不正确,则发送一个能够引发对话框出现的头部 */

header('WWW-Authenticate: Basic realm="My Private Stuff"');

header('HTTP/1.0 401 Unauthorized');

echo 'Authorization Required.';

exit;

} else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {

/* 如果二个值都正确,显示成功的信息 */

echo "<P>You're authorized!</p>";

}

}

?>

需要注意的是,如果你使用的是基于文件的保护机制,它并不能保证目录中所有的文件的安全。它可能保护大部分的文件,如果你认为它能够保护给定目录中的所有文件,你的这种认识就需要变变了。

八、PHP和COM

如果你喜欢冒险,并且在Windows上运行CGI、ISAPI或Apache模块版本的PHP,就可以访问COM的函数。好了,详细解释COM的工作就交给微软和许多大部头的书了,为了能简单地了解一下COM的功能,下面是一小段常见的脚本。

这一段PHP脚本在后端启动微软的字处理Word,打开一个新的文档,输入一些文字,保存文档,并关闭Word。

<?

// 建立一个指向新COM组件的索引

$word = new COM("word.application") or die("Can't start Word!");

// 显示目前正在使用的Word的版本号

echo "Loading Word, v. {$word->Version}<br>";

// 把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)

// to open the application in the forefront, use 1 (true)

$word->Visible = 0;

// 在Word中创建新的文档

$word->Documents->Add();

// 在新文档中添加文字

$word->Selection->TypeText("Testing 1-2-3...");

//把文档保存在Windows临时目录中

$word->Documents[1]->SaveAs("/Windows/temp/comtest.doc");

// 关闭与COM组件之间的连接

$word->Quit();

// 在屏幕上显示其他信息

echo "Check for the file...";

?>

如果你有一个intranet网站,数据存储在SQL Server中,用户需要这些数据的Excel格式,则可以让PHP运行必要的SQL查询并对输出进行格式化,然后利用COM打开Excel,把数据转化为Excel格式的数据,然后把数据保存在用户的台式机上。

九、PHP和Java

PHP另一个有趣的功能是它可以调用现有的Java 对象中的方法,使得你可以在基于Java的应用中集成PHP。如果要在工作中推广PHP的应用,这一功能就非常有用了,你得到的结果是,“这里的一切都是基于Java的。”

要利用这一功能,你的服务器上必须安装有JVM(Java虚拟机器)。如果安装的是由Sun、Kaffe、IBM或Blackdown的JDK,就已经安装有了JVM。

在配置PHP时,需要在配置文件中添加with-java小节,然后修改php.ini文件中的一部分,对php.ini文件的修改主要是需要添加下面的内容:

[Java]

java.library.path=/path/to/library

java.class.path=/classpath/

extension_dir=/path/to/extensions

extension=libphp_java.so

需要注意的是,所作的修改与你的安装类型有关,你需要阅读PHP安装目录下ext/java目录中README文件,学习如何配置Java功能。

下面是一段如何创建一个新的Java对象的PHP脚本的例子,这段脚本将访问并在显示器是显示一些Java属性。它与COM的例子同样有趣,应该会给我们一些启发。

<?

$system = new Java("java.lang.System");

echo "<P>Java version = " . $system->getProperty("java.version") . "<br>";

echo "Java vendor = " . $system->getProperty("java.vendor") . "</p>";

?>

如果你有Java知识,将会对开发工作带来很大的帮助,这种集成的能力是未来PHP被接受和增长的关健。

十、PHP和XML

PHP中包含有一个可选的支持Expat解析的XML扩展,利用PHP中与XML相关的函数,可以创建一个分析程序来处理有效的XML文档。如果你使用的是1.3.7版或版本更高的Apache软件,就不需要再安装额外的库文件了,你所需要作的就只是配置PHP中的with-xml。

象Java和COM一样,PHP中对XML的支持也很有趣,而且增长也很快,如果你了解Expat或LibXML,请加入这一方面的开发吧。

本文标题:经验技巧-甩棍经验技巧
本文地址: http://www.61k.com/1069534.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1