面试技巧
当前位置:首页 > 简历范文 > 面试技巧 > 列表页

php面试技巧

小草范文网  发布于:2017-03-24  分类: 面试技巧 手机版

篇一:PHP面试题总汇__整理完整版

PHP的意思 PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。 SESSION 与 COOKIE的区别是什么,请从协议,产1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。 2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。 禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。 不使用cookie向客户端发送一个cookie. 理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在的COOKIE一起提交到服务器端。 简述Cookie的设置及获取过程 设置COOKIE的值: Setcookie(名称,值,保存时间,有效域); 获取值:$_COOKIE['名称']; HTTP 状态中302、403、 500、200、404、502代一二三四五原则: 一. 消息系列 二. 成功系列三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。 200是请求成功,404是文件未找到,502是服务器内部错误。 请写出数据类型(int char varchar datetime text)的19、Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 Varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些MyISAM 和 InnoDB 的基本区别?索引结构如何实MyISAM类型不支持事务处理等高级处理,而

- 1 - InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。 创建索引:alert table tablename add index (`字段名`) isset() 和 empty() 区别 Isset判断变量是否存在,如果存在则返回真,empty判断变量是否为空为假,如果为空为假则返回真。 include与require的区别? 1.include()在执行文件时每次都要进行读取和评估 require()文件只处理一次(实际上文件内容替换了require()语句) 2.require()通常放在PHP脚本程序的最前面 include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化 3,require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样 4,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括. 5,require()包含文件失败,停止执行,给出错误(致命的) include()常用于动态包含. 通常是自动加载的文件,即使加载出错,整个程序还是继续执行 一个页面声明,另一个页面调用 包函文件失败,继续向下执行,返回一条警告 PHP字符串中单引号与双引号的区别? 单引号不能解释变量,而双引号可以解释变量。 单引号不能转义字符,在双引号中可以转义字符。 请说明 PHP 中传值与传引用的区别。什么时候传值什 按值传递:函数范围内对值的任何改变在函数外部都会被忽略 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。 function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b);//这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101 in, not ni, exist, not exist的作用和区别? in在什么中 Not in 不在什么中 Exists 存在

