as相关英语所有的语法大全分析,前两个as从语法角度如何理解?或者说这整句话的结构如何理解?


提要 本文综述当前国外关于语言“主观性”(subjectivity)和“主观化”(subjectivisation)的研究情况。“主观性”是指语言的这样一种特性,说话人在说出一段话的同时表明自己对这段话的立场、态度和感情,“主观化”(subjectivisation)是指语言为表现这种主观性而采用相应的结构形式或经历相应的演变过程。重视这方面的研究跟近来语言学“人文主义”的复苏有关,特别是功能语言学、语用学、“认知语法”的兴起,使长期以来占主导地位的结构语言学和形式语言学所主张的“科学主义”受到挑战。文章首先对研究比较集中的三个方面作了介绍,即1)说话人的视角(perspective);2)说话人的情感(affect);3)说话人的认识(epistemic modality)。对“主观化”的研究有侧重历时相和侧重共时相两种取向,前者以E.Traugott的“语法化”(Grammaticalisation)研究为代表,后者以R.Langacker的“认知语法”为代表。本文对这两种取向的差异和相通之处作了介绍。一、什么是“主观性”和“主观化”?“主观性”(subjectivity)是指语言的这样一种特性,即在话语中多多少少总是含有说话人“自我”的表现成分。也就是说,说话人在说出一段话的同时表明自己对这段话的立场、态度和感情,从而在话语中留下自我的印记。(参看Lyons 1977:739) “主观化”(subjectivisation)则是指语言为表现这种主观性而采用相应的结构形式或经历相应的演变过程。按照这个定义,“主观化”既是一个“共时”的概念,即一个时期的说话人采用什么样的结构或形式来表现主观性,又是一个“历时”的概念,即表现主观性的结构或形式是如何经历不同的时期通过其他结构或形式演变而来的。当前对“主观化”的研究取向,有人侧重“共时”,有人侧重“历时”。人们早就已经注意到语言的“主观性”。有的语言表现“主观性”的形式很明显,例如日语,说日语时几乎不可避免地要用明确的语言形式来表达说话人对所说内容和对听话人的态度或感情。因此日本的学者很早就开始注意日语中的“主观性”成分。像英语这样的语言“主观性”的表现方式比较隐晦,但仍然大量存在。Benveniste (1971:225) 指出:“语言带有的主观性印记是如此之深刻,以至于人们可以发问,语言如果不是这样构造的话究竟还能不能名副其实地叫做语言。”然而在结构语言学和形式语言学占主导地位的情形下,语言学家对语言的“主观性”长期不予重视。这主要是因为他们认为语言的功能就是“客观地”表达命题,不愿意承认话语中还有表现自我的主观成分。对语言“主观性”的研究因而至多限于文学研究的范围而没有进入语言学的领域。连1992年出版的四卷本《语言学国际词典》(W. Bright编)都没有给“主观化”列条。Lyons(1982:103)指出:“现代英美语言学家……一直有一种唯理智论的偏见,即认为语言基本上是(即便不完全是)用来表达命题式思维的。”近些年来,语言学家开始对语言的“主观性”和“主观化”给予充分的关注,这跟近来语言学“人文主义”的复苏有关,特别是功能语言学、语用学、认知语法的兴起,使长期以来占主导地位的结构语言学和形式语言学所主张的“科学主义”受到挑战。新起的这些学派都强调,语言不仅仅是客观地表达命题式的思想,还要表达言语的主体即说话人的观点、感情和态度。上面引的Lyons 1982的那篇论文就是针对语言学中的笛卡儿主义和新笛卡儿主义,指出说话人在语句中的自我表现并不能归属于一组命题。20世纪之初,布龙菲尔德把语义的研究排除在语法研究之外,而到了世纪之末,语义成了注意的焦点,而人们对意义的认识和运用必然带有很大的主观性。这也是语言的“主观性”和“主观化”得到重视的原因之一。1992年在剑桥大学的St Catharine 学院召开了一次关于语言中“主观性”和“主观化”的专题研讨会,Lyons到会致开幕词,会议论文编集出版,书名就叫《主观性和主观化》(Subjectivity and Subjectivisation, D. Stein & S. Wright主编,剑桥大学出版社1995年出版)。二、研究比较集中的三个方面语言必然带有自我表现的印记,这一点现在已经明确;不明确的是,语言的这种自我印记是如何表现和如何被理解的?语言的主观性和主观化有没有跨语言的共性?有没有文化造成的差异?对这些问题,共时的情形还不清楚,历时的情形就更是模糊不清。上述论文集的第一篇文章是对当前“主观性”和“主观化”研究的综述,作者Edward Finegan认为研究主要集中在以下三个方面:1)说话人的视角(perspective)2)说话人的情感(affect)3)说话人的认识(epistemic modality)其实这三个方面互有交叉和联系,很难截然分开,只是为了叙述方便大致作出的区分。先分别举例说明如下。“视角”就是说话人对客观情状的观察角度,或是对客观情状加以叙说的出发点。这种“视角”主观性经常以隐晦的方式在语句中体现出来,最典型的例子是动词的“体”(aspect),可比较下面两个英语句子:(1) John is gone.(2) John has gone.(1)只是客观地报道过去发生的一个动作(约翰离去)及其结果(约翰不在这儿)。(2)是现在完成体,虽然也是表示过去的动作以及结果,但是还涉及说话人的视角:说话人从“现在”(即说这句话的时刻)出发来看这个动作及其结果,主观上认为它跟“现在”有关系,比如说,因为约翰走了,所以他帮不上忙了。因此(2)的主观性程度高于(1)。英语历史上动词完成体是从表示动作结果的构式演变而来的(见下),这就是“主观化”的过程。再看一个例子:(3) Let us go. (让我们走吧!)(4) Let’s go. (咱们走吧!)句子的主语是叙说的出发点,而祈使句的主语(即祈使的对象)通常是听话人,一般不说出来。例如(3)中let的主语是you“你”,如果加疑问尾句得说“Let us go, will you?”,us“我们”是let的宾语,同时是go 的主语,意念上us不包括you在内。(4)与其说是祈使不如说是劝告(hortative),祈使对象有很大变化,let 和go的主语都是“咱们”(包括you 在内),如果加疑问尾句得说“Let’s go, shall we?”。也就是说话人把自我也放在了祈使对象的位置,成了祈使句主语的一部分。如果要区分这两种主语,(3)的主语称作“句子主语”(sentence subject),而(4)的主语称作“言者主语”(speaker subject),或称作“言说主语”(utterance subject)。这两种主语的区分下面还会谈到。跟(3)相比,(4)的主观性较强。英语历史上,古英语只有(3)式,到中古英语才开始出现(4)式。现代英语还有如下的用法,是let’s的进一步主观化:(5)Let’s take our pills now, George. (乔治,咱们吃药!)(6)Let’s see now, what was I going to say. (好吧,看我该说什么了。)(5)是劝诱小孩吃药,说话的父母自己并不吃;(6)中的let’s see已经相当于一个句首的小词,起组织话语的作用。(Traugott 1995)接着谈说话人的“情感”(affect)。“情感”一词应作宽泛的理解,包括感情、情绪、意向、态度等。不少语言学家(如Halliday 1975,Lyons 1977)都提到语言的功能可分为三种,前两种是指称功能和表述功能,第三种就是表情功能。儿童语言研究表明,儿童从很早开始就已经掌握语句的表情结构,例如日本儿童在独词句阶段已经会使用一定的形态来表达感情。感情表达也可以看作一种“社会指称”(social referencing),即人们从周围交往的人和社会环境中获取感情信息来帮助理解不确定的信息,并作出相应的反应。例如,儿童不能确定摆在面前的新玩具是否会伤害自己,就转而看父母的表情,以此来决定自己的行为。成人也是如此,要借助社会语境中的感情成分才能成功地参与社会交往。《文本》(Text)杂志1989年出过一个专刊,名称是《关于情感的语用学》。其中第一篇是E. Ochs & B. Schieffelin 合写的《语言亦有情》(Language has a heart),对语言的各种表情功能和表情方式作了较全面的介绍。语言中的韵律变化、语气词、词缀、代词、副词、时体标记、情态动词、词序、重复等等手段都可以用来表达情感,涉及语音、构词、语法、篇章结构等各个方面。例如,汉语、日语、泰语等语言的被动式都附带“不如意”的主观感觉。在Samoan语,祈使句如用了第一人称代词就有乞求义,“我”成了“可怜的我”。英语状态动词一般没有进行时,一旦用了进行时就带有感情色彩,如“I am missing you terribly”(我可真是想念你呀!)。词序的例子,夏威夷语指代词通常前置于名词,如果后置就一定有不如意的含意。(下面还要谈到德语weil的例子)就我们汉语说,句末的语气词能表达各种感情,形容词的重叠形式带有较明显的主观感情色彩,这都是众所周知的语言事实。总之,对一段话(utterance)而言,很难将它的表述命题内容的部分跟它表述情感的部分明确区分开来,语言系统几乎每个方面都能表达情感。另外,语句中表情成分所作用的对象也是多方面的,可以是一个指称对象,一个命题,甚至一系列的命题。对“情感”的研究比较深入的是所谓的“移情”(empathy)现象。Kuno(1987)指出第三人称反身代词的用法在很多情形里无法用纯粹的句法规则加以说明,而是跟说话人是否“移情”于所指对象有关。例如下面(6)中的himself:(6)John was worried about what Sheila would do. As for himself, he knew the best plan.(约翰很担心希拉会干些什么。对他自己来说,他最知道该怎么办。)后面一句如果用一般代词him(As for him, ……),是说话人客观报道约翰最知道该怎么办;这里用了反身代词himself(一般所说的“强调”用法),那就是说话人站在约翰的立场上,直接表达约翰内心的想法。可以这样说,在意念上这样的表达相当于一个直接引语:(7)John thought, “As for me/myself, I know the best plan.”在(6)中说话人没有用“John thought”这样的字眼,而是直接表达了约翰的想法。Kuno对“移情”的定义因此是“说话人将自己认同于……他用句子所描写的事件或状态中的一个参与者”。(Kuno 1987:26)这里也可以看出,说话人的“情感”跟“视角”两者有密切的联系,很难分清楚。汤廷池(Tang 1986)按照Kuno的思路,从汉语出发提出话语中表达说话人“移情”焦点的一些原则和“移情”的程度等级(speaker’s empathy hierarchy),例如:(8)张三打了李四。张三打了他的太太。李四的丈夫打了她。李四被张三打了。李四被她的丈夫打了。同样是丈夫(张三)打老婆(李四)这一事件,说话人的移情(同情)对象可以是张三,也可以是李四。上面第一句是纯客观的报道,下面的句子则是说话人的移情焦点逐渐从张三移向李四。用“他的太太”来称呼“李四”是同情“张三”,用“李四的丈夫”或“她的丈夫”来称呼“张三”是同情“李四”。用被动式“李四被张三打了”也是将同情对象移到“李四”。这说明指称形式的选择和句式的变换都跟“移情”有关。张宏明(Zhang 1994)则从历时的角度证明汉语的“被”字句是“移情”这一主观化的产物。最后谈说话人的“认识”。“认识”主要跟情态动词和情态副词有关。就语言的“主观性”而言,要数这方面的研究最为深入。例如:(9) a. He must be married. (他必须结婚了。)b. He must be married. (他必定结婚了。)英语情态动词must表示“必须”时属于行动情态(deontic modality),如(a)是表示客观上他有采取某项行动(结婚)的必要;而表示“必定”时属于认识情态(epistemic modality),如(b)是说话人主观上对命题“他结婚了”是否真实所作出的判断。换一个角度说,(a)句的he是“句子主语”或“语法主语”,(b)句除了这个语法主语,还隐含一个高层次的“言者主语”,是说话人认定“他结婚了”。显然,(b)句的主观性比(a)句强。从历史上看,情态动词的认识义都是从行动义演变而来的。有一种观点认为,这种演变是通过“隐喻”实现的,即概念从“行动”这个比较具体的认知域投射(mapping)到“认识”这个比较抽象的认知域。(Sweetser 1990,另见沈家煊1997)除了情态动词,一些连词,特别是表示因果关系的连词,也有客观描述和主观认识之别:(10)小王回来了,因为他还爱小丽。(11)小王还爱小丽,因为他回来了。(10)是说明“小王还爱小丽”是“小王回来”的原因,这种因果关系是一种客观的因果关系;(11)不是表示“小王回来”是“小王还爱小丽”的原因,而是说话人根据自己的知识而作出一种主观推定,即“我推定小王还爱小丽,因为我知道他回来了”。因此(11)的主观性强,历史上后一种用法也是后起的。下面这个句子有歧义:(12)小王回来了,因为他的包在这儿。可以理解为小王的包在这儿是他回来取的原因,也可以理解为我看到小王的包在这儿是我推断他已经回来了的原因。有意思的是,在有的语言里,这两种因果关系用不同的词序来加以区别,例如德语的weil“因为”:(13)Er ist nach Hause gegangen, weil er Kopfweh hatte.(他回家了,因为他头疼。)(14)Er ist nach Hause gegangen, weil er hatte Kopfweh.(我推定他回家了,因为我知道他头疼。)(13)是回答“他为什么回家?”,(14)是回答“你怎么知道他回家了?”(13)是关于他头疼的事实,(14)是关于他头疼的知识。大家知道,德语里从句的词序跟主句的不一样,动词居句末,如(13)中的hatte。但是如果是像(14)表达主观的认识,则与主句的词序一样,动词居句子的第二个位置。(见Keller 1995)三、“主观化”和“语法化”E. C. Traugott是研究“语法化”的专家,她从历时的角度来看待主观化,认为主观化是一种语义-语用的演变,即“意义变得越来越依赖于说话人对命题内容的主观信念和态度”。语言中用来表达主观性的可识别的语法成分是如何通过非语法成分的演变而逐步形成的,这就是“语法化中的主观化”问题。(Traugott 1995)Traugott认为主观化和语法化一样是一个渐变的过程,强调局部的上下文在引发这种变化中所起的作用,强调说话人的语用推理(pragmatic inference)过程。语用推理的反复运用和最终的凝固化,结果就形成主观性表达成分。而语用推理的产生是由于说话人在会话时总想用有限的词语传递尽量多的信息,当然也包括说话人的的态度和感情。例如:(15) a. Mary read while Bill sang.(比尔唱歌的时候玛丽在看书。)b. Mary liked oysters while Bill hated them.(玛丽喜欢吃牡蛎,而比尔讨厌牡蛎。)英语的while从“同时”的意思演变为让步转折的意思,众所周知是个语法化或“虚化”的过程,其实也是个主观化的过程,后者的主观性比前者强。演变是由语用推理引起的:while连接A和B两个动作,表示在发生B的同时发生A。由于说话人还主观上对A和B的同时发生感到意外(两件事同时发生的概率不高),因而产生出转折的意思。这种语义的主观化在英语里还没有完全语法化,因为while虽然有了表转折的义项,表同时的义项并没有消失。这跟德语里的weil不一样,weil原义也是表示“同时”,但现在只表示“因为”,因此已经完全语法化,这一演变的原因也是当发生B的同时发生A时,说话人会主观地认为B是A发生的原因。前面说过,英语现在完成体表示过去发生的事件与当前有关,这一“与当前有关”的概念带有主观性。历史上完成体“have done X”构式是从表结果的构式“have X done”演变而来的,这一演变也可以视为“因果”这一概念的抽象或泛化,即动作和结果的关系越来越不依赖于动词本身的词义,而是越来越依赖于说话人的判断。这种变化可能首先发生在知觉动词上,例如:(16)Since you have (often) heard about X…,(既然你(经常)听说过X…,)知觉动词和动作动词的区别在于,主语对动作有控制能力,一件事可以做也可以不做,但主语对知觉(例如“听到”)并没有控制能力,是否听到一句话是不以主观意志而转移的。因此说(16)这句话时,字面上是表达“你听到X”这一听觉结果,实际是说话人要传递“你已理解X”这一隐涵意义。这个隐涵意义是根据语用原则(如Grice提出的“合作原则”中的“适量准则”)推导出来的。说一个人“听X”有了结果,即“已听到X”,这并没有提供足量的信息,因为这个结果是必然的。之所以还这么说一定是另有含意,即说话人是想表达听者“已理解X”。也就是说,“听到”在会话中隐涵“理解”;同样,“看见”在会话中隐涵“相信”:(17)你都听清了吧?(隐涵“你该理解了吧?”)你都看见了吧?(隐涵“你该相信了吧?”)听话人的知觉引起知识状态的变化,这种因果关系可以看作“因果”概念的进一步抽象,它带有说话人推断的性质,因此带有主观性。从语用学的角度讲,语用推理或会话推理是“隐涵义”(implicature)而不是“衍推义”(entailment),因而在一定的语境或上下文中是可以被“消除”的,例如:(18)你所说的我都听到了,但是我还是不明白。由语用推理引起的语义变化又会引发结构上的重新组合或重新分析(reanalysis),就这个例子而言,就是:have + (X + done)? (have + done) + X在表动作结果的构式have X done 中,当do为动作动词时,have的主语不一定与do的主语一致,例如“I have the watch repaired”,不一定是我自己动手把表修好了。但当do为知觉动词时,如“I have X heard”, have 的主语必定和do的主语一致,即两者共有一个主语,于是导致结构上have和do的结合和完成体构式的产生。当状态动词也可以进入这个格式,或当it可以作这一构式的主语时,英语的完成体构式就完全形成了。(见Carey 1995)再例如,英语表空间移动的be going to“正在去”虚化为表示“将来时”,最初也是因为后面带上了心理动词(hear, like)或动词的被动式(如“his soul was going to be brought into hell”),从而降低了主语的意愿性和目的性,也降低了go这一动作的方向性。后来主语可以是无生命体(It seems as if it were going to rain),就彻底完成了向将来时的过渡。(Traugott 1995)关于go的虚化,下面还会谈到。由此引发的一个问题是,是否所有的语法化都涉及主观化?Traugott认为很可能如此,主观化可以说是无处不在。说话人要达到交流信息的目的,总要不断地借助一些表达实在意义或用作客观描述的词语,加上自己对客观情形的主观“识解”(construal),从而把说话的目的和动机也传递给对方。(所谓“识解”,是指说话人或听话人对一个客观情景加以认识而形成的概念,主观的识解包括视角和意象等。见Langacker 1991:215)她认为语法化中的主观化表现在互相联系的多个方面:由命题功能变为言谈(discourse)功能;由客观意义变为主观意义;由非认识情态变为认识情态;由非句子主语变为句子主语;由句子主语变为言者主语;由自由形式变为黏着形式。在研究不同词项的“主观化”过程和揭示其共同规律时,这些方面都可以作为参照因素。(Traugott 1995)语法化涉及的演变在语义上一般是由“实”变“虚”,在形式上一般是由“自由”变为“黏着”,极少有相反的情形,这叫做语法化的“单向性”。Traugott还认为,单向性的例外一般都发生在语法化的后期,而且有一些这样的反例,如由黏附词缀变为自由语素,仍然是主观性得到加强(Traugott 1995: 46)。这就又提出了一个问题,语义的演变是否主观化比虚化更为基本。讲语义“虚化”,西方语言学家常用semantic bleaching,是语义淡化或语义消退的意思。现在有不少研究语法化的专家认为,从主观化的角度看,语义并没有淡化或消退,只不过是减弱了客观意义,加强了主观意义,这只是语义的重新调整(realignment)而已。四、“主观化”和“认知语法”R. W. Langacker是“认知语法”的开创者(见沈家煊1994的介绍),跟历史语言学家Traugott的侧重不一样,他是从共时的角度来看待“主观化”。他主要关心的不是语言中的主观性成分形成的历史过程,而是从认知出发来观察日常语言的使用,看说话人如何出于表达的需要,从一定的视角出发来“识解”(construe)一个客观的情景。不过,语法化要涉及主观化,语法化和主观化主要来自语用推理而不是隐喻,在这两个观点上,他跟Traugott等人是一致的。例如关于go的语法化,他举如下的例子:(19)Mary is going to close the door.(玛丽正走过去关门。)(20)An earthquake is going to / gonna destroy the city.(有一场地震将摧毁这座城市。)Eve Sweetser(1990)等人用“隐喻”(metaphor)或空间域到时间域之间的投射来解释这一语法化过程,但是光是这样的解释会有困难:(19)表示空间移位,是主语“玛丽”在一条具体的路径上移位,移位结束后才开始进行由不定式表示的动作“关门”;(20)虽然可以说是一场地震在一条抽象的时间路径上移位,但不能说移位的结束才开始“摧毁这座城市”,实际上按句子的意思地震和摧毁是同时发生的。另外,隐喻的说法也无法解释为什么空间域to 后可以跟名词性成分,而时间域to后头只能跟动词性成分。Langacker(1990)认为,go由空间义转变为时间义表示将来,经历的是一个主观化的过程。(19)中的主语“玛丽”既是穿越路径的人又是关门的实施者,(20)中的“地震”只是动作“摧毁”的实施者,不是路径的穿越者。也就是说,不是主语“地震”在通过一个路径,而是说话人在心理上穿越一个路径,这就是上面所说的“言者主语”。因此Langacker定义的“主观性”还包括说话人对情景的“心理扫描”(mental scanning),更明显的例子是:(21) The hiker ran up the hill.(徒步旅行者跑上山头。)(22) The highway runs from the valley floor to the mountain ridge.(公路从谷底延伸到山脊。)(21)是对徒步旅行者在空间移动的客观描述,(22)并不是公路在作空间移动,是说话人想象公路在作空间的移动,因此这句的动词run带有主观性。在Langacker的“认知语法”体系中,“主观化”被定义为:将实体与实体之间的关系从客观轴调整到主观轴。为了阐释这个定义,他打了个比方:如果把戴着的眼镜褪下来拿在手里作为观察的对象,眼镜的客观性就强;如果是戴着眼镜看东西,眼镜已成为观察主体的组成部分,眼镜的主观性就强。又用“舞台”来打比方,作为观察对象的眼镜是在舞台上,是台下观察主体注意的中心;作为观察主体一部分的眼镜不是注意的中心,不再舞台上而在舞台下。同样,对语句表达的客观情景,说话人作为感知的主体,对其中某一实体的“识解”可以是客观的,意识到知觉客体的存在,也可以是主观的,未意识到知觉客体的存在,因为它已成为知觉主体的一部分。上述定义的一个关键概念是“言语场景”(Ground),实际就是指“言语事件”(speech event),包括会话的参与者和说话环境。实体与实体之间的关系如果不引发“言语场景”,这种关系处于客观轴上,如果引发“言语场景”,这种关系就处在主观轴上。拿上面(19)和(20)两句话来说,“玛丽关门”和“地震摧毁城市”在概念上都是表示两个实体之间的“关系”,“玛丽”和“门”之间的关系,“地震”和“城市”之间的关系。这两个实体在“认知语法”中分别称作“射体”(Trajector)和“陆标”(Landmark)。“主观化”是将这两个实体之间的关系为从客观轴调整到主观轴,图示如下。G代表“言语场景”,tr和lm分别代表“射体”和“陆标”。连线xy代表实体之间的关系。(19)是对两个实体间关系的客观描述,不涉及“言语场景”,xy处在客观轴上;(20)对关系的描述则涉及“言语场景”,关系中的一部分(即x)调整到了主观轴x’y上。在共时平面上,下面三个句子,Langacker认为它们的主观性逐次加强:(23) a. Mary is sitting across the table from Jane.(玛丽对着简坐在桌子那面。)b. Mary is sitting across the table from me.(玛丽对着我坐在桌子那面。)c. Mary is sitting across the table.(玛丽坐在桌子对面。)(a)没有把说话人自我放进去,只是以Jane为参照点来给Mary定位,因此纯粹是客观描述,不涉及“言语场景”;(b)是以说话人自己为参照点给Mary定位,但这个自我仍然以me的形式在句中出现(仍然在舞台上),因此还是客观描述;(c)虽然也是以说话人自己为参照点,但是没有相应的语言形式出现,因为这个参照点已经成为观察主体即说话人的一部分(在舞台下),句子已由客观的描述转变为主观的“识解”。按上述定义,(a)句Mary和Jane之间的关系、(b)句Mary和me之间的关系都处在客观轴上,(c)句Mary和说话人之间的关系已调整到主观轴上。五、 结语Langacker和Traugott对主观化的研究,虽然取向不同,但又有不少相通之处。例如前面讲到英语完成体形成的历史过程,也可以用Langacker的主观化定义来说明。“He has finished”一句有两种意思,一是单纯表示结果(动作完成),一是完成体(动作的完成跟当前有关)。单纯表示结果时,是以语法主语he“他”为出发点,“他”是客观描写的对象,因此主语和动作完成(可视为一个抽象实体)之间的关系处在客观轴上。变为完成体后,出发点不再是语法主语,而是“言语场景”中的说话人“我”,“我”是主观识见的实体,是“言者主语”,“我”和动作完成之间的关系处在主观轴上。按照Langacker,主观化的程度高低跟语言编码形式的多少成反比:主观化程度越高,观察对象越是脱离舞台,在语句中登台呈现的语言形式就越少,可比较以上(23)的(a)(b)和(c)。按照Traugott,主观化是说话人越来越从自我的视角出发,用会话隐涵义或语用推理来表达未用语言形式表达的意义,结果也是主观化程度越高相应的表达形式越少。主观化的共时相和历时相的关系还值得深入研究。共时研究和历时研究互相依赖、互相促进,这一点是肯定无疑的。以上主要是对国外有关主观性和主观化的研究作了一个介绍。这方面的研究可以说还刚刚开始,总体上还不够深入,但值得引起我们的重视。汉语中有那些表现主观性的方式,汉语的演变史中有哪些涉及主观化;汉语和世界其他语言相比在主观性和主观化上有哪些共通性,又有哪些自身的特点;主观化有没有反例,即有没有主观化减弱的情形。对这些问题我们都应该在国外已有研究成果的基础上作进一步的探索。参考文献Benveniste, E. 1971 Problems in General Linguistics. Trans. M. E. Meek. Coral Gablres, FL: University of Miami Press.Bright, W. 1992 Internatioanl Encyclopedia of Linguistics. 4 vols. Oxford and New York: Oxford University Press.Carey, Kathleen 1995 Subjectification and the development of the English perfect. In Stein & Wright 1995, 83-102.Finegan, Edward 1995 Subjectivity and subjectivisation: an introduction. In Stein, Dieter & S. Wright 1995,1-15.Halliday, M. A. K. 1975 Learning How to Mean. London: Edward Arnold.Keller, Rudi 1995 The epistemic weil. In In Stein & Wright 1995, 16-30.Kuno, S. 1987 Functional Syntax: Anaphora, discourse and empathy. Chicago and London: University Chicago Press.Langacker, R. W. 1987/1991 Foundations of Cognitive Grammar. Vols.I & II, Stanford: Stanford University Press.Langacker, R. W. 1990 Subjectification. Cognitive Linguistics 1: 5-38.Langacker, R. W. 1993 Reference point construction. Cognitive Linguistics 4: 1-38.Lyons, J. 1977. Semantics. 2 vols. Cambridge: Cambridge University Press.Lyons, J. 1982 Deixis and subjectivity: Loquor, ergo sum? In R. J. Jarvella & W. Klein, eds., Speech, place, and action: Studies in deixis and related topics. Chichester and New York: John Wiley, 101-24.Ochs, E., & B. Schieffelin 1989 Language has a heart. In E. Ochs, ed., The Pragmatics of Affect, special issue of Text 9: 7-25.Stein, D. & S. Wright, eds. 1995 Subjectivity and Subjectivisation, Cambridge: Cambridge University Press.Sweetser, Eve 1990 From Etymology to Pragmatics. Metaphorical and Cultural Aspects of Semantic Structure. Cambridge: Cambridge University Press.Tang, Tingchi 1986 Chinese Grammar and Functional Explanation. Chinese World, 39-41.Traugott, E. C. 1989 On the rise of epistemic meanings in English: an example of subjectification in semantic change. Language 64: 31-55.Traugott, E. C. 1995 Subjectification in grammaticalization. In Stein & Wright 1995,31-54.Traugott, E. C. & B. Heine, eds. 1991 Approaches to Grammaticalization. 2 vols. Amsterdam: John Benjamins.Trautgott, E. C. & e. Konig. 1991 The semantics-pragmatics of grammaticalization revisited. In Traugottt & Heine, eds. 1991 Vol. 1, 189-218.Zhang, Hongming 1994 The grammaticalization of bei in Chinese. In Paul Jen-kuei Li, et al, eds., Chinese Languages and Linguistics 2, Academia Sinica, 321-360.沈家煊,1994. R. W. Langacker的“认知语法”,《国外语言学》第1期。沈家煊,1997,词义与认知:《从词源学到语用学》评介,《外语教学与研究》第3期。A Survey of Studies on Subjectivity and SubjectivisationShen JixxuanAbstractThis is a survey of recent studies in the West on linguistic subjectivity and subjectivisation. Subjectivity concerns the linguistic expression of a speaker’s point of view or attitude in discourse, and subjectivisation refers to the structures and strategies that languages evolve in the realisation of subjectivity or to the relevant processes of the evolution themselves. Current interest in the topic is related to a renaissance of humanistic linguistics. Three main areas have been the focus of recent studies, and they are expression of a speaker’s perspective, expression of a speaker’s affect, and expression of a speaker’s epistemic status. There are two approaches in the study of subjectivisation, a diachronic one as adopted by E.Traugott who combines the study of subjectivisation with the study of grammaticalisation, and a synchronic one as represented by R.Langacker who treats subjectivisation in the framework of his “Cognitive Grammar”. The differences and similarities of these two approaches are also pointed out.
}
来源于网络上的集锦,建议收藏点赞关注,慢慢看,蟹蟹1,Http 和Https的区别第一:http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议第二:http和https使用的是完全不同的连接方式,端口也不一样,前者80 或者443第三:http连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议。2.什么方法来加快页面的加载速度1,用到服务器资源时在打开,不用时,立即关闭服务器资源。2,数据库添加索引3,页面可生成静态4,图片等大文件单独放在一个服务器5,能不查询数据库的尽量不去数据取数据,可以放在缓存中。3.表单中 get与post提交方法的区别?答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.4.echo ,print,print_r 的区别:echo 是php语句,无返回值。print,print_r是函数,有返回值。print() 只能打印出简单类型变量的值(如int,string)print_r() 可以打印出复杂类型变量的值(如数组,对象)echo 输出一个或者多个字符串5.session与cookie区别session与cookie相同:跨页面、不跨用户session与cookie不相同:1、session可以存储任意类型的数据,但cookie只能存储字符串2、cookie产生在服务器端、存储在客户端session产生在服务器端、存储在服务器端6.魔术常量答案:__LINE__文件中的当前行号。__FILE__文件的完整路径和文件名。__FUNCTION__函数名称__CLASS__类的名称__METHOD__类的方法名7.数据库中的事务是什么?答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。8.1优化MYSQL数据库的方法。1、选择合适的字段的数据类型1)能用数字不用字符串2)char、varchar、text 能用varchar不用char3)给字段加not null 避免在表中出现NULL关键字(default 值)2、选择合适的字段充当主键1)建议每张表必须有主键2)用数字类型的字段充当主键拆分表拆分字段,将文章的标题与内容分开2)拆分记录,将今年的记录与往年的记录分开给字段合理添加索引a.格式:(普通索引)->创建:CREATE INDEX <索引名> ON tablename (索引字段)修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))(唯一索引)->创建:CREATE UNIQUE <索引名> ON tablename (索引字段)修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))(主键)->它是唯一索引,一般在创建表是建立,格式为:CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])5、事务处理:a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败mysql_query("BEGIN");mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");mysql_query("COMMIT");6、锁定表,优化事务处理:a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操作mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);mysql_query("UPDATE `orderinfo` SET ordertitle='$title' wherecustomerid=".$id);mysql_query("UNLOCK TABLES");7、使用外键,优化锁定表a.把customerinfo里的customerid映射到orderinfo里的customerid,任何一条没有合法的customerid的记录不会写到orderinfo里CREATE TABLE customerinfo(customerid INT NOT NULL,PRIMARY KEY(customerid))TYPE = INNODB;CREATE TABLE orderinfo(orderid INT NOT NULL,customerid INT NOT NULL,PRIMARY KEY(customerid,orderid),FOREIGN KEY (customerid) REFERENCES customerinfo(customerid) ON DELETE CASCADE)TYPE = INNODB;注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;8、优化查询语句a用内连接代替子查询代替子查询,用sphinx代替like模糊查询b最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作例子1:SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)SELECT * FROM order WHERE orderDate<"2008-01-01";(快)例子2:SELECT * FROM order WHERE addtime/7<24;(慢)SELECT * FROM order WHERE addtime<24*7;(快)例子3:SELECT * FROM order WHERE title like "%good%";SELECT * FROM order WHERE title>="good" and name<"good";缓存,静态化选择合适存储引擎用Innodb增删改,用myisam查询主从数据库负载均衡最好拿数字类型的字段充当where条件最好拿相同类型的字段进行比对(避免发生数据类型的转换)不要在具有索引的字段上添加数据库函数(索引失效)8.2请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?答:(1)选择最有效率的表名顺序(2)WHERE子句中的连接顺序(3)SELECT子句中避免使用‘*’(4)用Where子句替换HAVING子句(5)通过内部函数提高SQL效率(6)避免在索引列上使用计算。(7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。9.对于大流量网站,采用什么方法解决访问量问题?1,确认服务器的硬件是否足够支持当前的流量2,优化数据库的访问3,禁止外部的盗链4,控制大文件的下载5,使用不同主机分流主要流量6,使用流量分析统计软件10.一个函数,能够遍历一个文件夹下的所有文件和子文件夹(20分)function dir_recurse($dir) { $i = 1; if($handle = opendir($dir)) { while(false !== ($file = readdir($handle))) { if($file != "."&& $file != ".." ) { if(is_dir($dir."/".$file) == true) { $fullpath = $dir."/".$file; dir_recurse($fullpath); echo "$fullpathn"; $i++; }else { $fullpath = $dir."/".$file; echo "$fullpathn"; $i++; } } } closedir($handle); } } 10.2写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。function my_scandir($dir){ $files = array(); if ( $handle = opendir($dir) ) { while ( ($file = readdir($handle)) !== false ) { if ( $file != ".."&& $file != "." ) { if ( is_dir($dir . "/" . $file) ) { $files[$file] = scandir($dir . "/" . $file); }else { $files[] = $file; } } } closedir($handle); return $files; } } 11、能够使HTML和PHP分离开使用的模板(1分)答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate12、使用哪些工具进行版本控制?(1分)答:cvs,svn,vss;13、如何实现字符串翻转?(3分)英文:strrev($a)中文或其他文字:中文:GB2312, 代码是使用GB2312编码require是无条件包含也就是如果一个流程里加入require,无论条件成立与否 都会先执行requireinclude->include有返回值,而require没有(可能因为如此require的速度比include快)注意:包含文件不存在或者语法错误的时候require是致命的,include不是18.http请求返回状态码400 请求无效401 未授权403 请求被禁止404 请求资源不存在405 请求资源被禁止406 无法接受407 要求代理身份验证500 Internal Server Error 服务端源代码错误600 源站没有返回响应头部,只返回实现内容19,linux授权码:600 属主有读写权限644 属主有读写权限,属性组有读权限700 属主有读写执行权限755 属主有读写执行权限,属性组有读,执行权限711 属主有读写执行权限,属性组有执行权限666 所有用户都有文件的读写权限777 所有用户都有文件的读写执行权限20.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)答:方法1(对于PHP5及更高版本):$readcontents = fopen("http://www.phpres.com/index.html", "rb"); $contents = stream_get_contents($readcontents); fclose($readcontents); echo $contents; 方法2:echo file_get_contents("http://www.phpres.com/index.html");21.在PHP中error_reporting这个函数有什么作用? (1分)答:设置错误级别与错误信息回报22.JS表单弹出对话框函数是?获得输入焦点函数是? (2分)答:弹出对话框: alert(),prompt(),confirm()获得输入焦点 focus()23.foo()和@foo()之间有什么区别?(1分)答:@foo()控制错误输出24、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)答:mysql_fetch_row是从结果集取出1行数组,作为枚举mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得25、GD库是做什么用的? (1分)答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。26.面向对象编程有两个重要的概念:类和对象类是具备某项功能的抽象模型,实际应用中,还需要对类进行实例化后使用。这样就引入了对象的概念。对象是类进行实例化后的一个产物,是一个实体。封装 :把客观的事物封装成一个抽象的类。继承:子类继承父类,可以使用父类的属性和方法。可以实现接口,同时实现接口中的所有方法多态:覆盖和重载 子类可以覆盖父类中的方法;一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现的结果也不同。27.php框架熟悉YII ,Thinkphp还有laravel ,symfony2,cakephp28.mysql存储引擎ISAM: 查询速度快、增删改慢,支持全文索引、不支持外键、不支持事务MyISAM: ISAM升级版Memory: 数据驻留在内存、速度快、数据管理不稳定、断电后数据全部丢失InnoDB: 速度较慢、支持外键、支持事务、不支持全文索引使用的存储引擎MyISAM:内容管理系统(新闻、官网、电商、软件下载、房屋、招聘...) 可读不可改 大部分是浏览信息InnoDB:技术型网站(bbs、blog、webo、oa...)29.数据库操作流程$link = mysql_connect("localhost","root","root"); mysql_select_db("test",$link); $sql ="select * from table"; $result = mysql_query($sql); while($row =mysql_fetch_****($result) ){ $arr[]=$row; } $row = mysql_fetch_array($result) 意思:$row['name'] 和$row[1] 都可以取到值 $row = mysql_fetch_row($result)) 意思:$row[1] 只有用索引取值,偏移量从0开始。 $row = mysql_fetch_assoc($result)) 意思: $row['name'] 字段名作为索引取值 抽取一条记录转为 关联数组,失败返回false 30.php 加密函数crypt($str[,$slat]) 可以完成单向加密功能md5()sha1() 返回一个40位的十六进制数,加密扩展库Mcrypt() 和Mash31、字符串“to upper case” 分别用php,shell ,js实现将字符串中的字符全部转换成大写并输出。(5分)Php实现: echo strtoupper(‘to upper case’)Shell实现:echo "to upper case" tr 'a-z' 'A-Z'Js实现: 32.防止SQL注入1)一般使用 addslashes 函数addslashes 函数在制定的预定义字符前添加反斜杠对字段和密码MD5加密处理预处理过滤处理33、用PHP打印出前一天的时间,格式是2017-5-10 22:21:21 34.如何实现字符串翻转?其实PHP本身就有字符串翻转的函数:strrev(),不妨试试echo strrev($str);不过所有的这三种方法都不能解决中文字符串翻转的问题,会出错的。代码 35.实现中文字串截取无乱码的方法。mb_substr()36.以下哪一句不会把 John 新增到 users 阵列?$users[] = 'john';成功把 John 新增到阵列 users。array_add($users,’john’);函式 array_add() 无定义。array_push($users,‘john’);成功把 John 新增到阵列 users。$users = 'john';语法错误。37.sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?sort()根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把 阵列排序。assort()PHP 没有 assort() 函式,所以可能是 asort() 的笔误。asort()与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。ksort()根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。38.以下的代码会产生什么?为什么?$num =10; function multiply(){ $num =$num *10; } multiply(); echo $num; 由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者$_GLOBALS['num']),所以 $num 的值是 10。39.些函式可以用来在现正执行的脚本中插入函式库?对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎include()、include_once()、require ()、require_once(),但细心再想,“函式库”也应该包括 com 物件和 .net 函式库,所以我们的答案也要分别包括com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。40.foo() 与 @foo() 有什么分别?foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误 不该被隐藏,你必须妥善处理它们,可能的话解决它们。41、“===”是什么?试举一个“==”是真但“===”是假的例子。“===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易,相反的例子却很少。但我终于找到以下的 例子:if (strpos("abc", "a") == true){ // 这部分永不会被执行,因为 "a" 的位置是 0,换算成布尔值“假”}if (strpos("abc", "a") === true){ // 这部份会被执行,因为“===”保证函式 strpos() 的送回值不会换算成布尔值.}42、如何修改SESSION的生存时间(1分).答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache方法2:$savePath = "./session_save_dir/";$lifeTime = 小时 * 秒;session_save_path($savePath);session_set_cookie_params($lifeTime);session_start();方法3:setcookie() and session_set_cookie_params($lifeTime);43、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串例子:$str = << 50 请举例说明在你的开发过程中用什么方法来加快页面的加载速度要用到服务器资源时才打开及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦51. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就把每个独立的值放入一个新创建的数组?A.strstr()B.不可能只调用一次就完成C.extract()D.explode()√E.strtok()52.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?A.解释器输出一个类型错误B.字符串将被转换成数字,再与整型数字相加C.字符串将被丢弃,只保留整型数字√D.字符串和整型数字将连接成一个新字符串E.整形数字将被丢弃,而保留字符串53.以下脚本输出什么?$s = '12345';$s[$s[1]] = '2';echo $s;?>A.12345B.12245√C.22345D.1134554.以下脚本输出什么?$x = 'apple';echo substr_replace ($x, 'x', 1, 2);?>A.xB.axle√C.axxleD.applexE.xapple55. 函数______能读取文本文件中的一行。读取二进制文件或者其他文件时,应当用______函数。A.fgets(), fseek()B.fread(), fgets()C.fputs(), fgets()D.fgets(), fread()√E.fread(), fseek()56.哪个函数能够往文本文件中写入一个字符串?答案:fwrite()和fputs()两个函数在这里都可以,而后者其实是前者的别名。在PHP中,写入二进制数据和写入字符串没有区别。57.函数______能判断一个文件是否可写。答案:is_writeable58.以下哪个选项能将文件指针移到开头?A.reset()B.fseek(-1)C.fseek(0, SEEK_END)D.fseek(0, SEEK_SET)√E.fseek(0, SEEK_CUR)59、include的功能和require一样,不同的是,require不能用在[ ]A、判断语句或循环里,B、连接语句里C、声明语句里D、文件的开头E、文件的中间√50、下面建立与MySQL Server的连接语法正确的是:[ ]A、$link=connect("host_name","user_name","password");B、$link=mysql_connect("host_name","user_name","password");√C、$link=mysqlconnect("host_name","user_name","password");D、$link=mysql_pconnect("host_name","user_name","password");√E、$link=pconnect("host_name","user_name","password");51.将字符串转换成小写strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串52.将字符转成大写strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样.53.将字符串首字符转换成大写ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大写的字符串.用法同strtolowe()一样.54.将字符串每个单词的首字符转换成大写ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如"helloworld",经过该函数处理后,将返回"Hello Word".用法同strtolowe()一样.55、NoSQL:Not Only SQL思想:网站产生的数据,一部分存储数据库、一部分存到NoSQL相关产品NoSQL产品1、Memcache:内存(速度快、数据量小)、数据的过期时间2、MongoDB:文档数据库3、Redis:内存(速度快、数据量小)、库、没有过期时间56、什么样的数据,存储在什么位置?MySQL:稳定的数据NoSQL:活跃的数据57缓存分类1、缓存数据存储位置不同1)文件缓存2)内存缓存2、缓存的数据量的不同1)页面缓存2)局部缓存3)局部不缓存4)数据缓存(变量缓存、动态缓存)Memcache:内存缓存、变量缓存58 .LINUX命令查看当前目录下所有内容 ls在当前目录下,新建一个文件夹 mkdir 文件夹名删除指定的文件夹 rmdir 文件夹名 只能删除空目录在当前目录下新建一个空白文件 touch 文件名删除当前目录下的一个文件 unlink文件名删除文件或文件夹 rm复制文件 cp移动文件或文件夹 mv文件或文件夹重命名 mv查看完整的工作目录 pwd切换目录: cd cd/ 返回根目录文件传输 ftp查看文件内容 cat 文件名查看文件编码 file 文件名查找文件 find 路径 -name 文件名修改文件或文件夹权限权限种类:r 4(读)、w 2(写)、x 1(执行)权限操作符:+(赋予权限)、-(收回权限)用户种类:a(所有人)、u(文件拥有者)、g(组用户)、o(其他用户)查看权限:ls -l-rw-r--r-- a.txtdrwxr-xr-x hello第1位:是文件还是文件夹(-文件、d文件夹)第234位:u用户的权限第567位:g用户的权限最后三位:o用户的权限1)将最大权限赋予a.txtchmod a+r+w+x a.txtchmod 777 a.txt2)设置a.txt权限,收回o用户的wx权限chmod o-w-x a.txt4)设置a.txt权限:u:rw g:r o:rchmod 644 a.txt5)设置hello文件夹权,给予最大权限(不影响子文件)chmod 777 hello6)设置hello文件夹权,给予最大权限(影响子文件)chmod -R 777 hello59、创建文件exer1,设置访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,写出操作过程的命令(10分)touch exer1chmod 644 exer1增加权限chmod a+x exer1chmod g+w exer1或者chmod 775 exer160、易出现编码的地方文件保存格式的编码Header();Msq本身的编码(修改ini)Set names gbk;Mysql_query(“set names utf8”);Iconv()PHP的系统函数进行转码61.PHP工作原理一个网站运行时客户端有无数个,服务器通常只有一个(负载均衡)开发环境的安装2,PHP5.4,MYSQL5.3-------开源,可以跨平台配置文件:conf(Apache), php.ini my.iniPHP文档组成:HTML,css,js,jquery,PHPPHP语法风格:xml风格,短风格,ASP风格(已过时),脚本风格注意:位置任意,同一页面可以出现多次,不能嵌套,里面只能出现php代码,需要转字符串输出运行在服务器端注释:单行注释,多行注释62数据类型:标量类型:integer,Float,String,boolean复合类型:Array,Object特殊类型:Resource,Null伪类型:mixed,number,callback(回调函数)63.PHP中被认为是false的值:0, 0.0, null, 空数组, 空字符串, false64.求两个日期的差数,例如2017-2-27 ~ 2018-05-6 的日期差数 65什么是MVC?回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。Model:数据信息存取层。View:view层负责将应用的数据以特定的方式展现在界面上。Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。66.PHP中获取图像尺寸大小的方法是什么?回答:getimagesize () 获取图片的尺寸Imagesx () 获取图片的宽度Imagesy () 获取图片的高度67.如何在PHP中定义常量?回答:PHP中使用Define () 来定义常量。define (“Newconstant”, 30);68.如何不使用submit按钮来提交表单?如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:Submit Me 69.简述论坛中无限分类的实现原理。答:无限极分类,那么应该是考察递归函数吧!第一步:建立测试数据库:CREATE TABLE `category` ( `id` smallint(5) unsigned NOT NULL auto_increment, `fid` smallint(5) unsigned NOT NULL default '0', `value` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 第二步:插入测试数据:INSERT INTO `category` ( `fid`, `value`) VALUES (0, 'PHP点点通博客PHPDDT.COM'), (1,'a'), (1,'b'), (2,'c'), (2,'d'), (4,'e') 第三步:递归输出分类:70.试述isset()和empty()的区别isset() 测试变量是否存在 empty() 测试变量是否为空71.请用尽可能少的语句实现对输入Email地址进行验证的功能eregi('^[_a-z0-9]+(/.[_a-z0-9-]+)*@[a-z0-9]+(/.[a-z0-9-]+)*$',$emailaddress)72.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组/冒泡排序(数组排序) function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j–){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; } //快速排序(数组排序) function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; } 75.utf-8转换成gbk的函数是?iconv("gbk",""UTF-8,"我们"); mb_convert_encoding($str, "GBK", "UTF-8")76.Php中分割字符串成数组的函数和连接数组成字符串的函分别有哪些?explode() split() ;implode() join()77.说几个你知道的设计模式?单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接简单工厂模式: 它具有创建对象的某些方法,可以使用工厂类创建对象,而不直接使用 new。例如初始化数据库的时候会用到,比如MySQL,MSSQL策略模式: 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作注册模式: 提供了在程序中有条理的存放并管理一组全局对象 (object),例如ZF框架中的Zend_Registry::set适配器模式: 将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口观察者模式: 一个对象通过添加一个方法使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送装饰器模式: 不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类原型模式: 实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。78.echo,print(),print_r(),printf(),sprintf(),var_dump()有什么区别?echo :是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)print :是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值printf :是函数,把文字格式化以后输出(参看C语言)sprintf :是函数,跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。var_dump :函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。79.echo count(“abc”); 输出什么?答案:180.写个函数用来对二维数组排序。答案:array_multisort() 。81.对于大流量的网站,您采用什么样的方法来解决访问量问题?首先,确认服务器硬件是否足够支持当前的流量。其次,优化数据库访问。第三,禁止外部的盗链。第四,控制大文件的下载。第五,使用不同主机分流主要流量第六,使用流量分析统计软件。82.error_reporting(2047)什么作用?答案:相当于 error_reporting(‘E_ALL’); 输出所有的错误。83、 简述如何得到当前执行脚本路径,包括所得到参数。访问http://temp.com/phpinfo.php?id=1echo $_SERVER['SCRIPT_URL']; //得到/phpinfo.php echo $_SERVER["SCRIPT_URI"]; //得到http://temp.com/phpinfo.php echo $_SERVER["SCRIPT_FILENAME"]; //得到F:/www/Temp/phpinfo.php echo $_SERVER["REQUEST_URI"]; //得到/phpinfo.php?id=1 echo $_SERVER["SCRIPT_NAME"]; //得到/phpinfo.php 参考server.php http://lesson.com/test/server.php?id=184、写出session的运行机制。session创建时,是否会在服务端记录一个cookie?cookie里面的内容是什么?session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。_保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。一般这个cookie的名字都是类似于SEEESIONID。r由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764比另一种是作为查询字符串附加在URL后面,表现形式为http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764参为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。85.Cookie的原理及使用?Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。到86.Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。uc、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。而d、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。e、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。f、Get是Form的默认方法。*.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。*.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节..Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。87.PHP5中魔术方法函数有哪几个,请举例说明各自的用法__sleep __wakeup __toString __set_state __construct, __destruct __call, __get, __set, __isset, __unset __clone __autoload 88、isset()和empty()的区别两者都是测试变量用的。但是isset()是 测试变量是否被赋值 ,而empty()是测试 一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用dunset($foo)或者$foo=NULL。89.以下哪一句不会把 John 新增到 users 阵列?$users[] = ‘john’;成功把 John 新增到阵列 users。array_add($users,’john’);函式 array_add() 无定义。array_push($users,‘john’);成功把 John 新增到阵列 users。$users = ‘john’;语法错误。90.以下哪一个函式可以把浏览器转向到另一个页面?redir()这不是一个 PHP 函式,会引致执行错误。header()这个是正确答案,header() 用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:header(“Location: http://www.phpmst.com/”);location()这不是一个 PHP 函式,会引致执行错误。redirect()这不是一个 PHP 函式,会引致执行错误。91.PHP中的非静态方法可以通过静态调用吗,反之呢?其实问题是问没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用。答案是会产生一个strict错误,但在会继续执行代码。反之,能否通过“对象名->方法名“的形式来调用static定义的方法?答案是不能,会出错并中断程序执行。92.使用utf-8编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数?$str = “您好hello”;答案:echo strlen($str);11 strlen() 函数返回字符串的长度。93..什么是时间戳?时间戳能代表的最小年份和最大年份是多少?答案:(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合32 位有符号整数的最小值和最大值)。不过在 PHP 5.1 之前此范围在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。94、MyISAM与innoDB存储引擎有何差别?答案:A、两者在文件构成上有区别;B、InnoDB支持事务处理,MyISAM不支持;C、对无WHERE子句的COUNT(*)操作的不同:MyISAM中保存了该值,直接读取,InnoDB需要作全表扫描;D、锁的区别:InnoDB支持表级锁和行级锁,MyISAM只支持表级锁;E、索引会缓存数据,而MYISAM不会;F、INNODB不区分char和varchar;G、INNODB支持hash索引,而MYISAM不支持;H、InnoDB不支持FULLTEXT类型的索引;I、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的;J、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;K、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;L、LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。95..如何记录php程序错误至系统日志?答案:将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。当然也可以记录错误日志到指定的文件中。代码如下:# vim /etc/php.inidisplay_errors = Offlog_errors = Onerror_log = /var/log/php-error.log另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。display_errors = Off //不显示错误error_reporting 设定错误讯息回报的等级96.用最少的代码写一个求3值最大值的函数.答案: function($a,$b,$c){return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );}97.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)答:heredoc的语法是用”<<<”加上自己定义成对的标签,在标签范围內的文字视为一个字符串例子:$str = <<handle = NULL; $this->getcon($host, $username, $password, $dbname); } public static function getBb() { self::$instance = new Db(); return self::$instance; } private function getcon($host, $username, $password, $dbname) { if($this->handle!=NULL){ return true; } $this->handle = mysqli_connect($host, $username, $password, $dbname); } }102. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。103. HTTP 状态中302、403、 500代码含义?一二三四五原则: 一. 消息系列 二 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。104. Linux 下建立压缩包,解压缩包的命令Tar.gz:打包: tar czf file.tar.gz file.txt解压: tar xzf file.tar.gzBz2:打包: bzip2 [-k] 文件解压: bunzip2 [-k] 文件Gzip(只对文件,不保留原文件)打包: gzip file1.txt解压: gunzip file1.txt.gzZip: -r 对目录打包: zip file1.zip file1.txt解压: unzip file1.zip105. 请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。106. MyISAM 和 InnoDB 的基本区别?索引结构如何实现?MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。创建索引:alert table tablename add index (`字段名`)107. 不使用cookie向客户端发送一个cookie.理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在108. isset() 和 empty() 区别Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。109. 如何在页面之间传递变量(至少两种方式) ? GET,POST,COOKIE,SESSION,隐藏表单1. 写出匹配URL的正则表达式‘/^(https?|ftps?)://(www).([^./]+).(com|cn|org)(/[w-./?%&=]*)?/i’2. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。// 冒泡排序法 Function mysort($arr){ For($i=0; $i $arr[$j+1]){ $tmp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; } } } Return $arr; } $arr=array(3,2,1); print_r(mysort($arr));3. 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?按值传递:函数范围内对值的任何改变在函数外部都会被忽略按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。在PHP中error_reporting这个函数有什么作用?设置 PHP 的报错级别并返回当前级别。请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。if(isset($_POST['action']) && $_POST['action']==’submitted’){ $email=$_POST['email']; if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[0-9a-zA-Z-]+){1,3}$/”,$email)){ echo “电子邮件检测失败”; }else{ echo “电子邮件检测成功”; } }使用PHP描述快速排序算法,对象可以是一个数组?原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:(1)从数列中挑出一个元素,称该元素为“基准”。(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。//快速排序(数组排序) function QuickSort($arr){ $num = count($arr); $l=$r=0; for($i=1;$i<$num;$i++){ if($arr[$i] < $arr[0]){ $left[] = $arr[$i]; $l++; }else{ $right[] = $arr[$i]; $r++; } } if($l > 1){ $left = QuickSort($left); } $new_arr = $left; $new_arr[] = $arr[0]; if($r > 1){ $right = QuickSort($right); } for($i=0;$i<$r;$i++){ $new_arr[] = $right[$i]; } return $new_arr; }使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组//二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ($low <= $high){ $mid = intval(($low+$high)/2); if ($array[$mid] == $k){ return $mid; }elseif ($k < $array[$mid]){ return bin_sch($array, $low, $mid-1, $k); }else{ return bin_sch($array, $mid+1, $high, $k); } } return -1; } //顺序查找(数组里查找某个元素) function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order=0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; }请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,* 数组中所有元素都用小写字母,并按照字母先后次序排序class sort { private $str; public function __construct($str) { $this->str=strtolower($str); } private function explodes() { if(empty($this->str)) return array(); $arr=explode(" ",$this->str); return is_array($arr)?$arr:array($arr); } public function sort() { $explode=$this->explodes(); sort($explode); return $explode; } } $str='Apple Orange Banana Strawberry'; $sortob=new sort($str); var_dump($sortob->sort());对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息class regx { public static function check($str) { if(preg_match("/^([1-9,])+$/",$str)) { return true; } return false; } } $str="12345,6"; if(regx::check($str)) { echo "suc"; } else { echo "fail"; }请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,然后写一段程序从文件中读取并还原数组@author zhuwenqiongclass sort { private $str; public function __construct($str) { $this->str=strtolower($str); } private function explodes(){ if(empty($this->str)) return array(); $arr=explode(" ",$this->str); return is_array($arr)?$arr:array($arr); } public function sort() { $explode=$this->explodes(); sort($explode); return $explode; } } class file { private $sort=null; private $filepath; public function __construct($arrobj,$path) { $this->sort=$arrobj; $this->filepath=$path; } private function getresource($filename,$mode) { return fopen($this->filepath.$filename,$mode); } private function closeresource($resource) { fclose($resource); } public function savefile($filename) { $arr=$this->sort->sort(); $fopen=$this->getresource($filename,"a+"); if(!$fopen){ echo "文件打开失败!"; exit; } var_dump($arr); foreach($arr as $key=>$value) { fwrite($fopen,$value."n"); } $this->closeresource($fopen); } public function readfile($filename) { $this->savefile($filename); $fopen=$this->getresource($filename,"r"); if(!$fopen){ echo "文件打开失败!";exit; } $arr=array(); while(!feof($fopen)) { $get=fgets($fopen); if(!empty($get)) $arr[]=str_replace("n","",$get); } $this->closeresource($fopen); return $arr; } } $file=new file(new sort('Apple Orange Banana Strawberry'),"E:"); $arr=$file->readfile("fruit.dat"); var_dump($arr);单例模式,创建mysqli数据库链接的单例对象class Db { private static $instance; public $handle; Private function __construct($host,$username,$password,$dbname) { $this->handle=NULL; $this->getcon($host,$username,$password,$dbname); } public static function getBb() { self::$instance=new Db(); return self::$instance; } private function getcon($host,$username,$password,$dbname) { if($this->handle!=NULL){ return true; } $this->handle=mysqli_connect($host,$username,$password,$dbname); } }windows平台, Apache Http Server启动失败, 排错思路是什么?检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器PHP session扩展默认将session数据储存在哪里? D A) SQLite Database B) MySQL Database C) Shared Memory D) File System E) Session Server如果你想要自动加载类,下面哪种函数声明是正确的 C A) function autoload($class_name) B) function __autoload($class_name, $file) C) function __autoload($class_name) D) function _autoload($class_name) E) function autoload($class_name, $file)PHP程序使用utf-8编码, 以下程序输出结果是什么? B A) 9 B) 13(gbk) C) 18 D) 17(utf8)你所知道的php数组相关的函数?array()----创建数组array_combine()----通过合并两个数组来创建一个新数组range()----创建并返回一个包含指定范围的元素的数组compact()----建立一个数组array_chunk()----将一个数组分割成多个array_merge()----把两个或多个数组合并成一个数组array_slice()----在数组中根据条件取出一段值array_diff()----返回两个数组的差集数组array_intersect()----计算数组的交集array_search()----在数组中搜索给定的值array_splice()----移除数组的一部分且替代它array_key_exists()----判断某个数组中是否存在指定的keyshuffle()----把数组中的元素按随机顺序重新排列array_flip()----交换数组中的键和值array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回array_unique()----移除数组中重复的值php读取文件内容的几种方法和函数?打开文件,然后读取。Fopen() fread()打开读取一次完成 file_get_contents()以下程序,变量str什么值的情况下输入111?if( ! $str ) { echo 111; }在$str值为:0,’0′,false,null,”"你所知道的PHP的一些技术(smarty等)?Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii说说你对缓存技术的了解?1、缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。2、使用memcache可以做缓存。你所知道的设计模式有哪些?工厂模式、策略模式、单元素模式、观察者模式、命令链模式说说你对代码管理的了解? 常使用那些代码版本控制软件?通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。常用的版本控制器:SVN说说你对SVN的了解?优缺点?SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。缺点:不能随意修改服务器项目文件夹。怎么找到PHP.ini的路径?一般都在php的安装目录下,或者window系统的windows目录下。PHP加速模式/扩展? PHP调试模式/工具?Zend Optimizer加速扩展调试工具:xdebug你常用到的mysql命令?Show databases Show tables Insert into 表名() values() Update 表名 set 字段=值 where ... Delete from 表名 where ... Select * from 表名 where 条件 order by ... Desc/asc limit ... Group by ... Having ...进入mysql管理命令行的命令?Mysql -uroot -p 回车 密码show databases; 这个命令的作用?显示当前mysql服务器中有哪些数据库show create database mysql; 这个命令的作用?显示创建数据库的sql语句show create table user; 这个命令的作用?显示创建表的sql语句desc user; 这个命令的作用?查询user表的结构explain select * from user; 这个命令的作用?获取select相关信息show processlist; 这个命令的作用?显示哪些线程正在运行SHOW VARIABLES; 这个命令的作用?显示系统变量和值SHOW VARIABLES like ’%conn%’; 这个命令的作用?显示系统变量名包含conn的值LEFT JOIN 写一个SQL语句?SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.idin, not ni, exist, not exist的作用和区别?in在什么中 Not in 不在什么中 Exists 存在 Not exists 不存在怎么找到数据库的配置文件路径?在数据库安装目录下,my.ini简述Linux下安装PHP的过程?安装软件之前先安装编译工具gcc、gcc-c++拷贝源码包,解包解压缩Cd /lamp/php进入php目录./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安装目录和配置文件目录Make 编译Make install安装简述Linux下安装Mysql的过程?Groupadd mysql 添加一个用户组mysqlUseradd -g mysql mysql 添加一个mysql用户指定分组为mysqlCd /lamp/mysql 进入mysql目录./configure –prefix=/usr/local/mysql/ –with-extra-charsets=allMakeMake all简述Linux下安装apache的过程?Cd /lamp/httpd 进去apache软件目录./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-aprMakeMake allHTML/CSS/DIV/Javascritp:1. 设计一个页面(4个 div 第一个div 宽960px 居中;第2-4个div 3等分960px;)
用javascript取得一个input的值?取得一个input的属性?document.getElementById(‘name’).value;document.getElementById(‘name’).type;用Jquery取得一个input的值?取得一个input的属性?$(“input[name='aa']“).val(); $(“input[name='aa']“).attr(‘type’); 请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。 var xmlhttp; if(window.XMLHttpRquest){ xmlhttp=new XMLHttpRequest(); }else if(window.ActiveXObject){ xmlhttp=new ActiveXObject(‘Microsoft.XMLHTTP’); } xmlhttp.open(‘GET’,’1.php?aa=name’,true); xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4){ if(xmlhttp.status==200){ var text=xmlhttp.responseText; } } } xmlhttp.send(null); 简述Cookie的设置及获取过程设置COOKIE的值:Setcookie(名称,值,保存时间,有效域);获取值:$_COOKIE['名称'];面向对象中接口和抽象类的区别及应用场景?1、有抽象方法的类叫做抽象类,抽象类中不一定只有抽象方法,抽象方法必须使用abstract关键字定义。2、接口中全部是抽象方法,方法不用使用abstract定义。3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。用面向对象来实现A对象继承B和C对象Interface B{ ... }Interface C{ ... }Class A implements B,C{ ... }写出Smarty模板引擎中你最常用的关键词Assign Display ForeachSection Loop Item$smarty Now Const getl 增加一个字段性别sex,写出修改语句Alert table user add sex enum(’0′,’1′);查询出年龄介于20岁到30岁之间的用户Select * from user where age>20 and age<30如果是一个Web频繁访问的查询,上题的查询如何优化?可对where后面的字段 age 建立索引,也可对语句建立存储过程。echo(),print(),print_r()的区别?Echo,print是PHP语句, print_r是函数,Print()只能打印出简单类型变量的值(如int,string),有返回值。print_r()可以打印出复杂类型变量的值(如数组,对象)echo 输出一个或者多个字符串,无返回值什么是模板技术、能够使HTML和PHP分离开使用的模板?模板技术就是使程序的逻辑代码和界面分开的技术。能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate对于大流量的网站,您采用什么样的方法来解决访问量问题?优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:1、确定当前服务器设备是否满足流量需求。2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。5、使用不同的主机分流主要流量,使服务器均衡负载。6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。mysql_fetch_row() 和mysql_fetch_array之间有什么区别?Mysql_fetch_row()是从结果集中取出一行作为枚举数组,mysql_fetch_array()是从结果集中取出一行作为索引数组或关联数组或两种方式都有。实现中文字串截取无乱码的方法Mb_substr();用PHP写出显示客户端IP与服务器IP的代码获取客户端IP:$_SERVER(“REMOTE_ADDR”);获取服务器端IP:$_SERVER["SERVER_ADDR"];有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?获取网页内容:$url=”http://www.phpres.com/index.html“;$str=file_get_contents($url);或 $ch=curl_init();curl_setopt($ch,CURLOPT_URL,’’);curl_setopt($ch,CURLOPT_HEADER,0);curl_exec($ch);curl_close($ch);function checkemail($email){echo preg_match(‘/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+.[0-9a-zA-Z]+$/’,$email)?’email格式正确‘:’email格式不正确‘;}简述如何得到当前执行脚本路径,包括所得到参数用$_SERVER['SCRIPT_FILENAME'].$_SERVER['REQUEST_URI'];取得当前页面的完整路径和参数。取得参数:$_SERVER['QUERY_STRING'];JS表单弹出对话框函数是?获得输入焦点函数是?1Alert(); focus();写一个函数,算出两个文件的相对路径如 $a = ’/a/b/c/d/e.php’;$b = ’/a/b/12/34/c.php’;计算出 $b 相对于 $a 的相对路径应该是 http://www.cnblogs.com/c/d将()添上$a=”http://www.cnblogs.com/a/b/c/d/e.php”;$b=”http://www.cnblogs.com/a/b/12/34/c.php”;$ainfo=parse_url($a);$binfo=parse_url($b);$apath=ltrim($ainfo['path'],'/');$bpath=ltrim($binfo['path'],'/');$arr=explode('/',$apath);$brr=explode('/',$bpath);$flag=false;for($i=0;$i标记中的图片地址$url=””;//145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39调用了未定义的方法ge_user(),检查程序中有没有定义此方法146.Fatal error: Class ’client’ not found in /website/index.php on line 173类client没有找到,检查文件中有没有client类,或者有没有包含client类文件Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3提示文件前面有输出,检查是否有输出,或者编码148.Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10没有找到文件或目录,检查文件是否存在149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 1818行语法错误,检查语法150.Warning:fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2没有找到welcome.txt文件,检查文件是否存在1、抓取远程图片到本地,你会用什么函数?fsockopen, A3、用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21Echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));4、javascript能否定义二维数组,如果不能你如何解决?javascript不支持二维数组定义,可以用arr[0] = new array()来解决5、假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。//正在浏览当前页面用户的 IP 地址:127.0.0.1echo $_SERVER["REMOTE_ADDR"].”
”;//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2echo $_SERVER["QUERY_STRING"].”
”;//当前运行脚本所在的文档根目录:d:inetpubwwwrootecho $_SERVER["DOCUMENT_ROOT"].”
”;7、在HTTP 1.0中,状态码 401 的含义是未授权____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为header(“HTTP/1.0 404 Not Found”);401表示未授权;header(“HTTP/1.0 404 Not Found”);9、把 John 新增到 users 阵列?$users[] = ‘john’; array_push($users,‘john’);在PHP中error_reporting这个函数有什么作用?error_reporting() 设置 PHP 的报错级别并返回当前级别。13、如何修改SESSION的生存时间(1分).方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache方法2:$savePath = “./session_save_dir/”;$lifeTime = 小时 * 秒;session_save_path($savePath);session_set_cookie_params($lifeTime);session_start(); 14、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)方法1(对于PHP5及更高版本):$readcontents = fopen(“http://www.phpres.com/index.html”, “rb”);$contents = stream_get_contents($readcontents);fclose($readcontents);echo $contents;方法2:echo file_get_contents(“http://www.phpres.com/index.html”);16、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php答案1:function getExt($url){$arr = parse_url($url);$file = basename($arr['path']);$ext = explode(“.”,$file);return $ext[1];}答案2:function getExt($url) {$url = basename($url);$pos1 = strpos($url,”.”);$pos2 = strpos($url,”?”);if(strstr($url,”?”)){Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);} else {return substr($url,$pos1);}}使用五种以上方式获取一个文件的扩展名要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数 get_ext1($file_name), get_ext2($file_name)function get_ext1($file_name){return strrchr($file_name, ‘.’);}function get_ext2($file_name){return substr($file_name,strrpos($file_name, ‘.’));}function get_ext3($file_name){return array_pop(explode(‘.’, $file_name));}function get_ext4($file_name){$p = pathinfo($file_name);return $p['extension'];}function get_ext5($file_name){return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));}18、相等 相等 不相等MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?Varchar是变长,节省存储空间,char是固定长度。查找效率要varchar型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)(1)var img = new Image();(2)var img = document.createElement(“image”)(3)img.innerHTML = “”请描述出两点以上XHTML和HTML最显著的区别(1)XHTML必须强制指定文档类型DocType,HTML不需要(2)XHTML所有标签必须闭合,HTML比较随意写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数方法一:get_days(’2007-2-5′, ’2007-3-6′);?>方法二:

我要回帖

更多关于 as…as句型的用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信