面试

101.echo(),print(),print_r()的区别?

答:

Echo() PHP语法,可以输出多个值,不能输出数组。

Print() PHP函数,可以输出单个简单类型的变量值。

Print_r() php函数,可以打印出复杂类型变量的值,如数组,对象。

 

102.什么是模板技术、能够使HTMLPHP分离开使用的模板?

答:

模板技术就是使程序的逻辑代码和界面分开的技术。

能够使HTMLPHP分开的模板有:SmartyTemplatePHPlib TemplateFastTemplate

 

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

答:

优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

1、确定当前服务器设备是否满足流量需求。

2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。

3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。

4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。

5、使用不同的主机分流主要流量,使服务器均衡负载。

6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

104.mysql_fetch_row() mysql_fetch_array之间有什么区别?

答:

Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。

 

 

105.实现中文字串截取无乱码的方法

答:

Mb_substr();

 

106.用PHP写出显示客户端IP与服务器IP的代码

答:

获取客户端IPget_env(“REMOTE_ADDR”);

获取服务器端IP$_SERVER["SERVER_ADDR"];

 

107.有一个网页地址比如PHP开发资源网主页http://www.phpres.com/index.html,如何得到它的内容?

答:

获取网页内容:

$url=”http://www.phpres.com/index.html“;

$str=file_get_contents($url);

 

108.请写一个函数验证电子邮件的格式是否正确

答:

function checkemail($email)

{

echo preg_match(‘/^[\w]+@[\w]+[\.]([\w]+)$/’,$email)?’email格式正确‘:’email格式不正确‘;

}

 

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

答:

$_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];取得当前页面的完整路径和参数。

取得参数:$_SERVER['QUERY_STRING'];

 

110.JS表单弹出对话框函数是?获得输入焦点函数是

答:

Alert();

Onfocus();

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

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

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

计算出 $b 相对于 $a 的相对路径应该是 http://www.cnblogs.com/c/d()添上

$a=”http://www.cnblogs.com/a/b/c/d/e.php”;

$b=”http://www.cnblogs.com/a/b/12/34/c.php”;

答:

$ainfo=parse_url($a);

$binfo=parse_url($b);

$apath=ltrim($ainfo['path'],’/');

$bpath=ltrim($binfo['path'],’/');

$arr=explode(‘/’,$apath);

$brr=explode(‘/’,$bpath);

 

$count=count($arr);

for($i=0;$i<$count;$i++)

{

if($arr[$i]==$brr[$i])

{

$brr[$i]=’..’;

}

else

{

break;

}

}

$cha=implode(‘/’,$brr);

print_r($cha);

 

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

答:

function show($dirs){

$dir=opendir($dirs);

While($f=readdir($dir))

{

If($f!=’.' && $f!=’..’)

{

$file=$dirs.’/’.$f;

If(is_file($file))

{

Echo ’文件名:‘.$file.’<br/>’;

}

Else

{

Show($file);

}

}

}

}

 

113.Cookiesession的区别,禁止了cookiesession能正常使用吗?session的缺点是什么?session在服务器端是存在哪里的?是共有的还是私有的?

答:

COOKIE保存在客户端,用户通过手段可以进行修改,不安全,单个cookie允许的最大值是3k

SESSION保存在服务器端,相对比较安全,大小没有限制。

禁用了cookie之后session不能正常使用。

Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。

Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。

Session文件是公有的。

 

114.数据库索引有几类,分别是什么?什么时候该用索引?

答:

普通索引、主键索引、唯一索引

并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。

 

115.写几个魔术方法并说明作用?

答:

__call()当调用不存在的方法时会自动调用的方法

__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件

__set()当给未定义的变量赋值时会自动调用的方法

__get()当获取未定义变量的值时会自动调用的方法

__construct()构造方法,实例化类时自动调用的方法

__destroy()销毁对象时自动调用的方法

__unset()当对一个未定义变量调用unset()时自动调用的方法

__isset()当对一个未定义变量调用isset()方法时自动调用的方法

__clone()克隆一个对象

__tostring()当输出一个对象时自动调用的方法

 

 

 

 

 

116.$_REQUEST$_POST$_GET$_COOKIE$_SESSION$_FILE的意思是什么

;

它们都是PHP预定义变量。

$_REQUEST用来获取postget方式提交的值。

$_POST用来获取post方式提交的值。

$_GET用来获取get方式提交的值。

$_COOKIE用来获取cookie存储的值,

$_SESSION用来获取session存储的值,

$_FILE用来获取上传文件表单的值

 

117.数组中下标最好是什么类型的,为什么?

答:

数组的下标最好是数字类型的,数字类型的处理速度快。

 

118.++ii++哪一个效率高,为什么?

答:

++i效率比i++的效率更高,因为++i少了一个返回i的过程。

 

119.magic_quotes_gpc()magic_quotes_runtime()的意思是什么?

答:

Magic_quotes_gpc()php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在之前加\

Magic_quotes_runtime()php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。

 

120.Echo()print()print_r()的区别?

答:

Echo php语法,可以输出多个变量,不能输出数组。

Print()php中的函数,只能输出简单的变量。

Print_r()php中的函数,可以输出变量也可以输出数组。

 

121.框架中什么是单一入口和多入口,单一入口的优缺点?

答:

1多入口就是通过访问不同的文件来完成用户请求。

单一入口只web程序所有的请求都指向一个脚本文件的。

 

2单一入口更容易控制权限,方便对http请求可以进行安全性检查。

缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。

 

122.提示类型200404502是什么意思。

答:

200是请求成功,404是文件未找到,502是服务器内部错误。

 

123.编写一个自定义函数提取这段路径的的后缀名。

答:

“Www/hello/test.php.html?a=3&b=4”

Function geturltype($url){

$info=parse_url($url);

Return end(explode(‘.’,$info['path']));

}

124.你对Memcach的理解,优点有哪些?

答:

Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。

Memcache的优点:稳定、配置简单、多机分布式存储、速度快。

 

 

 

 

 

125.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

a) 索引的目的是什么?

b) 索引对数据库系统的负面影响是什么?

c) 为数据表建立索引的原则有哪些?