Not exists 不存在 面向对象中接口和抽象类的区别及应用场景? 1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定义。 2、接口中全部是抽象方法,方法不用使用abstract定义。 3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。 echo(),print(),print_r()的区别? echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)Print()只能打印出简单类型变量的值(如int,string)print_r()可以打印出复杂类型变量的值(如数组,对象)echo 输出一个或者多个字符串 mysql_fetch_row() 和mysql_fetch_array之间有什Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。 请描述出两点以上XHTML和HTML最显著的区别 (1)XHTML必须强制指定文档类型DocType,HTML不需要 (2)XHTML所有标签必须闭合,HTML比较随意 33. HTTP协议中GET、POST和HEAD的区别? HEAD: 只请求页面的首部。 GET: 请求指定的页面信息,并返回实体主体。 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 (1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。 (2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; GET方式提交的数据最多只能有1024字节,而POST则没有此限制。 (3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。 表单中 get与post提交方法的区别? 1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

- 2 - get安全性非常低,post安全性较高。 foo()和@foo()之间有什么区别?(1分) @foo()控制错误输出 线性表和顺序表的区别? 1、线性表包括顺序表和链表。 2、顺序表中的元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。 什么是数据库索引,主键索引,唯一索引的区别,索引索引用来快速地寻找那些具有特定值的记录。 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。 索引的缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 3、当对表中 的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 浏览器IE和非IE浏览器的划分,区别是什么? IE浏览器指的是使用IE内核的浏览器,对一些W3C标准的网页代码的支持不是很好。 非IE浏览器指的是没有使用IE内核的浏览器,对W3C标准的网页代码有很好的支持。 数据库中的事务是什么? 事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作 完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。 解释:左连接,右连接,内连接,索引。 1、內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。内部连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来。 2、左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。 3、左连接是只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来 4、右连接是只要右边表中有记录,数据就能检索出来 ; 5、全连接则会回返回两个表中的所有记录 简述0000000中无限分类的实现原理。 1、数据库分类表的设计:id字段、父id字段、类名称字段、path字段 2、Path字段存当前分类的路径,格式:0,父类id,本身id 3、查询分类:select * from 分类表order by path asc; 4、这样就查出来每个分类及其对应的子类。 能够使html和php分离开使用的模板? Smarty、template、PHPlibTemplate、FastTemplate

使用那些工具进行版本控制? Clear case、CVS、SVN、PVCS、Perforce、CCC、StarTeam、RCS 写出三种以上MySQL数据库存储引擎的名称(提示: MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎 什么是模板技术、能够使HTML和PHP分离开使用的 模板技术就是使程序的逻辑代码和界面分开的技术。 能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate 实现中文字串截取无乱码的方法 Mb_substr(); 用PHP写出显示客户端IP与服务器IP的代码 获取客户端IP:get_env(“REMOTE_ADDR”); 获取服务器端IP:$_SERVER["SERVER_ADDR"]; 数据库索引有几类,分别是什么?什么时候该用索引? 普通索引、主键索引、唯一索引 并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。 写几个魔术方法并说明作用? __call()当调用不存在的方法时会自动调用的方法 __autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件 __set()当给未定义的变量赋值时会自动调用的方法 __get()当获取未定义变量的值时会自动调用的方法 __construct()构造方法,实例化类时自动调用的方法 __destroy()销毁对象时自动调用的方法 __unset()当对一个未定义变量调用unset()时自动调用的方法 __isset()当对一个未定义变量调用isset()方法时自动调用的方法 __clone()克隆一个对象 __tostring()当输出一个对象时自动调用的方法 $_REQUEST、$_POST、$_GET、$_COOKIE、 它们都是PHP预定义变量 $_REQUEST用来获取post或get方式提交的值 $_POST用来获取post方式提交的值 $_GET用来获取get方式提交的值 $_COOKIE用来获取cookie存储的值 $_SESSION用来获取session存储的值 $_FILE用来获取上传文件表单的值 数组中下标最好是什么类型的,为什么? 数组的下标最好是数字类型的,数字类型的处理速度快。 ++i和i++哪一个效率高,为什么? ++i效率比i++的效率更高,因为++i少了一个返回i的过程。 magic_quotes_gpc()、magic_quotes_runtime()的Magic_quotes_gpc()是php配置文件中的,如果设置

- 3 - 为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\ Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。 框架中什么是单一入口和多入口,单一入口的优缺点? 1、多入口就是通过访问不同的文件来完成用户请求。 单一入口只web程序所有的请求都指向一个脚本文件的。 2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。 缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。 你对Memcach的理解,优点有哪些? Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。 Memcache的优点:稳定、配置简单、多机分布式存储、速度快。 对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题: a) 索引的目的是什么? 1、快速访问数据表中的特定信息,提高检索速度 2、创建唯一性索引,保证数据库表中每一行数据的唯一性 3、加速表和表之间的连接 4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 b) 索引对数据库系统的负面影响是什么? 负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。 c) 为数据表建立索引的原则有哪些? 1、在最频繁使用的、用以缩小查询范围的字段上建立索引 2、在平频繁使用的、需要排序的字段上建立索引 d) 什么情况下不宜建立索引? 1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引 2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。 web应用中,数据库的读取频率远高于写入频率, 如何使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。 如果网站的访问量很大,可以把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。 如果是一个Web频繁访问的查询,上题的查询如何优使用memcache缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,世界调用缓存文件而不必重新查询数据库。

数据库设计时,常遇到的性能瓶颈有哪些,常有的解决瓶颈主要有: 1、磁盘搜索 优化方法是:将数据分布在多个磁盘上 2、磁盘读/写 优化方法是:从多个磁盘并行读写。 3、CPU周期 优化方法:扩充内存 4、内存带宽请举例说明在你的开发过程中用什么方法来加快页面的 要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。 描述一下大流量高并发量网站的解决方案 1、确认服务器硬件是否足够支持当前的流量。 2、使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库。 3、禁止外部的盗链。 4、外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链,目前可以简单的通过refer来控制盗链,apache自己就可以通过配置来禁止盗链。 5、控制大文件的下载。 大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网站响应能力下降。 6、使用不同的主机分流主要流量 7、使用流量统计软件。在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。 8、分库分表。 9、Sphinx全文索引引擎。 对于大流量的网站,您采用什么样的方法来解决访问量 优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法: 1、确定当前服务器设备是否满足流量需求。 2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。 3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。 4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。 5、使用不同的主机分流主要流量,使服务器均衡负载。 6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。 如何设计或配置Mysql,才能达到高效使用的目的。 1、数据库设计方面,设计结构良好的数据库,允许部分数据冗余。 选取最适用的字段属性,尽可能把字段设置为NOTNULL,这样在查询的时候,数据库不用去比较NULL值。 2、系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提高效率。 使用连接(join)来代替子查询 使用联合(union)来代替手动创建的临时表 所得皆必须,只从数据库取必须的数据。 必要的时候用不同的存储引擎,比如Innodb可以减少死锁,HEAP可以提高一个数量级的查询速度。 使用事务

