您的位置 首页 php

珍藏BAT php编程面试100题汇总(五)

接着上篇文章继续,欢迎大家关注学习(PHP之父镇楼)

81.对于大流量的网站,您采用什么样的方法来解决访问量问题?

首先,确认服务器硬件是否足够支持当前的流量。

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件。

82.error_reporting(2047)什么作用?

答案:相当于 error_reporting(‘E_ALL’); 输出所有的错误。

83、 简述如何得到当前执行脚本路径,包括所得到参数。

访问

参考server.php

84、写出session的运行机制。

session创建时,是否会在服务端记录一个 cookie ?cookie里面的内容是什么?

session机制是一种服务器端的机制,服务器使用一种类似于 散列表 的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的 字符串 ,这个sessionid将被在本次响应中返回给客户端保存。_

保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。一般这个cookie的名字都是类似于SEEESIONID。r

由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764比

另一种是作为查询字符串附加在URL后面,表现形式为http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764参

为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。

85.Cookie的原理及使用?

Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。到

86.Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:

a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。u

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头部传输的。

87.PHP5中魔术方法函数有哪几个,请举例说明各自的用法

88、isset()和empty()的区别

两者都是测试变量用的。但是isset()是 测试变量是否被赋值 ,而empty()是测试 一个已经被赋值的变量是否为空

。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用d

unset($foo)或者$foo=NULL。

89.以下哪一句不会把 John 新增到 users 阵列?

$users[] = ‘john’;

成功把 John 新增到阵列 users。

array_add($users,’john’);

函式 array_add() 无定义。

array_push($users,‘john’);

成功把 John 新增到阵列 users。

$users ||= ‘john’;

语法错误。

90.以下哪一个函式可以把浏览器转向到另一个页面?

redir()这不是一个 PHP 函式,会引致执行错误。

header ()这个是正确答案,header() 用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:

header(“Location: ”);

location()这不是一个 PHP 函式,会引致执行错误。

redirect()这不是一个 PHP 函式,会引致执行错误。

91.PHP中的非静态方法可以通过静态调用吗,反之呢?

其实问题是问没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用。答案是会产生一个strict错误,但在会继续执行代码。

反之,能否通过“对象名->方法名“的形式来调用static定义的方法?答案是不能,会出错并中断程序执行。

92.使用utf-8编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数?

$str = “您好hello”;

答案:echo strlen($str);

11 strlen() 函数返回字符串的长度。

93..什么是时间戳?时间戳能代表的最小年份和最大年份是多少?

答案:(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合

32 位有符号整数的最小值和最大值)。

不过在 PHP 5.1 之前此范围在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。

94、 MyISAM InnoDB 存储引擎有何差别?

答案:A、两者在文件构成上有区别;

B、InnoDB支持事务处理,MyISAM不支持;

C、对无WHERE子句的COUNT(*)操作的不同:MyISAM中保存了该值,直接读取,InnoDB需要作全表扫描;

D、锁的区别:InnoDB支持表级锁和行级锁,MyISAM只支持表级锁;

E、 索引 会缓存数据,而MYISAM不会;

F、INNODB不区分char和varchar;

G、INNODB支持hash索引,而MYISAM不支持;

H、InnoDB不支持FULLTEXT类型的索引;

I、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from

table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含

where条件时,两种表的操作是一样的;

J、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;

K、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;

L、LOAD TABLE FROM

MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

95..如何记录php程序错误至系统日志?

答案:将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。

当然也可以记录错误日志到指定的文件中。

代码如下:

# vim /etc/php.inidisplay_errors = Off

log_errors = On

error_log = /var/log/php-error.log

另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

display_errors = Off //不显示错误

error_reporting 设定错误讯息回报的等级

96.用最少的代码写一个求3值最大值的函数.

答案: function($a,$b,$c){

return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );

}

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

答:heredoc的语法是用”<<<”加上自己定义成对的标签,在标签范围內的文字视为一个字符串

例子:

$str = <<<SHOW

my name is Jiang Qihui!

SHOW;

98.字符串函数

99.数组函数

100、单例模式,创建mysqli数据库链接的单例对象

对编程感兴趣,想了解更多的编程知识,关注头条号一起玩转编程

更多PHP干货持续更新中~

文章来源:智云一二三科技

文章标题:珍藏BAT php编程面试100题汇总(五)

文章地址:https://www.zhihuclub.com/77858.shtml

关于作者: 智云科技

热门文章

网站地图