PHP面试大全基础篇.docx
- 文档编号:10178262
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:65
- 大小:92.70KB
PHP面试大全基础篇.docx
《PHP面试大全基础篇.docx》由会员分享,可在线阅读,更多相关《PHP面试大全基础篇.docx(65页珍藏版)》请在冰豆网上搜索。
PHP面试大全基础篇
PHP面试大全ZX1.2版
版本说明:
基于部分网络+个人+部分群网友帮助集合而成。
如果有错误的地方,请联系
QQ群群主:
247823727修改完成版会重新发布
个人博客:
SVN地址:
如果你能熟练背诵或者掌握以下资料,BAT问题不大
1.php基础部分
1.1堆栈
2.php高级部分
2.1单点登录
2.2ajaxp3p多站点登录
2.3phpSPL
2.4phpMVC框架
2.5异常处理
2.6权限系统rbac
2.7支持的协议和封装协议
2.8编译php扩展
2.9SSL
2.10设计模式
3.php核心及内核,c部分
3.1设计模式
3.2反射机制
3.3网站安全问题
4.linux服务搭建,nginxapchephp-fpm+项目代码管理
5.mysql基础+复杂语句
6,mysqlsql优化+死锁问题+主从+中间件
7.数据库分库,分表问题
8.网站基础架构,到大流量,大并发
9.非关系数据库redismongodb
10.服务SOA化
11.自己写简单php框架
12.各种协议tcphttpudpsocketftp
13.c做php扩展
14.支付宝,微信,网银支付等
15.缓存系统文件缓存数据库缓存redis缓存等
16.算法php相关排序,冒泡,二分查找,单链表,双链表,环形链表等
17.大数据,云平台(粗略介绍)
一些没法归类的问题
关于面试的一些废话和寄语!
1.php基础部分
1.简述两种屏蔽php程序的notice警告的方法
初始化变量,文件开始设置错误级别或者修改php.ini设置error_reporting
set_error_handler和@抑制错误
1.在程序中添加:
error_reporting(E_ALL&~E_NOTICE);
2.或者修改php.ini中的:
error_reporting=E_ALL
改为:
error_reporting=E_ALL&~E_NOTICE
3.error_reporting(0);或者修改php.inidisplay_errors=Off
2.include_once和require_once分别返回什么错误级别
include_once会系统警告并继续执行,require_once会发出系统警告但是会引致致命错误令脚本终止运行
3.例举几个常用的魔术方法,并说明作用?
魔术函数
1。
__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
2。
__destruct()
当删除一个对象或对象操作终止时被调用。
3。
__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。
4。
__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。
5。
__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。
6。
__toString()
打印一个对象的时被调用。
如echo$obj;或print$obj;
7。
__clone()
克隆对象时被调用。
如:
$t=newTest();$t1=clone$t;
8。
__sleep()
serialize之前被调用。
若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
9。
__wakeup()
unserialize时被调用,做些对象的初始化工作。
10。
__isset()
检测一个对象的属性是否存在时被调用。
如:
isset($c->name)。
11。
__unset()
unset一个对象的属性时被调用。
如:
unset($c->name)。
12。
__set_state()
调用var_export时,被调用。
用__set_state的返回值做为var_export的返回值。
13。
__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。
魔术常量
1。
__LINE__
返回文件中的当前行号。
2。
__FILE__
返回文件的完整路径和文件名。
如果用在包含文件中,则返回包含文件名。
自PHP4.0.2起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
3。
__FUNCTION__
返回函数名称(PHP4.3.0新加)。
自PHP5起本常量返回该函数被定义时的名字(区分大小写)。
在PHP4中该值总是小写字母的。
4。
__CLASS__
返回类的名称(PHP4.3.0新加)。
自PHP5起本常量返回该类被定义时的名字(区分大小写)。
在PHP4中该值总是小写字母的。
5。
__METHOD__
返回类的方法名(PHP5.0.0新加)。
返回该方法被定义时的名字(区分大小写)。
4.类静态方法和实例化类方法比较及优缺点
5.例如google,baidu等大型网站,当使用不同客户端(如手机和PC机)访问同样的URL时,呈现的页面却不相同,这是何原理?
简单的可以用user_agent判断,但是及其初步
可以的话通过服务器或者手机终端特征或者wap网关accept信息等
6.请说明PHP中传值与传引用的区别。
什么时候传值什么时候传引用?
传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。
7.echo(),print(),print_r()的区别
echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象
echo与print:
它们都不是真正的函数,是一种语法结构(也有说print是函数,echo不是)。
echo和print后面都可不用加(),如:
echo‘ok’;print‘ok’;
运行速度echo稍快一些,因为echo并不返回值,print返回一个值int
(1)。
结论:
1、一般用echo,除非三元运算时。
$a=5;($a==5)?
print’5′:
print0;
2、echo后一般不要跟()。
print_r是递归打印,主要用于输出数组对象。
print只能有一个参数,所以不能不能用”,”,而echo可以。
Sprintf以一定的格式格式化一个字符串
8.如何实现字符串翻转?
用strrev函数呗,不准用PHP内置的就自己写:
[php]viewplaincopy在CODE上查看代码片派生到我的代码片
strrev($str)
{
$len=strlen($str);
$newstr='';
for($i=$len;$i>=0;$i--)
{
$newstr.=$str{$i};
}
return$newstr;
}
9.实现中文字串截取无乱码的方法。
mb_substr()
10.求两个日期的差数,求前一天
(strtotime(‘2007-3-6’)-strtotime(‘2007-2-5’))/3600*24
echodate('Y-m-dH:
i:
s',strtotime('-1day'));
11.如何用php的环境变量得到一个网页地址的内容?
ip地址又要怎样得到?
$_SERVSR[‘REQUEST_URI’],$_SERVER[‘REMOTE_ADDR’]
12.使用五种以上方式获取一个文件的扩展名
get_ext1($file_name)
{returnstrrchr($file_name,'.');}
2)
get_ext2($file_name)
{returnsubstr($file_name,strrpos($file_name,'.'));}
3)
get_ext3($file_name)
{returnarray_pop(explode('.',$file_name));}
4)
get_ext4($file_name)
{$p=pathinfo($file_name);
return$p['extension'];}
5)
get_ext5($file_name)
{returnstrrev(substr(strrev($file_name),0,strpos(strrev($file_name),'.')));}
13.写几个常用的PHP的扩展的名称和作用
mysql、gd2、pdo、curl、mbstring、soap等,在php.ini中可以找到。
尽量多了解一些扩展,了解他们的功能(能做什么)。
php通过使用php_ming库(Ming库)快速生成Flash动画
14.MVC模式的了解
MVC是Model(模型)、View(视觉)、Controll(控制器)的缩写。
MVC(Model-View-Controller)介绍
模型(Model):
应用程序的模型部分关心的是欲显示的数据的细节。
模型通常关注的是应用程序的业务逻辑部分,关注的是如何使用数据库来读取和保存数据。
视图(View):
视图关心的是用户显示的部分,它通常是HTML。
控制器(Controller):
控制器将特定的模型和视图结合起来,保证将正确的数据显示到页面上。
还有部分未写。
。
。
。
。
。
。
。
。
。
。
待补充
15.能够使HTML和PHP分离开使用的模板
常用的模板引擎:
smarty,还有PHPLib,FastTemplate,Savant等。
但是php自身也是模版引擎
16.简述如何得到当前执行脚本路径,包括所得到参数。
访问
echo$_SERVER['SCRIPT_URL'];//得到/phpinfo.php
echo$_SERVER["SCRIPT_URI"];//得到
echo$_SERVER["SCRIPT_FILENAME"];//得到F:
/www/Temp/phpinfo.php
echo$_SERVER["REQUEST_URI"];//得到/phpinfo.php?
id=1
echo$_SERVER["SCRIPT_NAME"];//得到/phpinfo.php
17.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须__。
结束标识符所在的行不能包含任何其它字符除”;”
Heredoc
echo<< Thistextiswrittentothescreenasoutputandthis$variableisparsedtoo.IfyouwantedyoucanhaveHTMLtagsinhereaswell.TheEND;remarksmustbeonalineofitsown,andcan’tcontainanyextrawhitespace. END; 18.写出session的运行机制。 session创建时,是否会在服务端记录一个cookie? cookie里面的内容是什么? session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。 保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。 一般这个cookie的名字都是类似于SEEESIONID。 由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。 经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http: //…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng! -145788764 另一种是作为查询字符串附加在URL后面,表现形式为http: //…../xxx? SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng! -145788764 为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。 19.Cookie的原理及使用? Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。 在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。 cookie可以跨越子域名。 比如我们在下面注册个个cookie,那么可以在上读取到该cookie。 session不可以跨越子域名: 比如我们在下面注册个个session,那么不可以在,上读取到该session。 20.请将数组的值用’,’号分隔并合并成字符串输出。 如何将一个以’,’隔开的字符串分割成数组? 参考implode.php把数组变成字符串 要掌握implode和explode的用法。 21.不用新变量直接交换现有两个变理的值 List($a,$b)=array($a,$b); 22.表单中get与post提交方法的区别? a、Get方法通过URL请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于action属性所指程序的url后,如url上,就像用户点击一个链接一样;Post方法通过HTTPpost机制,将表单内各字段名称与其内容放置在HTML表头(header)内一起传送给服务器端交由action属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理 b、Get方式需要使用$_GET来取得变量的值;而Post方式通过$_POST来访问提交的内容 c、Get方式传输的数据量非常小,一般限制在2KB左右,但是执行效率却比Post方法好;而Post方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。 可在php.in中对post_max_size进行设置。 建议: 除非你肯定你提交的数据可以一次性提交,否则请尽量用Post方法 d、Get方式提交数据,会带来安全问题,比如一个登陆页面,通过Get方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用Post方法;Post方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框。 建议: 出于安全性考虑,建议最好使用Post提交数据***********************************在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的。 Form提供了两种数据传输的方式——get和post。 虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。 虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。 Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。 二者主要区别如下: a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”? ”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。 c、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头部传输的。 23.session与cookie的区别? session是服务器端缓存,cookie是客户端缓存。 cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 24.Cookie、session的联系和区别,多台web服务器如何共享session Session采用键值对,也就是说ID存放客户端,而值放在服务器端,是通过用户的ID去找服务器上对应的值,这种方式值放置在服务器端,有个时间限制,时间到则服务器自动释放. Cookies则有两种方法,一种方法是把值保存在浏览器的变量中,当浏览器关闭时结束,另一种方法是保存在硬盘中,只要时间不过期,下次还可使用. Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间。 而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。 这一过程,是不用开发人员干预的。 所以一旦客户端禁用Cookie,那么Session也会失效。 服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。 如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。 可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。 25.请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响? safe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。 要启用safe_mode,只需修改php.ini: safe_mode=On或者修改httpd.conf,定义目录: OptionsFollowSymLinksphp_admin_valuesafe_mode1 重启apache后safe_mode就生效了。 启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数。 默认情况下,所有操作文件的函数将只能操作与脚本UID相同的文件。 注意: 如果在linux中启用了safe_mode,那么如果要在一个目录中创建一个目录,比如要在/upload中创建一个20081202,那么/upload目录所有者必须是apache的所有者。 26.isset()和empty()的区别 两者都是测试变量用的。 但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。 如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。 如果一个变量被赋空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。 要注销一个变量,可以用unset($foo)或者$foo=NULL。 27.使用哪些工具进行版本控制? cvs,svn,git; 28.请写一个函数验证电子邮件的格式是否正确(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); } 29.请写出PHP5权限控制修饰符 public(公共) private(私用) protected(继承) final static const 30.解析一个URL $url="http: //ci.localhost/index.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 面试 大全 基础