PHP常见面试题及答案.docx
《PHP常见面试题及答案.docx》由会员分享,可在线阅读,更多相关《PHP常见面试题及答案.docx(16页珍藏版)》请在冰豆网上搜索。
![PHP常见面试题及答案.docx](https://file1.bdocx.com/fileroot1/2022-12/31/269feb56-3cfa-4233-ba3d-7432f858be84/269feb56-3cfa-4233-ba3d-7432f858be841.gif)
PHP常见面试题及答案
基础题:
1.表单中get与post提交方法的区别?
答:
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.
2.session与cookie的区别?
答:
session:
储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:
用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短
3.数据库中的事务是什么?
答:
事务(transaction)是作为一个单元的一组有序的数据库操作。
如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,
事务则提交,其修改将作用于所有其他数据库进程。
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
简述题:
1、用PHP打印出前一天的时间格式是2006-5-1022:
21:
21(2分)
答:
echodate('Y-m-dH:
i:
s',strtotime('-1days'));
2、echo(),print(),print_r()的区别(3分)
答:
echo是PHP语句,print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print()只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo输出一个或者多个字符串
3、能够使HTML和PHP分离开使用的模板(1分)
答:
Smarty,Dwoo,TinyButStrong,TemplateLite,Savant,phemplate,XTemplate
5、使用哪些工具进行版本控制?
(1分)
答:
cvs,svn,vss;
6、如何实现字符串翻转?
(3分)
答:
echostrrev($a);
7、优化MYSQL数据库的方法。
(4分,多写多得)
答:
1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOTNULL,例如'省份,性别',最好设置为ENUM
2、使用连接(JOIN)来代替子查询:
a.删除没有任何订单客户:
DELETEFROMcustomerinfoWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)
b.提取所有没有订单客户:
SELECTFROMcustomerinfoWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)
c.提高b的速度优化:
SELECTFROMcustomerinfoLEFTJOINorderidcustomerinfo.customerid=orderinfo.customerid
WHEREorderinfo.customeridISNULL
3、使用联合(UNION)来代替手动创建的临时表
a.创建临时表:
SELECTnameFROM`nametest`UNIONSELECTusernameFROM`nametest2`
4、事务处理:
a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
mysql_query("BEGIN");
mysql_query("INSERTINTOcustomerinfo(name)VALUES('$name1')";
mysql_query("SELECT*FROM`orderinfo`wherecustomerid=".$id");
mysql_query("COMMIT");
5、锁定表,优化事务处理:
a.我们用一个SELECT语句取出初始数据,通过一些计算,用UPDATE语句将新值更新到表中。
包含有WRITE关键字的LOCKTABLE语句可以保证在UNLOCKTABLES命令被执行之前,
不会有其它的访问来对inventory进行插入、更新或者删除的操作
mysql_query("LOCKTABLEcustomerinfoREAD,orderinfoWRITE");
mysql_query("SELECTcustomeridFROM`customerinfo`whereid=".$id);
mysql_query("UPDATE`orderinfo`SETordertitle='$title'wherecustomerid=".$id);
mysql_query("UNLOCKTABLES");
6、使用外键,优化锁定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一条没有合法的customerid的记录不会写到orderinfo里
CREATETABLEcustomerinfo
(
customeridINTNOTNULL,
PRIMARYKEY(customerid)
)TYPE=INNODB;
CREATETABLEorderinfo
(
orderidINTNOTNULL,
customeridINTNOTNULL,
PRIMARYKEY(customerid,orderid),
FOREIGNKEY(customerid)REFERENCEScustomerinfo
(customerid)ONDELETECASCADE
)TYPE=INNODB;
注意:
'ONDELETECASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
7、建立索引:
a.格式:
(普通索引)->
创建:
CREATEINDEX<索引名>ONtablename(索引字段)
修改:
ALTERTABLEtablenameADDINDEX[索引名](索引字段)
创表指定索引:
CREATETABLEtablename([...],INDEX[索引名](索引字段))
(唯一索引)->
创建:
CREATEUNIQUE<索引名>ONtablename(索引字段)
修改:
ALTERTABLEtablenameADDUNIQUE[索引名](索引字段)
创表指定索引:
CREATETABLEtablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是唯一索引,一般在创建表是建立,格式为:
CREATATABLEtablename([...],PRIMARYKEY[索引字段])
8、优化查询语句
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
SELECT*FROMorderWHEREYEAR(orderDate)<2008;(慢)
SELECT*FROMorderWHEREorderDate<"2008-01-01";(快)
例子2:
SELECT*FROMorderWHEREaddtime/7<24;(慢)
SELECT*FROMorderWHEREaddtime<24*7;(快)
例子3:
SELECT*FROMorderWHEREtitlelike"%good%";
SELECT*FROMorderWHEREtitle>="good"andname<"good";
8、PHP的意思(送1分)
答:
PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
9、MYSQL取得当前时间的函数是?
,格式化日期的函数是(2分)
答:
now(),date()
10、实现中文字串截取无乱码的方法。
(3分)
答:
functionGBsubstr($string,$start,$length){
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return$str.'...';
}else{
return$string;
}
}
11、您是否用过版本控制软件?
如果有您用的版本控制软件的名字是?
(1分)
12、您是否用过模板引擎?
如果有您用的模板引擎的名字是?
(1分)
答:
用过,smarty
13、请简单阐述您最得意的开发之作(4分)
答:
信息分类
14、对于大流量的网站,您采用什么样的方法来解决访问量问题?
(4分)
答:
确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量
15、用PHP写出显示客户端IP与服务器IP的代码1分)
答:
打印客户端IP:
echo$_SERVER[‘REMOTE_ADDR’];或者:
getenv('REMOTE_ADDR');
打印服务器IP:
echogethostbyname("")
16、语句include和require的区别是什么?
为避免多次包含同一文件,可用(?
)语句代替它们?
(2分)
答:
require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require
include->include有返回值,而require没有(可能因为如此require的速度比include快)
注意:
包含文件不存在或者语法错误的时候require是致命的,include不是
17、如何修改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()andsession_set_cookie_params($lifeTime);
18、有一个网页地址,比如PHP开发资源网主页:
答:
方法1(对于PHP5及更高版本):
$readcontents=fopen(""rb");
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo$contents;
方法2:
echofile_get_contents("
19、在HTTP1.0中,状态码401的含义是(?
);如果返回“找不到文件”的提示,则可用header函数,其语句为(?
);(2分)
答:
状态401代表未被授权,header("Location:
www.xxx.php");
12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
(1分)
答:
heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
例子:
$str=<<mynameisJiangQihui!
SHOW;
13、谈谈asp,php,jsp的优缺点(1分)
答:
ASP全名ActiveServerPages,是一个WEB服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的WEB服务应用程序。
ASP采用脚本语言VBScript(Javascript)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数据库。
还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。
而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--脚本级执行(据说PHP4也已经在Zend的支持下,实现编译运行).Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和JavaApplet之外,又有新的硕果,就是Jsp--JavaServerPage。
Jsp可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。
但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。
在ASP、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。
普通的HTML页面只依赖于Web服务器,而ASP、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。
程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。
ASP、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
14、谈谈对mvc的认识(1分)
答:
由模型(model),视图(view),控制器(controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
15、写出发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)(2分)
答:
SELECT*FROM`members`ORDERBYpostsDESClimit0,10;
16.请说明php中传值与传引用的区别。
什么时候传值什么时候传引用?
(2分)
答:
按值传递:
函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:
函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:
按值传递时,php必须复制值。
特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
17.在PHP中error_reporting这个函数有什么作用?
(1分)
答:
设置错误级别与错误信息回报
18.请写一个函数验证电子邮件的格式是否正确(2分)
答:
functioncheckEmail($email)
{
$pregEmail="/([a-z0-9]*[-_/.]?
[a-z0-9]+)*@([a-z0-9]*[-_]?
[a-z0-9]+)+[/.][a-z]{2,3}([/.][a-z]{2})?
/i";
returnpreg_match($pregEmail,$email);
}
19.简述如何得到当前执行脚本路径,包括所得到参数。
(2分)
答:
$script_name=basename(__file__);print_r($script_name);
21、JS表单弹出对话框函数是?
获得输入焦点函数是?
(2分)
答:
弹出对话框:
alert(),prompt(),confirm()
获得输入焦点focus()
22、JS的转向函数是?
怎么引入一个外部JS文件?
(2分)
答:
window.location.href,
23、foo()和@foo()之间有什么区别?
(1分)
答:
@foo()控制错误输出
24、如何声明一个名为”myclass”的没有方法和属性的类?
(1分)
答:
classmyclass{}
25、如何实例化一个名为”myclass”的对象?
(1分)
答:
newmyclass()
26、你如何访问和设置一个类的属性?
(2分)
答:
$object=newmyclass();
$newstr=$object->test;
$object->test="info";
27、mysql_fetch_row()和mysql_fetch_array之间有什么区别?
(1分)
答:
mysql_fetch_row是从结果集取出1行数组,作为枚举
mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
28、GD库是做什么用的?
(1分)
答:
gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
29、指出一些在PHP输入一段HTML代码的办法。
(1分)
答:
echo"aaa";
30、下面哪个函数可以打开一个文件,以对文件进行读和写操作?
(1分)
(a)fget()(b)file_open()(c)fopen()(d)open_file()[c]
31、下面哪个选项没有将john添加到users数组中?
(1分)
(a)$users[]=‘john’;
(b)array_add($users,’john’);
(c)array_push($users,‘john’);
(d)$users||=‘john’;[a,c]
32、下面的程序会输入是否?
(1分)
$num=10;
functionmultiply(){
$num=$num*10;
}
multiply();
echo$num;
?
>
输出:
10
33、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来(2分)
表名User
NameTelContentDate
张三大专毕业2006-10-11
张三本科毕业2006-10-15
张四021-中专毕业2006-10-15
请根据上面的题目完成代码:
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result=mysql_query("SELECT*FROM`user`WHEREname='张三'");
while($rs=mysql_fetch_array($result)){
echo$rs["tel"].$rs["content"].$rs["date"];
}
34、如何使用下面的类,并解释下面什么意思?
(3)
classtest{
functionGet_test($num){
$num=md5(md5($num)."En");
return$num;
}
}
答:
$testnum="123";
$object=newtest();
$encrypt=$object->Get_test($testnum);
echo$encrypt;
类test里面包含Get_test方法,实例化类调用方法多字符串加密
35、写出SQL语句的格式:
插入,更新,删除(4分)
表名User
NameTelContentDate
张三大专毕业2006-10-11
张三本科毕业2006-10-15
张四021-中专毕业2006-10-15
(a)有一新记录(小王高中毕业2007-05-06)请用SQL语句新增至表中
mysql_query("INSERTINTO`user`(name,tel,content,date)VALUES
('小王','','高中毕业','2007-05-06')")
(b)请用sql语句把张三的时间更新成为当前系统时间
$nowDate=date("Ymd");
mysql_query("UPDATE`user`SETdate='".$nowDate."'WHEREname='张山'");
(c)请写出删除名为张四的全部记录
mysql_query("DELETEFROM`user`WHEREname='张四'");
36、请写出数据类型(intcharvarchardatetimetext)的意思;请问varchar和char有什么区别(2分)
答:
int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串
char的场地固定为创建表设置的长度,varchar为可变长度的字符
38、写出以下程序的输出结果(1分)
$b=201;
$c=40;
$a=$b>$c?
4:
5;
echo$a;
?
>
答:
4
39、检测一个变量是否有设置的函数是否?
是否为空的函数是?
(2分)
答:
isset($str),empty($str);
40、取得查询结果集总数的函数是?
(1分)
答:
mysql_num_rows($result);
41、$arr=array('james','tom','symfony');请打印出第一个元素的值(1分)
答:
echo$array[0];
42、请将41题的数组的值用','号分隔并合并成字串输出(1分)
答:
for($i=0;$i43、$a='abcdef';请取出$a的值并打印出第一个字母(1分)
答:
echo$a{0}或echosubstr($a,0,1)
44、PHP可以和sqlserver/oracle等数据库连接吗?
(1分)
答:
当然可以
45、请写出PHP5权限控制修饰符(3分)
答:
public(公共),private(私用),protected(继承)
46、请写出php5的构造函数和析构函数(2分)
答:
__construct,__destruct
47、完