page contents

2020年 PHP面试题(附带答案)

2020年 PHP面试题(附带答案) 数据库索引有几类,分别是什么?什么时候该用索引? 普通索引、主键索引、唯一索引 并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查...

attachments-2021-06-vQawFTCK60cabe6e3f6c5.png


2020年 PHP面试题(附带答案)

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

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

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

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

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

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

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

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

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

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

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

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

__clone()克隆一个对象

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

$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILES的意思是什么?

它们都是PHP预定义变量

$_REQUEST用来获取post或get方式提交的值

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

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

$_COOKIE用来获取cookie存储的值

$_SESSION用来获取session存储的值

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

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

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

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

索引的目的是什么?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

include与require的区别?

1.include()在执行文件时每次都要进行读取和评估

require()文件只处理一次(实际上文件内容替换了require()语句)

2.require()通常放在PHP脚本程序的最前面

include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化

3,require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样

4,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.

5,require()包含文件失败,停止执行,给出错误(致命的)

include()常用于动态包含.

通常是自动加载的文件,即使加载出错,整个程序还是继续执行

一个页面声明,另一个页面调用

包函文件失败,继续向下执行,返回一条警告

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

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

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

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

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

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

指出以下代码片段中的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);

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

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

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

写出以下php代码的运行结果:

<?php
function foo($i) {
$i++;
echo $i ;
}
function bar(&$i) {
}
$i = 10 ;

echo $i++ , ++$i; 输出:10,12

foo($i); 输出:13

bar($i); 输出:无输出

如何快速下载一个远程http服务器上的图片文件到本地?

$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);

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

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

获取当前时间戳:time()

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

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

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

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

用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21

Echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));

javascript能否定义二维数组,如果不能你如何解决?

javascript不支持二维数组定义,可以用arr[0] = new array()来解决

假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。

<script>
function go2b(){
 window.location = “b.html”;
 window.close();
}
setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()
</script>
//正在浏览当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"].”<br />”;
//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
echo $_SERVER["QUERY_STRING"].”<br />”;
//当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"].”<br />”;

把 John 新增到 users 阵列?

$users[] = ‘john’; array_push($users,‘john’);

在PHP中error_reporting这个函数有什么作用?

error_reporting() 设置 PHP 的报错级别并返回当前级别。

如何修改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() and session_set_cookie_params($lifeTime);

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

方法1(对于PHP5及更高版本):

$readcontents = fopen(“http://www.phpres.com/index.html”, “rb”);
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;

方法2:

echo file_get_contents(“http://www.phpres.com/index.html”);

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

答案1:

function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(“.”,$file);
return $ext[1];
}

答案2:

function getExt($url) {
$url = basename($url);
$pos1 = strpos($url,”.”);
$pos2 = strpos($url,”?”);
if(strstr($url,”?”)){
Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);
} else {
return substr($url,$pos1);
}
}

使用五种以上方式获取一个文件的扩展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,

必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数 get_ext1($file_name), get_ext2($file_name)

function get_ext1($file_name){
return strrchr($file_name, ‘.’);
}
function get_ext2($file_name){
return substr($file_name,strrpos($file_name, ‘.’));
}
function get_ext3($file_name){
return array_pop(explode(‘.’, $file_name));
}
function get_ext4($file_name){
$p = pathinfo($file_name);
return $p['extension'];
}
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));
}
18、<?php
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
$str5 = 0;
$str6 = ’0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
?>

相等 相等 不相等

MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?

Varchar是变长,节省存储空间,char是固定长度。查找效率要varchar型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些

请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)

(1)var img = new Image();

(2)var img = document.createElement(“image”)

(3)img.innerHTML = “<img src=”xxx.jpg” />”

请描述出两点以上XHTML和HTML最显著的区别

(1)XHTML必须强制指定文档类型DocType,HTML不需要

(2)XHTML所有标签必须闭合,HTML比较随意

写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)

MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎

求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

方法一:

<?php
class Dtime{
 function get_days($date1, $date2){
  $time1 = strtotime($date1);
  $time2 = strtotime($date2);
  return ($time2-$time1)/86400;
 }
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2007-2-5′, ’2007-3-6′);
?>

方法二:

<?php
$temp = explode(‘-’, ’2007-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2007-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;

方法三:

echo abs(strtotime(“2007-2-1″)-strtotime(“2007-3-1″))/60/60/24 计算时间差

请写一个函数,实现以下功能:

字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。

方法一:

function str_explode($str){
$str_arr=explode(“_”,$str);$str_implode=implode(” “,$str_arr); $str_implode=implode
(“”,explode(” “,ucwords($str_implode)));
return $str_implode;
}
$strexplode=str_explode(“make_by_id”);print_r($strexplode);

方法二:

$str=”make_by_id!”;
$expStr=explode(“_”,$str);
for($i=0;$i<count($expStr);$i++){
echo ucwords($expStr[$i]);
}

方法三:

echo str_replace(‘ ‘,”,ucwords(str_replace(‘_’,’ ‘,’open_door’)));

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-4IYIkrHf62ac3f5a32bb1.jpeg

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章