d) 什么情况下不宜建立索引?

答:

索引的目的:

1、快速访问数据表中的特定信息,提高检索速度

2、创建唯一性索引,保证数据库表中每一行数据的唯一性

3、加速表和表之间的连接

4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

建立索引的原则:

1、在最频繁使用的、用以缩小查询范围的字段上建立索引

2、在平频繁使用的、需要排序的字段上建立索引

什么情况下不宜建立索引:

1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引

2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

 

126.web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景 ?

答:

使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。

如果网站的访问量很大,可以把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。

 

127.include与require的区别?

答:

Php在遇到include时就重新解释一次,如果一个页面中出现10次include,php就重新解释10次,而php遇到require时只解释一次,即使页面中出现多次require,php也直解释一次。

使用require包含文件时,被包含的文件当成了当前文件的一个组成部分,如果被包含的文件中有语法错误或者文件不存在,程序就提示错误信息,并结束执行。

使用include包含文件时,相当于指定了文件的路径,被包含的文件中有语法错误或者文件不存在时,页面只是给出警告信息,不响应程序本身的执行。

 

128.PHP字符串中单引号与双引号的区别?

答:

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

 

 

 

129.php5中魔术方法有哪几个? 并说明其用法?

答:

__construct实例化对象时自动调用的方法。

__destruct销毁对象时自动调用的方法。

__set当对一个不存在的变量设置值的时候自动调用的方法。

__get当调用一个不存在的变量的时候自动调用的方法。

__autoload 当实例化类一个不存在的类的时候会自动调用的方法。

__isset 当对一个不存在的变量使用isset方法时自动调用的方法

__unset 当对一个不存在的变量使用unset方法时自动调用的方法。

__call 当调用一个不存在的方法时自动调用的方法。

__clone 克隆一个对象。

__tostring 当输出一个对象时自动调用的方法。

 

130.php中,模板引擎的目的是什么? 你用过哪些模板引擎?

答:

使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。

使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate

131.使用版本控制工具的目的是什么? 你用过哪些版本控制工具?

答:

使用版本控制器的目的是:

实现开发团队并行开发,提高开发效率,对于软件开发进程中文件或目录的发展过程提供有效的追踪手段,保证在需要时可以回到旧版本,避免文件的丢失、修改的丢失和覆盖,通过对版本库的访问控制避免未经授权的访问和修改,达到有效保护企业软件资产和知识产权的目的。

使用过的版本控制工具:SVN

 

132.指出以下代码片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)
答:

mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’”, $link);

注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]和$_GET[keyword]

解决注入漏洞:

$_GET[catid]=intval($_GET[catid]);

$sql=”select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%”;

$sql=addslashes($sql);

Mysql_query($sql);

 

 

 

 

133.分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用.

答:

Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。

Magic_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双引号、反斜线这些字符加上反斜杠转义。

 

134.写出以下php代码的运行结果:
<?php
function foo($i) {
$i++;
echo $i ;
}

function bar(&$i) {

}
$i = 10 ;
echo $i++ , ++$i;    输出:10,12
foo($i); 输出:13
bar($i);     输出:无输出
135.如何快速下载一个远程http服务器上的图片文件到本地?

答:

$file=”";

$fp=fopen($file,’rb’);

$img=fread($fp,10000);

$dir=”./”;

$local=fopen($dir.’/’.basename($file),’w');

Fwrite($local,$img);

 

136.什么是时间戳? 如何取得当前时间戳?

答:

时间戳是从1970年1月1日 00:00:00到指定日期的秒数。

获取当前时间戳:time()

 

137.session与cookie的区别与关系, 禁用cookie后, session能否正常使用?

答:

SESSION存储在服务器端,COOKIE保存在客户端。

Session比较安全,cookie用某些手段可以修改,不安全。

Session依赖于cookie进行传递。

禁用cookie后,session不能正常使用。

 

 

 

138.HTTP/1.1协议中 200和404状态码是什么含义?

答:

200是请求成功,404是文件未找到

 

139.了解XSS攻击吗? 如何防止 ?

答:

XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。

使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

 

140.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、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。

 

141.一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?

答:

一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。

 

142.M ADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s  ?

答:

256KB/s

143.请写出一个正则表达式,用于匹配一个HTML文件中<img />标记中的图片地址

答:

$url=”<img src=’11.jpg’/>”;

/<img[\s]*src=['|\"](.*)['|\"][\s]*\/>/

 

145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39

答:

调用了未定义的方法ge_user(),检查程序中有没有定义此方法

 

 

 

146.Fatal error: Class ’client’ not found in /website/index.php on line 173

答:

类client没有找到,检查文件中有没有client类,或者有没有包含client类文件

 

147.Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php  on line 3
答:

提示文件前面有输出,检查是否有输出,或者编码

 

148.Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b,   O_RDWR) failed: No such file or directory (2) in /website/index.php on line  10
答:

没有找到文件或目录,检查文件是否存在

 

149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18
答:

18行语法错误,检查语法

 

150.Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2
答:

没有找到welcome.txt文件,检查文件是否存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值