- 4 - 使用外键 使用索引 设定网站的用户数量在千万级,但是活跃用户的数量只我们可以根据用户的活跃程度,把活跃的用户提取出来放到另外一张表里面,每次活跃的用户登陆的时候就直接到活跃用户表中进行查询,这样就提高了数据库的查询速度。 了解XSS攻击吗? 如何防止 ? XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。 使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。 SQL注入漏洞产生的原因 ? 如何防止? SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。 防止SQL注入: 1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置 2、执行sql语句时使用addslashes进行sql语句转换 3、Sql语句书写尽量不要省略小引号和单引号 4、过滤掉sql语句中的一些关键字:update、insert、delete、select、* 5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。 6、Php配置文件中设置register_globals为off,关闭全局变量注册 7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。 如何进行防SQL注入? 1、过滤掉一些常见的数据库操作关键字:select,insert,update,delete,and,*等 或者通过系统函数:addslashes(需要被过滤的内容)来进行过滤。 2、在PHP配置文件中 Register_globals=off;设置为关闭状态 //作用将注册全局变量关闭。 比如:接收POST表单的值使用$_POST['user'],如果将register_globals=on;直接使用$user可以接收表单的值。 3、SQL语句书写的时候尽量不要省略小引号(tab键上面那个)和单引号 4、提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的 5、对于常用的方法加以封装,避免直接暴漏SQL语句 6、开启PHP安全模式 Safe_mode=on; 7、打开magic_quotes_gpc来防止SQL注入 Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大作用。 因此开启:magic_quotes_gpc=on; 8、控制错误信息 关闭错误提示信息,将错误信息写到系统日志。 9、使用mysqli或pdo预处理。

用PHP写出一个安全的用户登录系统需要注意哪些方 1、密码要使用MD5(密码+字符串)进行加密。 2、登录表单的名称不要跟数据库字段一样,以免暴漏表字段。 3、用户表的表名、字段名、密码尽量用不容易被猜到的。 4、要使用验证码验证登陆,以防止暴力破解。 5、验证提交的数据是不是来自本网站。 6、登录后台处理代码数据库部分使用预处理,做好过滤,防止sql注入。 如何实现多个线程安全的写入一个文件数据。 采用锁机制,当一个用户在对此文件进行读写入操作时,将此文件锁定,操作完毕后解除锁定,在该用户进行读写入操作过程中,其他用户不能操作此文件,需要排队等待。什么是满二叉树?什么事完全二叉树? 满二叉树:除了叶子节点外的所有节点都有两个子节点。 完全二叉树:每个节点最多有两个子节点,缺右不缺左,而且最多只能缺少一个叶子节点。 字符串转数组,数组转字符串,字符串截取,字符串替换, Implode()、explode()、substr()、str_replace()、strpos、strrpos、strstr GD库是做什么用的? (1分) gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图; MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。 视图是用户看到并与之交互的界面。 模型表示企业数据和业务规则。 控制器接受用户的输入并调用模型和视图去完成用户的需求。 MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理 MVC的缺点:没有明确的定义,完全理解MVC并不容易。不适合小型规模的应用程序。 PHP如何抛出和接收错误? 使用try...catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。 PHP的网站主要攻击方式有哪些? 1、命令注入(Command Injection) 2、eval注入(Eval Injection) 3、客户端脚本攻击(Script Insertion) 4、跨网站脚本攻击(Cross Site Scripting, XSS) 5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8、Session 固定攻击(Session Fixation) 9、HTTP响应拆分攻击(HTTP Response Splitting) 10、文件上传漏洞(File Upload Attack) 11、目录穿越漏洞(Directory Traversal) 12、远程文件包含攻击(Remote Inclusion) 13、动态函数注入攻击(Dynamic Variable Evaluation) 14、URL攻击(URL attack) 15、表单提交欺骗攻击(Spoofed Form Submissions) 16、HTTP请求欺骗攻击(Spoofed HTTP Requests) 几个重要的php.ini选项 Register Globals php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。 safe_mode 安全模式,PHP用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode = On 1、限制文件存取 safe_mode_include_dir = “/path1:/path2:/path3″ 不同的文件夹用冒号隔开 2、限制环境变量的存取 safe_mode_allowed_env_vars = string 指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量 John 写出Zend框架的目录结构,简单说明目录作用? application/ – 存放应用程序的目录,包括 MVC 系统、配置文件、服务以及引导程序(Bootstrap.php) configs/ –配置文件目录。 application/modules– 多模块目录结果例如admin(后台前程),default(前台),shop(商城)各个模块下都有自己的controllers,modules,Views controllers/models/views/ – 控制器/模型/视图 目录。 application/cache –存放缓存等数据 application/helpers/ – 这个是存放“行动助手”(action helper)的目录。这些助手类默认的命名空间是“Controller_Helper_”,如果是多模块那么命令空间将是“<Module>_Controller_Helper”。 Bootstrap.php – 这个是应用程序入口文件。这个类的主要工作是引导应用程序,注册并初始化组件(component)。注意:不要在这个文件调用前置控制器(front controller)的dispatch() 方法。 library/ – 存放类库的目录。第三方的类库和自己写的类库放在这里进行自动 加载 但要注意要用自己独立的命名空间(建子目录)。 public/ – 存放公开文件的目录,也即网站的根目录,存放可以被用户访问的文件,例如js、css和图片等等。index.php 是应用程序的单入口,其主要工作是建立php环境,引用Bootstrap.php来初始化,并调用前置控制器的dispatch()方法来分发请求。 谈谈对mvc的认识? 由模型(model),视图(view),控制器(controller)完成的应用程序

