面试题总结(41-60)

41.页面字符出现乱码,怎么解决? (重点)javascript

 1.首先考虑当前文件是否是设置了字符集。查看是否是meta标签中写了charset,若是是php页面还能够看看是否是php

 在header()函数中指定了charset;css

 例如:html

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />java

 header(“content-type:text/html;charset=utf-8”);mysql

 

 2.若是设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致,jquery

 二者必须保持统一;web

 

 3.若是涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,二者必须统一,ajax

 例如:mysql_query(“set names utf8”)。正则表达式

 

42. 正则表达式是什么?php中有哪些经常使用的跟正则相关的函数?请写出一个email的正则,中国手机号码和座机号码的正则表达式? (重点)

 正则表达式是用于描述字符排列模式的一种语法规则。正则表达式也叫作模式表达式。

 网站开发中正则表达式最经常使用于表单提交信息前的客户端验证。

 好比验证用户名是否输入正确,密码输入是否符合要求,email、手机号码等信息的输入是否合法。

 在php中正则表达式主要用于字符串的分割、匹配、查找和替换操做。

 

 preg系列函数能够处理。具体有如下几个:

 string preg_quote ( string str [, string delimiter] )

  转义正则表达式字符 正则表达式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。

 preg_replace -- 执行正则表达式的搜索和替换

 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

 preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换

 mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )

 preg_split -- 用正则表达式分割字符串

 array preg_split ( string pattern, string subject [, int limit [, int flags]] )

 

 

43. 若是想过滤掉某个字符串中全部的html标记使用哪一个函数?

strip_tags(string) 这样就能够过滤掉全部的html标签了。

 

44. preg_replace()和 str_ireplace()两个函数在使用上有什么不一样?

preg_split()和split()函数如何使用?

1,在字符串替换的函数里,str_replace()的使用率是最高的,它的用法也比较简单,而preg_replace()的使用率相对来讲比较低,由于它须要你懂得写正则表达式,而正则表达式有时候并不容易写。

str_replace()与preg_replace()的用法场合是不一样的,str_replace被替换(查找)的内容是固定的、肯定的,固然可使用变量,可是变量也表示固定的、肯定的内容,好比能够完成把全部的\n替换为<br>等场合。而preg_replace被替换(查找)的内容是用规则来描述的,好比能够把全部的<和>之间的内容(HTML代码)替换掉。固然preg_replace也能够用来替换固定内容。

str_replace速度要比preg_replace快

二者比较,执行效率方面谁更好呢?这就涉及到速度问题了。有人测试发现,str_replace速度要比preg_replace快一些,但好像没有某些人说的快4倍那么多。10w次的两个词替换结果代表:str_replacece 耗时0.38 sec,preg_replace 耗时0.97sec。

str_replace()与str_ireplace()的区别

str_replace()与str_ireplace()的用法是相同的,它们的区别仅仅是str_replace()对大小写敏感,而str_ireplace()不区分大小写。

str_replace()与strtr() 谁的速度更快?

str_replace()与strtr()这二者的执行效率问题,许多人说法不一,有人说strtr()比str_replace()速度快,但有人通过实例证实了str_replace()比strtr()速度快一些。

 

2,preg_split() 函数使用了 Perl 兼容正则表达式语法,一般是比 split() 更快的替代方案。若是不须要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费

 

45. 获取当前时间戳的函数主要有哪些?用PHP打印出今天的时间,格式是2017-12-10 22:21:21?

 用PHP打印出前一天的时间格式是2017-12-10 22:21:21?如何把2017-12-25 10:30:25变成unix时间戳?

 echo date ("Y-m-d H:i:s" ,strtotime(‘-1,days’));  

 date('Y-m-d H:i:s',time());

 

 $unix_time = strtotime("2017-9-2 10:30:25");//变成unix时间戳

 echo date("Y-m-d H:i:s",$unix_time);//格式化为正常时间格式

 

46. 在url中用get传值的时候,若中文出现乱码,应该用哪一个函数对中文进行编码?

 用户在网站表单提交数据的时候,为了防止脚本攻击(好比用户输入<script>alert(111);</script>),php端接收数据的时候,应该如何处理?

 使用urlencode()对中文进行编码,使用urldecode()来解码。 

 使用htmlspecialchars($_POST[‘title’])来过滤表单传参就能够避免脚本攻击。

 

