您好,欢迎访问三七文档
T1一、填空题1.PHP是用什么语言编写的?:脚本语言2.LAMP的全称是?:LINUX、APACHE、MYSQL、PHP3.PHP的三种注释方式?:#、//、/**/4.PHP使用什么符号定义变量?:$二、简答题1.请列出PHP的8种数据类型。?:整型、浮点型、字符串、数组、逻辑、对象、NULL、资源型:资源RESOURCE是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。2.写出如下程序的输出结果??$TEST=‘AAAAAA’;$ABC=&$TEST;UNSET($TEST);ECHO$ABC;?:AAAAAA3.4.$I=2,编程实现判断$I是否为整型,是则输出$I,不是则输出“非整型变量”??$L=2IF(IS_INT($L)){ECHO$L;}ELSE{ECHO“非整型变量”;}?BOOLIS_INT(MIXED$VAR):检测变量是否为整数BOOLIS_INTEGER(MIXED$VAR):为IS_INT()的别名BOOLIS_FLOAT(MIXED$VAR):检测变量是否为浮点型BOOLIS_REAL(MIXED$VAR):为IS_FLOAT()的别名BOOLIS_SCALAR(MIXED$VAR):检测变量是否是一个标量标量:标量变量是指那些包含了INTEGER、FLOAT、STRING或BOOLEAN的变量,而ARRAY、OBJECT和RESOURCE则不是标量IS_ARRAYIS_BOOLIS_CALLABLEIS_DOUBLEIS_FLOATIS_ALONGIS_NUMBERICIS_OBJECTIS_RESOURCEIS_STRINGT2PHP基础部分1.以下PHP代码的输出结果?$I=10;$N=$I++;ECHO$N,$I++,++$I:10,11,132.INCLUDE与REQUIRE的区别?:REQUIRE的使用方法如REQUIRE(MYREQUIREFILE.PHP);。这个函数通常放在PHP程序的最前面,PHP程序在执行前,就会先读入REQUIRE所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。INCLUDE使用方法如INCLUDE(MYINCLUDEFILE.PHP);。这个函数一般是放在流程控制的处理部分中。PHP程序网页在读到INCLUDE的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。REQUIRE一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误INCLUDE一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。3.以下代码,是判断字符串中是否存在#符号,错误之处在于?IF(STRPOS($STR,“#”)){…}:如果#在字符串的首位那就是返回0,PHP会将0自动转换成FALSE进行判断,因此错误,正确写法是:IF(STRPOS($STR,“#”)!==FALSE){…}4.程序代码使用UTF-编码,以下代码输出结果是什么?STRLEN函数是计算字符串的字节数还是字符数?$STR=“您好HELLO”;ECHOSTRLEN($STR);:UTF-8:对英文使用8位(1个字节),对中文使用24位(3个字节)来编码,对于英文较多的论坛使用UTF-8比较节省空间GBK:使用双字节编码,不论中英文字符,为了区分中文,将其最高位定义为1STRLEN:返回给定的字符串STRING的长度,计算的是字节数5.什么是时间戳?时间戳能代表的最小年份和最大年份是多少?:时间戳是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数;时间戳能代表的最小年份是1970,最大年份是2038年INTTIME(VOID)返回自从UNIX纪元(格林威治时间1970年1月1日00:00:00)到当前时间的秒数。6.PHP.INI配置文件中MAGIC_QUOTES_GPC,MAGIC_QUOTES_RUNTIME的作用是什么?应该开启还是关闭?:PHPMAGIC_QUOTES_GPC=ON的情况:我们可以不对输入和输出数据库的字符串数据作ADDSLASHES()和STRIPSLASHES()的操作,数据也会正常显示。你对输入的数据作了ADDSLASHES()处理,那么在输出的时候就必须使用STRIPSLASHES()去掉多余的反斜杠。PHPMAGIC_QUOTES_GPC=OFF的情况:使用ADDSLASHES()对输入数据进行处理,但并不需要使用STRIPSLASHES()格式化输出,因为ADDSLASHES()并未将反斜杠一起写入数据库,只是帮助MYSQL完成了SQL语句的执行。MAGIC_QUOTES_RUNTIME转义字符:当你的数据中有一些\”‘这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前加上\7.现有一个文本体积大约2G,计算机内存只有1G,需要使用PHP对数据进行分析,如何读取如此体积的文件?分行读取,FOPEN、FREAD当然还可以使用FSEEKFOPEN()将FILENAME指定的名字资源绑定到一个流上。STRINGFREAD(RESOURCE$HANDLE,INT$LENGTH):FREAD()从文件指针HANDLE读取最多LENGTH个字节。HANDLE:文件系统指针,是典型地由FOPEN()创建的RESOURCE(资源)。8.PHP的序列化各反序列化,有何用途?序列SERIALIZE是为了产生一个可存储的值,便于存储除RESOURCE类型的所有数据,反序列UNSERIALIZE即将序列的数据还原为原来的值9.PHP的魔术方式包含哪些(越多越好)?在何情况下被自动调用?以下为总结的在使用类时可用的魔术方法,魔术方法会在某种待定情况下被自动调用,但前提是该方法被定义。有些方法不一定要定义在类中,还可以写在程序中作为一个函数。__CONSTRUCT()构造函数,创建对象时自动调用__DESTRUCT()析构函数,不需要创建__CLONE()克隆函数,调用CLONE方法时自动调用__SET()当程序试图写入一个不存在或不可见的成员变量时自动调用。该函数在类中定义时必须有两个参数:变量称和变量值。__GET()当程序调用一个未定义或不可见的成员变量时自动调用__GET()来读取变量值。定义时必有有一个参数:变量名__CALL()当程度试图调用不存在或不可见的成员方法时,自动调用__CALL()来存储方法名及其参数。该方法包含两个参数:方法名和方法参数。其中方法参数以数组形式存在。__SLEEP()使用SERIALIZE()实现序列化对象时,先执行该方法,清除对象并返回一个该对象中所有变量的数组。__WAKEUP()使用UNSERIALIZE()还原一个被序列化的对象时,先执行该方法,恢复在序列化中可能丢失的数据库连接及相关工作__TOSTRING()当使用ECHO或PRINT输出对象时,将对象转化为字符串__AUTOLOAD()调用未被实例化的类时,自动调用,在指定路径下查找和该类名称相同的文件。10.ARRAYACCESS接口的作用是什么?让对象使用起来像一个PHP数组,而不用使用对象操作符-直接使用数组符号[]就可以了11.PHP类的静态成员变量与非静态成员变量有何区别?静态成员变量:可以用类名直接访问,也可以用类的实例化来访问,静态成员变量是所有对象共用的,只有一份,不会为每一个对象都分配一个不同的值非静态成员变量:不可以直接使用类名访问,需用实例化来访问,为对象独有的12.如何记录PHP程序错误至系统日志(如WINDOWS的事件查看器,LINUX的SYSLOG)?编辑PHP.INI配置文件,修改或添加LOG_ERRORS=ONERROR_LOG=SYSLOG13.SQL注入最有效的防御方式是什么?参数化查询,参数格式是以“?”字符加上参数名称而成。例如:UPDATEMYTABLESETC1=?C1,C2=?C2,C3=?C3WHEREC4=?C4因为:1、参数过滤2.执行计划重用MYSQL数据库部分(MYSQL版本为5.0+)1.假设MYSQL数据表使用UTF-8编码,数字类型均使用指出以下各个数据类型的范围和长度类型字节数值范围UNSIGNEDTINYINT(2)UNSIGNEDSMALLINT(3)UNSIGNEDMEDIUMINT(4)UNSIGNEDINT(5)UNSIGNEDBIGINT(6)2.假设MYSQL数据表使用UTF-8编码,填写以下表格类型最大字节数最长字符数CHAR(100)VARCHAR(200)3.CHAR(100)与VARCHAR(100)有何区别?CHAR(N)是定长格式,格式为CHAR(N)的字段固定占用N个字符宽度,如果实际存放的数据长度超过N将被截取多出部分,如果长度小于N就用空字符填充。VARCHAR(N)是变长格式,这种格式的字段根据实际数据长度分配空间,不浪费对于的空间,但是搜索数据的速度会麻烦一点。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。一般地说,只要一个表有一个字段定义为VARCHAR(N)类型,那么其余用CHAR(N)定义的字段实际上也是VARCHAR(N)类型。4.如何查看某个SQL的执行计划,以便分析其性能问题?SELECT*FROMSYS.SYSCACHEOBJECTS5.MYISAM与INNODB存储引擎有何差别?类似CMS,BBS应用,使用哪一种引擎更好?HTTP协议1.HTTP200,404,304状态码般是何含义?200:访问成功(表示一切正常,返回的是正常请求结果)302:临时重定向(指出被请求的文档已被临时移动到别处,此文档的新的URL在LOCATION响应头中给出)304:未修改(表示客户机缓存的版本是最新的,客户机应该继续使用它。)404:访问的文件不存在(服务器上不存在客户机所请求的资源)500:内部服务器错误(服务器端的CGI、ASP、JSP等程序发生错误)2.HTTPGZIP压缩传输,是怎么回事?3.一些网站(如BAIDU,163.COM),使用手机和电脑访问相同域名时,呈现的页面并不相同,如何实现?4.COOKIE与SESSION的关系?,禁用浏览器的COOKIE,SESSION能正常工作吗?(1)COOKIES方式,在SESSION.USE_TRANS_SID=0ANDSESSION.USE_COOKIES=1的情况下使用。这种方法是每次浏览器端点每个请求,都把SESSIONID发送到服务器。(2)URL回写,SESSION.USE_ONLY_COOKIES=0ANDSESSION.USE_TRANS_SID=1的情况下,服务器会忽略SESSION.USE_TRANS_SID,在浏览器发HHTP请求后,服务器会在返回页面内容中每个连接后面加上PHPSESSID=05DBFFFD3453B7BE02898FDCA4FCD82B(在PHP.INI没改SESSION.NAME,默认是PHPSESSID),这样就算客户端的浏览器禁止了COOKIES,一样能实现SESSION功能。5.默认情况下,SESSION在浏览器关闭时将失效,如果要延长SESSION的生存周期(比如一个月),如何处理?6.XSS,CSRF攻击如何防止?7.如何给动态文件(如PHP页面)作浏览器缓存?(即第二次刷新浏览器时,返回304状态)8.在HTTP应用程序层,来源IP的重要性不言而语,例如表单提交限制,频率等等均需要客户端IP信息。使用流行的DISCUZX2.5的文件SOURCE/CLASS/DISCUZ/DISCUZ_APPLICATION.PHP中的代码片断:PRIVATEFUNCTION_GET_CLIENT_IP(){$IP=$_SERVER['R
本文标题:php笔试题及答案
链接地址:https://www.777doc.com/doc-2850449 .html