- 5 -

篇二:PHP技术面试题

基础题:

1.表单中 get与post提交方法的区别?

2.session与cookie的区别?

3.数据库中的事务是什么?

简述题:

1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)

2、echo(),print(),print_r()的区别(3分)

3、能够使HTML和PHP分离开使用的模板(1分)

4、使用哪些工具进行版本控制?(1分)

5、如何实现字符串翻转?(3分)

6、优化MYSQL数据库的方法。(4分,多写多得)

7、PHP的意思(送1分)

8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)

9、实现中文字串截取无乱码的方法。(3分)

10、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)

11、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)

12、请简单阐述您最得意的开发之作(4分

13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

14、用PHP写出显示客户端IP与服务器IP的代码1分)

15语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?

16、如何修改SESSION的生存时间(1分).

17、有一个网页地址, 比如PHP开发资源网主页: /index.html,如何得到它的内容?($1分)

18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)

19、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)

20、谈谈asp,php,jsp的优缺点(1分)

21、谈谈对mvc的认识(1分)

22写出发贴数最多的十个人名字的SQL,利用下表:

members(id,username,posts,pass,email)(2分)

23. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)

24. 在PHP中error_reporting这个函数有什么作用? (1分)

25. 请写一个函数验证电子邮件的格式是否正确 (2分)

26. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)

27、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)

28、JS的转向函数是?怎么引入一个外部JS文件?(2分)

29、foo()和@foo()之间有什么区别?(1分)

30、如何声明一个名为”myclass”的没有方法和属性的类? (1分)

31、如何实例化一个名为”myclass”的对象?(1分)

32、你如何访问和设置一个类的属性? (2分)

33、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)

34、GD库是做什么用的? (1分)

35、指出一些在PHP输入一段HTML代码的办法。(1分)

36、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)

37、下面哪个选项没有将 john 添加到users 数组中? (1分)

(a) $users[] = ?john?;

(b) array_add($users,?john?);

(c) array_push($users,?john?);

(d) $users ||= ?john?; [ a , c ]

38、下面的程序会输入是否?(1分)

$num = 10;

function multiply(){

$num = $num * 10; }

multiply();

echo $num;

输出:

39、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)

表名User

Name Tel Content Date

张三 13333663366 大专毕业 2006-10-11

张三 13612312331 本科毕业 2006-10-15

张四 021-55665566 中专毕业 2006-10-15

请根据上面的题目完成代码:

40、如何使用下面的类,并解