47. 链接数据库操做的步骤是什么?每一步的返回值是什么数据类型?尤为是mysql_query()返回什么数据类型?

 

Step1:连接数据库 mysqli_connect()

     参数:   ①主机地址

              ②mysql用户名

              ③mysql密码 

              ④选择链接的数据库

              ⑤端口号

  返回:若是链接成功,返回资源类型的标志符号;若是链接失败,返回false。

   若是咱们与mysql创建的链接不仅一条,那么之后操做数据库的各类函数都必须传入返回的链接符号;

   若是咱们与mysql创建的链接只有一条,那么之后操做数据库的各类函数就没必要传入这个标识符号。建议都传入。

 密码为空能够省略密码 $conn = mysqli_connect("localhost", "root");

 $conn = mysqli_connect("localhost", "root", "", "mydb");

 var_dump($conn);

 

 Step2:检测数据库链接是否成功? 

   mysqli_connect_errno()与 mysqli_connect_error() 

   mysqli_connect_errno(); 返回上次链接数据库错误的错误号,链接成功返回0

   mysqli_connect_error(); 返回上次链接数据库的错误信息

 if(mysqli_connect_errno($conn)){

 die("数据库链接失败!失败信息:".mysqli_connect_error($conn));

 } 

   前面两步合并的写法(Step1+Step2):链接数据库同时判断 

 $conn = mysqli_connect("localhost", "root", "", "mydb") or die("数据库链接失败!失败信息:".mysqli_connect_error($conn));

 

 Step3:选择数据库 mysqli_select_db($link,$dbname) 

   参数:①标识符 ②链接数据库名称

   链接成功,返回true;链接失败,返回false

   若是修改数据库成功,则资源标识符中的数据库就会发生变更;

   若是修改失败而没有经过代码终止操做,则后续代码可使用原数据库继续执行

   mysqli_select_db($conn, "mydb") or die("数据库选择失败!");

   

 Step4:设置字符集编码格式

    mysqli_set_charset($link,$charset) 只能设置为utf8而不能是utf-8

    mysqli_set_charset($conn,"utf8") or die("数据库编码集设置失败!");

 

 Step5:编写sql语句 

   $sql = "select * from tb1";

   

 Step6:执行sql语句 mysqli_query($link,$sql)

   若是是(DML)增、删、改,将返回布尔类型是否成功

   返回上一次操做时受影响的行数 mysqli_affected_rows($link)

   若是是(DQL)查询,将返回资源结果集

   返回资源结果集中的行数 mysql_num_rows($result) 

   返回资源结果集中的字段数 mysql_num_fields($result) 

   若是查询失败,返回false

   $res = mysqli_query($conn,$sql);

   mysqli_insert_id($conn); 执行插入语句是返回上次插入最新插入的主键ID

   

 Step7:解析结果集 

var_dump(mysqli_fetch_array($res)); 处理结果集,返回关联数组和索引数组 不经常使用

  参数① 须要处理的结果集

  参数② 返回哪一种数组格式 

 MYSQL_ASSOC - 关联数组

 MYSQL_NUM - 数字数组

 MYSQL_BOTH - 默认。同时产生关联和数字数组

 echo "<table border='1' style='border-collapse:collapse;text-align:center;width:200px;'>";

 echo "<thead bgcolor='lightblue' style='color:#ffffff;'><td>ID</td><td>姓名</td><td>年龄</td><td>性别</td></thead>";

 while($row =mysqli_fetch_assoc($res)){               // 返回关联数组 指针遍历 经常使用

 echo "<tr>";

 foreach($row as $value){

 echo "<td>{$value}</td>";

 };

 echo "</tr>";

 }

 echo "</table>";

mysqli_data_seek($res,0); 设置结果集指针位置,此式表达复位至0

   var_dump(mysqli_fetch_object($res));

   var_dump(mysqli_fetch_row($res)); 返回索引数组

   var_dump(mysqli_fetch_object($res)); 返回对象

   var_dump(mysqli_fetch_fields($res)); 返回结果集中每一列的字段信息

   

Step8:关闭资源与结果集 mysqli_free_result()和mysqli_close()

    mysqli_free_result($res); //释放查询资源结果集

    mysqli_close($conn); //关闭数据库链接

 

