《PHP面试题.docx》由会员分享,可在线阅读,更多相关《PHP面试题.docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、PHP100 面试题1、PHP的意思?答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP与HTML生成网站主页2、谈谈asp,php,jsp的优缺点?ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生与运行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script)作为自己的开发语言。 PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java与Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数据库。还有一点,PH
2、P是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。 JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Java 上的不凡造诣,将Java 从Java 应用程序 与 Java Applet 之外,又有新的硕果,就是JspJava Server Page。Jsp 可以在Serverlet与JavaBean的支持下,完成功能强大的站点程序。 三者都提供在 HTML 代码中混合某种程序代码、由语言引擎
3、解释执行程序代码的能力。但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的第一次请求时发生。在 ASP 、PHP、JSP 环境下,HTML 代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PHP、JSP 页面需要附加的语言引擎分析与执行程序代码。程序代码的执行结果被重新嵌入到 HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术,客户端浏览器不需要任何附加的软件支持。3、谈谈对mvc的认识?答:由模型(Model),
4、视图(View),控制器(Controller)完成的应用程序 由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;4、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)答:SELECT * FROM members ORDER BY posts DESC limit 0,10;5、GD库是做什么用的? 答:gd库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。6、请写出数据类型(int char varchar d
5、atetime text)的意思; 请问varchar与char有什么别?答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串 char的场地固定为创建表设置的长度,varchar为可变长度的字符7、写出以下程序的输出结果?$c?4:5; echo $a;?答:48、检测一个变量是否有设置的函数是?是否为空的函数是?答:isset($str),empty($str);9、取得查询结果集总数的函数是?答:mysql_num_rows($result);10、$arr = array(james, tom, symfony);
6、请打印出第一个元素的值?答:echo $arr0;11、PHP可以与sql server/oracle等数据库连接吗?答:可以12、请写出PHP5权限控制修饰符?答:public(公共),private(私用),protected(继承)13、请写出php5的构造函数与析构函数?构造函数:_construct析构函数:垃圾回收函数(_destruct)14、表单中 get及post提交方法的区别?get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息(1)get是从服务器上获取数据,post是向服务器传送数据。(2)get是把参数数据队列加到提交
7、表单的action属性所指的url中,值与表单内各个字段一一对应,在url中可以看到。post是通过http post机制,将表单内各个字段及其内容放置在html header内,一起传送到action属性所指的url地址。用户看不到这个过程。(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。(4)get传送的数据量较小,不能大于2KB。Post传送的数据量较大,默认是2M,这是为了避免对服务器用大量数据进行恶意攻击。可在php.ini中对post_max_size进行设置。(5)get安全性
8、非常低,post安全性较高。但是执行效率却比post方法好。(6)get是from的默认方法。15、session及cookie的区别?(1)从安全方面比较:Session保存在服务器端,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。Cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。(2)从存取方式上比较:Session中保存的是对象,cookie中保存的是字符串。(3)是否区分路径上比较:Session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而
9、cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。(4)从工作方式上比较:Session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。(5)从服务器性能方面比较:Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。设置时间要及cookie配合使用:session_set_cookie_params=”;Setcookie(名,值,时间终结点(时间戳),路径,作用域)Setcookie(abc,123,mktime+3600*24,”/
10、”,);16、用PHP打印出前一天的时间格式是2010-7-3 12:28:21?答:echo date(Y-m-d H:i:s, strtotime(-1 days); 17、echo(),print(),print_r()的区别?答:echo是PHP语句, print与print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print() 只能打印出简单类型变量的值(如int,string) print_r() 可以打印出复杂类型变量的值(如数组,对象) echo 输出一个或者多个字符串18、能够使HTML与PHP分离开使用的模板?答:Smarty, TinyButStron
11、g,XTemplate, Savant,Template Lite, Dwoo, phemplate19、使用哪些工具进行版本控制?答:cvs,svn,vss;20、如何实现字符串翻转?答:echo strrev($a); /strrev - 颠倒字符串21、MYSQL取得当前时间的函数是?格式化日期的函数是?now(); date();22、对于大流量的网站,您采用什么样的方法来解决访问量问题?答:缓存(memcache高性能分布式缓存)、生成静态页面、提升服务器硬件性能,数据库读写分离(mysql_proxy),优化数据表、负载均衡及服务器集群、程序功能规则,禁止外部的盗链,控制大文件的下
12、载,使用不同主机分流主要流量23、用PHP写出显示客户端IP及服务器IP的代码?答:打印客户端IP:echo $_SERVERREMOTE_ADDR; 或者: getenv(REMOTE_ADDR);/getenv取得开发环境变量 打印服务器IP:echo gethostbyname();/ gethostbyname取得IP地址函数24、语句include与require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? 答:require-require是无条件包含也就是如果一个流程里加入require,无论条件成立及否都会先执行require include-include有
13、返回值,而require没有(可能因为如此require的速度比include快) 注意:包含文件不存在或者语法错误的时候require是致命的,include不是25、如何修改SESSION的生存时间?.答: 方法2:$savePath = ./session_save_dir/; $lifeTime = 小时 * 秒; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start(); 方法3:setcookie() and session_set_cookie_params($lifeT
14、ime); 26、有一个网页地址, 比如PHP开发资源网主页: ,如何得到它的内容?答:方法1(对于PHP5及更高版本): $readcontents = fopen( rb); $contents = stream_get_contents($readcontents);/ stream_get_contents取得字符串赋值给$contents fclose($readcontents); echo $contents; 方法2:echo ( / () 函数把整个文件读入一个字符串中。27、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header
15、 函数,其语句为?答:状态401代表未被授权,header(Location:);28、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?答:heredoc的语法是用加上自己定义成对的标签,在标签范围內的文字视为一个字串 例子: $str = test; $object-test = info;33、mysql_fetch_row() 与mysql_fetch_array之间有什么区别?答:mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得34、下面哪个函数可以打开一个文件,以
16、对文件进行读与写操作?(a) fget() (b) () (c) fopen() (d) open_file()答:c35、下面的程序会输入是否?否,局部变量 36、JS表单弹出对话框函数是?获得输入焦点函数是? 答:弹出对话框: alert()警告框,prompt()会话框,confirm()疑问框 获得输入焦点 focus()37、JS的转向函数是?怎么引入一个外部JS文件?答:window.location.href; 39、$a = abcdef; 请取出$a的值并打印出第一个字母?答:echo $a0 或 echo substr($a,0,1)38、优化MYSQL数据库的方法。 (1
17、)选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如省份,性别,最好设置为ENUM(2)使用连接(JOIN)来代替子查询: a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) WHERE orderinfo.customerid IS
18、NULL(3)使用联合(UNION)来代替手动创建的临时表 a.创建临时表:SELECT name FROM nametest UNION SELECT username FROM nametest2(4)事务处理: a.保证数据完整性,例如添加与修改同时,两者成立则都执行,一者失败都失败 mysql_query(BEGIN); mysql_query(INSERT INTO customerinfo (name) VALUES ($name1); mysql_query(SELECT * FROM orderinfo where customerid=.$id); mysql_query(C
19、OMMIT);(5)锁定表,优化事务处理: 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
20、(UPDATE orderinfo SET ordertitle=$title where customerid=.$id); mysql_query(UNLOCK TABLES);(6)使用外键,优化锁定表 a.把customerinfo里的customerid映射到orderinfo里的customerid,任何一条没有合法的customerid的记录不会写到orderinfo里 CREATE TABLE customerinfo( customerid INT NOT NULL, PRIMARY KEY(customerid) )TYPE = INNODB; CREATE TABLE o
21、rderinfo ( 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;(7)建立索引: a.格式: (
22、普通索引)- 创建: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索引名(索引字段) (主键)- 它是唯一索引,一般在创建表是建立,格
23、式为: CREATA TABLE tablename (.,PRIMARY KEY索引字段)(8)优化查询语句 a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作 例子1: SELECT * FROM order WHERE YEAR(orderDate)2008;(慢) SELECT * FROM order WHERE orderDate2008-01-01;(快) 例子2: SELECT * FROM order WHERE addtime/724;(慢) SELECT * FROM order WHERE addtime=good and nameGet_test(x
24、iaotian_ls);40 、请举例说明在你的开发过程中用什么方法来加快页面的加载速 答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦41.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):?php$script=以下内容不显示:alert(cc);echo preg_replace(/.*?.*?/si, 替换内容, $script);?42.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句_动态装载PHP模块,然后再用语句_使得Apache把所有
25、扩展名为php的文件都作为PHP脚本处理。答:LoadModule php5_module c:/php/php5apache2.dll;AddType application/x-httpd-php .php43.sort()、asort()、与 ksort() 有什么分别?它们分别在什么情况下使用?sort()根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。 asort()及 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。 ksort()根据阵列中索引键
26、的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。44.“=”是什么?试举一个“=”是真但“=”是假的例子。“=”是既可以返回布尔值“假”,也可以返回一个不是布尔值但却可以赋及“假”值的函式,strpos() 与 strrpos() 便是其中两个例子。问题的第二部份有点困难,想一个“=”是假,但是“=”是真的例子却很容易,相反的例子却很少。但我终于找到以下的例子:if (strpos(abc, a) = true)/ 这部分永不会被执行,因为 a 的位置是 0,换算成布尔值“假”if (strpos(abc, a) = true)/ 这部份会被执行,因为“=”保证函式 strp
27、os() 的送回值不会换算成布尔值.45 、写出以下程序的输出结果 答案:hotdogok 46 、给你三个数,写程序求出其最大值。$var1=1;$var2=7;$var3=8;$max=$var1$var2?$var1:$var2;$max=$max$var3?$max:$var3;echo $max;47、SQLinsert into poll (ip,time,iid) values(127.0.0.1,now(),2); 48、请写一个函数验证电子邮件的格式是否正确 ?答:function checkEmail($email) $pregEmail = /-a-z0-9._+(-a-
28、z0-9-+.)+a-z2,4$/i ; return preg_match($pregEmail,$email); 49 、有一表 menu(mainmenu,submenu,url),请用递归法写出一树形菜单,将所有的menu列出来这里是标题?phpfunction GenerateMenu($id=0,$str=) $result=mysql_query(select mainmenu,url,submenu from menu where mainmenu=$id); while($row=mysql_fetch_array($result) echo $str.$rowurl.; G
29、enerateMenu($rowsubmenu,$str.-); mysql_free_result($result);$link=mysql_connect(localhost,root,);mysql_select_db(phpinterview);GenerateMenu();mysql_close($link)? 50、写出 SQL语句的格式 : 插入 ,更新 ,删除 表名UserName Tel Content Date张三 大专毕业 2006-10-11张三 本科毕业 2006-10-15张四 中专毕业 2006-10-15(a) 有一新记录(小王 高中毕业 2007-05-06)
30、请用SQL语句新增至表中 mysql_query(INSERT INTO user (name,tel,content,date) VALUES (小王,高中毕业,2007-05-06)(b) 请用sql语句把张三的时间更新成为当前系统时间 $nowDate = date(Ymd); mysql_query(UPDATE user SET date=.$nowDate. WHERE name=张山);(c) 请写出删除名为张四的全部记录 mysql_query(DELETE FROM user WHERE name=张四);51、开发框架:Thinkphp、Codeigniter、Fleaph
31、p、phpgrid52、http协议里的200、301、302、401、403、404、500分别代表:200:访问正常301:永久重定向302:为临时重定向400:域名绑定错误401:请求授权失败403:没有权限访问此站404:文件或目录不存在500:程序或服务器错误53、js框架 54、ajax框架 XAJAX、jQPie55、ajax过程中产生几种交互状态分别表示:0:请求1:已建立连接2:已发送处理中3:处理中,完成部分处理4:响应完成56、ajax原理:通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。fun
32、ction CreateXmlHttp()/非IE浏览器创建XmlHttpRequest对象if(window.XmlHttpRequest)xmlhttp = new XmlHttpRequest(); else if(window.ActiveXObject)/IE浏览器创建XmlHttpRequest对象tryxmlhttp=new ActiveXObject(Microsoft.XMLHTTP);catch(e)tryxmlhttp=new ActiveXObject(msxml2.XMLHTTP);catch(ex) 57、传值、传引用:所谓值传递,就是说仅将对象的值传递给目标对象,
33、就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象与原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。优缺点:按值传递时,php必须复制值。特别是对于大型的字符串与对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。传值只是把某一个变量的值传给另一个变量,而引用则说明两者指向了同一个地方58、你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)与数据库SQL的效率(通常是数据库Query时间),并定位与分析脚本执行与数据库查询的瓶颈所在
34、?1脚本执行时间,启用xdebug,使用WinCacheGrind分析。2数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。function timer($end) static $time;global $timer;if (!$end) $time = microtime(true); else $timer += microtime(true) - $time;ob_start();$timer = 0;timer(0);代码段timer(1);ob_clean();echo $timer;59、gethostbyaddr - 获取Intern
35、et主机名对应一个给定的IP地址gethostbyname - 返回对应于给定主机名的主机信息gethostbynamel 返回IPv4地址名单,通过互联网主机指定主机名解析。60、:是否允许通过HTTP上传文件的开关,默认为ON即是开upload_tmp_dir:用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件与有对文件夹的写权限,如果未指定则PHP使用系统默认值upload_max_:允许上传文件大小的最大值,默认为2Mpost_max_size:控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。如果希望使用PHP文件上传功能,则需要将
36、此值改为比upload_max_要大max_input_time:以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间memory_limit:为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量变量memory_limit的值应当适当大于post_max_size的值max_execution_time:设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量
37、非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭61、写个函数来解决多线程同时读写一个文件的问题$fp=fopen(asn.php,w+);flock($fp,LOCK_EX);sleep(10);flock($fp,LOCK_UN);fclose($fp);62、简述如何得到当前执行脚本路径,包括所得到参数。echo $_SERVERscrpt_.?.$_SERVERQUERY_STRING;63、抓取远程图片到本地,你会用什么函数?fsockop
38、en64、接口与抽象类的区别相同:都不能被实例化;必须实现已经声明的抽象方法不同:可以引用多个接口,只能继承一个抽象类;接口是公共属性,抽象类可以是公共、继承、私有的;接口中全是抽象方法及属性,抽象类中可以有非抽象方法及属性65、javascript能否定义二维数组,如果不能你如何解决?javascript不支持二维数组定义,可以用arr0 = new array()来解决66、假设a.html与b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。function go2b()window.location = b.html;windo
39、w.close();setTimeout( go2b(),5000 ); /5秒钟后自动执行go2b()67、写一个函数,能够遍历一个文件夹下的所有文件与子文件夹。68、把 John 新增到 users 阵列?$users = john; array_push($users,john);69、error_reporting(2047)什么作用?error_reporting,配置错误信息回报的等级,2047表示所有错误与警告70、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名 例如: 需要取出 php 或 .php答案1:function getExt($url) $arr = parse_url($url); $file = basename($arrpath); $ext =