php面试技巧

释下面什么意思?(3)

class test{

function Get_test($num){

$num=md5(md5($num)."En");

return $num;}

}

41、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)

表名User

Name Tel Content Date

张三 13333663366 大专毕业 2006-10-11

张三 13612312331 本科毕业 2006-10-15

张四 021-55665566 中专毕业 2006-10-15

(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中 (b) 请用sql语句把张三的时间更新成为当前系统时间

(c) 请写出删除名为张四的全部记录

42_a请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)

42、写出以下程序的输出结果 (1分)

$b=201;

$c=40;

$a=$b>$c?4:5;

echo $a;

43、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)

44、取得查询结果集总数的函数是?(1分)

45、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)

46、请将41题的数组的值用','号分隔并合并成字串输出(1分)

47、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)

48、PHP可以和sql server/oracle等数据库连接吗?(1分)

49、请写出PHP5权限控制修饰符(3分)

50、请写出php5的构造函数和析构函数(2分)

51、完成以下:

(一)创建新闻发布系统,表名为message有如下字段 (3分)

id 文章id

title 文章标题

content 文章内容

category_id 文章分类id

hits 点击量

(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)comment_id 回复id

id 文章id,关联message表中的id

comment_content 回复内容现通过查询数据库需要得到以下格式的文章标题列表,并

按照回复数量排序,回复最高的排在最前面

文章id 文章标题 点击量 回复数量

用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0

答:

(三)上述内容管理系统,表category保存分类信息,字段如下 (3分)

category_id int(4) not null auto_increment;

categroy_name varchar(40) not null;

用户输入文章时,通过选择下拉菜单选定文章分类

写出如何实现这个下拉菜单

编程题:

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

例如: .cn/abc/de/fg.php?id=1 需要取出 php 或 .php

答案1:

答案2:

2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句

请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5

请注意:

1. 需要处理完整的 html 页面,即不光此 meta 语句

2. 忽略大小写

3. ' 和 " 在此处是可以互换的

4. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行

5. 注意处理多余空格

3. 写一个函数,算出两个文件的相对路径

如 $a = '/a/b/c/d/e.php';

$b = '/a/b/12/34/c.php';

计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

填空题:

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量

__$_SERVER['PHP_SELF']__中;而链接到当前页面的URL记录在预定义变量

__$_SERVER['HTTP_REFERER']__

2.执行程序段<?php echo 8%(-2) ?>将输出____。

3.在HTTP 1.0中,状态码 401 的含义是____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为____。

4.数组函数 arsort 的作用是__对数组进行逆向排序并保持索引关系__;语句

error_reporting(2047)的作用是__报告所有错误和警告__。

5.PEAR中的数据库连接字符串格式是____。

6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):preg_replace("/<script[^>].*?>.*?</script>/si", "newinfo", $script);

7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。LoadModule php5_module "c:/php/php5apache2.dll" , AddType

application/x-httpd-php .php,

8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句__require_once||include_once__来代替它们。

9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。

10.一个函数的参数不能是对变量的引用,除非在php.ini中把

__allow_call_time_pass_reference boolean__设为on.

11.SQL中LEFT JOIN的含义是__自然左外链接__。如果 tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID) 和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____。

12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____。

编程题:

13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

篇三:PHP入门面试题含答案

最近正在学习php,无意中发现了这个面试题,可是都没有答案我就花了一点时间整理一下,和大家,希望大家共同努力

基础题

1.表单中 get与post提交方法的区别?

答:get用户端将数据加到URL后,格式为”?字段1=输入数据1&字段2=输入数据2&..."。由于get提交参数后会在地址栏中显示出来,所以会产生严重的安全问题。

get传输的数据量小,get传输的数据量小,这主要是因为受url长度限制;而post可以传输大量的数据。

get限制表单中数据集的范围为asc2码,而post可以支持整个iso10646字符集。

2.session与cookie的区别?

答:cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

3.数据库中的事务是什么?

答:事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消

前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操

作。

引用:

简述题(50分)

1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)

2、echo(),print(),print_r()的区别(3分)

echo是语言结构,无返回值; print功能和echo基本相同,不同的是print是函数,有返回值; $timestamp = time()-3600*24; $date = date("Y-m-d H:i:s",$timestamp); echo $date;

print_r是递归打印,用于输出数组对象