48. 说说mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之间有什么区别?

 第一个是返回结果集中的一行做为索引数组,第二个是返回关联数组,而第三个既能够返回索引数组也能够返回关联数组,取决于它的第二个参数 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默认为MYSQL_BOTH

 $sql =”select * from table1”;

 $result = mysql_query($sql);

 mysql_fetch_array($result, MYSQL_NUM);

 

49. 请说出目前学过的返回是资源的函数?

 答: mysql_connect();

  mysql_query();只有这执行select的时候成功,才返回资源,失败返回FALSE

  fopen();

 

50. 打开、关闭文件分别是什么函数? 文件读写是什么函数?删除文件是哪一个函数? 判断一个文件是否存在是哪一个函数?新建目录是哪一个函数?

操做文件的经常使用方法:

flie_put_contents(url,str);

file_get_contents(url);

 
<?php
$str  = time();
$path  = './time.txt';
echo  '<hr>';
file_put_contents ( $path , $str );
echo  file_get_contents($path);
echo  '<hr>';
file_put_contents ( $path , "\r" . $str ,FILE_APPEND);
echo  file_get_contents($path);

运行效果图以下:

当文件过大时,不能使用以上的方法一次性操做以上内容,使用下面的函数解决

fopen() 打开文件句柄(php与文件间的数据流通道)

参数1:文件地址

参数2:打开方式,打开文件后但愿完成哪一种操做,能够在模式位置进行限制

文件模式:

r(read) 读模式 
w (write) 替换写模式,将文件内容清零,不存在则建立 
a(append) 
x 替换写模式,将文件内容清零,不存在不建立 
+扩展 
r+ 读写模式 ,将文件指针放在文件头 
w+ 读写模式 ,将文件清零,将文件指针放在文件头 
x+ 读写模式 ,将文件清零,将文件指针放在文件头,不自动建立文件 
a+ 读追加写模式 ,写操做永远在末尾,读操做受限于文件指针

在均可以读写操做时,不一样的是文件的初始化

连续读取:

fread(文件句柄[,长度]); 读取指定长度(字节)的内容

fgets(文件句柄[,长度]); 读取指定长度(字节)的内容

长度:指的是会读取长度-1个字节

行末是函数的终止操做

fgetc(文件句柄) 一次读取一个字节

fwrite(文件句柄,内容);

fclose(文件句柄);

ftell();寻找指针位置
fseek();定位指针位置

 
<?php
$stmt  = fopen('./rw.txt','r+');
echo  ftell($stmt);
fwrite( $stmt , '01234' . "\n" . '56789' );
echo  ' r '.ftell($stmt);
echo  '<br>';
fseek ( $stmt ,1);
fwrite( $stmt , 'ab' );
fseek ( $stmt ,1);
echo  fgets($stmt,8);
echo  '<br>';
echo  fgets($stmt,8);
fclose( $stmt );

rw.txt

r+ 读写受指针影响,写替换原有指针内容 
w+ 清空内容 
a | a+ 指针具备不肯定因素,读受指针影响,写是追加

filemtime(url) 文件最后修改时间

filesize() 文件大小

51. 文件上传须要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?

 1.首现要在php.ini中开启文件上传;

 2.在php.ini中有一个容许上传的最大值,默认是2MB。必要的时候能够更改;

 3.上传表单必定要记住在form标签中写上enctype="multipart/form-data";

 4. 提交方式 method 必须是 post;

 5. 设定 type="file" 的表单控件;

 6.要注意上传文件的大小MAX_FILE_SIZE、文件类型是否符合要求,上传后存放的路径是否存在。

 能够经过上传的文件名获取到文件后缀,而后使用时间戳+文件后缀的方式为文件从新命名,这样就避免了重名。

 能够本身设置上传文件的保存目录,与文件名拼凑造成一个文件路径,使用move_uploaded_file(),就能够完成

 将文件保存到指定目录。

 

52. $_FILES是几维数组?第一维和第二维的索引下标分别是什么?批量上传文件的时候须要注意什么?

 二维数组。第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.

 

53. header()函数主要的功能有哪些?使用过程当中注意什么?

在php中header()函数是很大的做用能够发送各类状态代码,也能够实现一些输出下载,下面咱们一块儿来看看一些相关实例吧。

什么是头信息?
这里只做简单解释,详细的本身看http协议。
在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,一样,体内容也不是<BODY>< /BODY>。头信息是用户看不见的,里面包含了不少项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。