3、能够使HTML和PHP分离开使用的模板(1分)

其实PHP本身就是一种模版引擎 smarty,常见的还有PHPLib,FastTemplate,Savant

4、使用哪些工具进行版本控制?(1分)

CVS Server on Apache作服务端,WinCVS作客户端;

Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.

5、如何实现字符串翻转?(3分)

function cstrrev($str)

{ $len = strlen($str); for($i = 0; $i < $len; $i++) { $char = $str{0}; if(ord($char) > 127) { } $i++; if($i < $len) {} $arr[] = substr($str, 0, 2); $str = substr($str, 2);

{} $arr[] = $char; $str = substr($str, 1); } return join(array_reverse($arr));

}

---------------------------------------------------------------

6、优化MYSQL数据库的方法。(4分,多写多得)

1. 选取最适用的字段属性

2. 使用连接JOIN来代替子查询 Sub-Queries连接JOIN之所以更有效率一些是因为 MySQL不需要在内存

中创建临时表来完成这个逻辑上需要俩个步骤的查询工作。

3. 使用联合UNION来代替手动创建的临时表 4. 事务 5. 锁定表 6. 使用外键 7. 使用索引

8. 优化的查询语句

7、PHP的意思(送1分)

PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语 言,是一种在服务器端执行的嵌

入HTML文档的脚本语言,语言的风格有类似于C语言

8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)

取得当前时间用 now() 就行。

在数据库中格式化时间 用DATE_FORMA T(date, format) .

9、实现中文字串截取无乱码的方法。(3分)

<?php mb_internal_encoding('UTF-8');//必须得写这句话,具体的判断长短就不写了 $str="中华人民共和国万岁!!"; echo mb_substr($str,0,5); ?> 根据格式串format 格式化日期或日期和时间值date,返回结果串。

---------------------------------------------------------------

10、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)

svn,vss 推荐使用 Team Foundation Server 2010

团队合作,很多人同时在做一个软件;单个人写,天天你都在写在改你的软件。 如何协调不同人同时编写同一个程序和同一个人不同时间编写的程序(当然,版本控制来自软件业 ,现在已经发展到很多行业了,

比如CAD数据管理、产品数据管理等等)就需要手段,来确定的描 述某个时间点的软件(数据)的状态,这个手段就是版本控制。

如何区分版本,就得靠版本控制,而对于软件来说,修改一行代码,或者是一个参数、

件就有可能发生巨大的变化,很 字母,软

多人同时在修改,或者你一个人改了几年了,就没人也没办法记住 这些修改,版本控制(软件)就是用来帮忙记住这些个修改的手段。

11、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)

Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代 码和外在的内容,提供了一种易

于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码

讲,目的就是要使PHP程序员同前端人员分离,使

逻辑分离。简单的

程序员改变程序的逻辑内容不 会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作 的项

目中显的尤为重要。

Smarty优点

1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它 的模板引擎技术而言的。

2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了 PHP与HTML混合的方式,在下一

次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重

没有改动的情况下)

3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的 HTML页,当设定Smarty的cache

属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直

态的HTML文件中来,这相当于调用一个静态的HTML文

件。 接转换到这个静新编译(在源程序

4. 插件技术:Smarty可以自定义插件。插件实际就是一些自定义的函数。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行 格式重排。

不适合使用Smarty的地方 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新 ,这类型的程序使用

smarty会使模板处理速度变慢。

小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失 PHP开发迅速的优点。

12、请简单阐述您最得意的开发之作(4分)

13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

1确认服务器硬件是否足够支持当前的流量 2,优化数据库访问 3,禁止外部访问连接 4.控制打文件的下载 5.使用不同主机分流主要流量 6,使用流量软件统计软件

-----------------------------------------------------------------

14、用PHP写出显示客户端IP与服务器IP的代码1分)

打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR'); 打印服务器IP:echo gethostbyname("")

15、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)

1、PHP程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入

页档重新编译,让引入档成为原 后PHP会将网

先网页的一部分。

2、PHP程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或

循环中。 3、require() :无条件包含,如果文件不存在,会报出一个fatal error.脚本停止执行 4、include() : 有条件包含,如果文件不存在,会给出一个 warning,但脚本会继续执行 5、推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

16、如何修改SESSION的生存时间(1分).

1、修改php配置文件中的session.gc_maxlifetime

2、Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期

本文已影响