头信息有什么用呢?
头信息的做用不少,最主要的有下面几个:

一、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点相似用 js 写跳转。可是这个跳转只有浏览器知道,无论体内容里有没有东西,用户都看不到。

二、指定网页的内容: 一样一个XML文件,若是头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。可是,若是头信息中是:Content-type: text/xml 的话,浏览器就会将其看做存文本解析。(浏览器不是按照扩展名解析文件的)

三、附件:不知道你们有没 有注意,有些时候在一些网站下载东西,点下载链接之后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器 根据Content-type 来判断是打开仍是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个能够来指定该内容为附件、须要保存,这 个就是:Content-Disposition: attachment; filename=”xxxxx”

 

54. 文件下载的时候若是使用header()函数?

 答:header("content-type: application/octet-stream;charset=UTF-8"); //在这里加utf-8和在上面定义有什么区别?、??

            header("accept-ranges: bytes");

            header("accept-length: ".filesize($filedir.$filename));

            header("content-disposition: attachment; filename=".$filedir.$filename);

 

55. 什么是ajax?ajax的原理是什么?ajax的核心技术是什么?ajax的优缺点是什么?

 ajax是asynchronous javascript and xml的缩写,是javascript、xml、css、DOM等多个技术的组合。 '$'是jQuery的别名.

  页面中用户的请求经过ajax引擎异步地与服务器进行通讯,服务器将请求的结果返回给这个ajax引擎,

  最后由这个ajax引擎来决定将返回的数据显示到页面中的指定位置。Ajax最终实现了在一个页面的指定位置能够加载另外一个页面全部的输出内容。

 这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。因此ajax技术实现了一个静态网页在不刷新整个页面的状况下与服务器通讯,

 减小了用户等待时间,同时也从而下降了网络流量,加强了客户体验的友好程度。

 

 Ajax的优势是:

 1.  减轻了服务器端负担,将一部分之前由服务器负担的工做转移到客户端执行,利用客户端闲置的资源进行处理;

 2.  在只局部刷新的状况下更新页面,增长了页面反应速度,使用户体验更友好。

 Ajax的缺点是不利于seo推广优化,由于搜索引擎没法直接访问到ajax请求的内容。

 ajax的核心技术是XMLHttpRequest,它是javascript中的一个对象。

 

 

 

56. jquery是什么?jquery简化ajax后的方法有哪些?

 jQuery是Javascript的一种框架。

 $.get(),$.post(),$.ajax()。$是jQuery对象的别名。

 代码以下:

 $.post(异步访问的url地址 , {'参数名' : 参数值} , function(msg){

  $("#result").html(msg);

 });

 

 $.get(异步访问的url地址 , {'参数名' : 参数值} , function(msg){

  $("#result").html(msg);

 });

 $.ajax({

  type: "post",

  url: loadUrl,

  cache:false,

  data: "参数名=" + 参数值,

  success: function(msg) {

   $("#result").html(msg);

  }

 });

 

57. 什么是会话控制?

 简单地说会话控制就是跟踪和识别用户信息的机制。会话控制的思想就是可以在网站中跟踪一个变量,经过这个变量,

 系统能识别出相应的用户信息,根据这个用户信息能够得知用户权限,从而展现给用户适合于其相应权限的页面内容。

 目前最主要的会话跟踪方式有cookie,session。

 

58. 会话跟踪的基本步骤

 1).访问与当前请求相关的会话对象

 2).查找与会话相关的信息

 3).存储会话信息

 4).废弃会话数据

 

59. 使用cookie的注意事项有哪些?

 1) setcookie()以前不能够有任何页面输出,就是空格,空白行也不能够;

 2) setcookie()后,在当前页面调用$_COOKIE['cookiename']不会有输出,必须刷新或到下一个页面才能够看到cookie值;

 3) 不一样的浏览器对cookie处理不一样,客户端能够禁用cookie,浏览器也能够闲置cookie的数量,一个浏览器能建立的cookie数量最多300个,而且每一个不能够超过4kb,

 每一个web站点能设置的cookie总数不能超过20个。

 4) cookie是保存在客户端的,用户禁用了cookie,那么setcookie就不会起做用了。因此不能够过分依赖cookie。

 

60. 使用session的时候,经过什么来表示当前用户,从而与其余用户进行区分?

 sessionid,经过session_id()函数能够取得当前的session_id。

相关文章
相关标签/搜索