加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

分享30个基础的php面试题及答案(对新手非常有用)

发布时间:2020-12-31 15:30:00 所属栏目:运营 来源:网络整理
导读:你是否正在筹备探求一份PHP开拓的事变,而且也在探求一些关于PHP的口试题及谜底?本文为各人分享了一些被提问频率较高PHP口试题,以及对应的通例答复,每个公司都有本身的口试尺度,口试和题目是完全取决于你在事变中所饰演的脚色,虽然也和你的编程手艺息息

你是否正在筹备探求一份PHP开拓的事变,而且也在探求一些关于PHP的口试题及谜底?本文为各人分享了一些被提问频率较高PHP口试题,以及对应的通例答复,每个公司都有本身的口试尺度,口试和题目是完全取决于你在事变中所饰演的脚色,虽然也和你的编程手艺痛痒相干。

题1:计一律个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口封锁,而输入的信息却在主网页中表现!

谜底:尼玛。都没大白出这标题是干嘛的,新浪工程师脑筋进水了吗?考查js的window工具?亲们汇报我?

index.html

by http://www.manongjc.com

fullwin.html

by www.manongjc.com

题2:nginx行使哪种收集协议?

谜底:nginx是应用层 我认为从下往上的话 传输层用的是tcp/ip 应用层用的是httpfastcgi认真调治历程

题3:表单中 get与post提交要领的区别?

谜底:get是发送哀求HTTP协议通过url参数转达举办吸取,而post是实体数据,可以通过表单提交大量信息。

题4:简述论坛中无穷分类的实现道理

谜底:无穷极分类,那么应该是考查递归函数吧!

第一步:成立测试数据库:

CREATE TABLE `category` (

`id` smallint(5) unsigned NOT NULL auto_increment,

`fid` smallint(5) unsigned NOT NULL default '0',

`value` varchar(50) NOT NULL default '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第二步:插入测试数据:

INSERT INTO `category` ( `fid`,`value`) VALUES

(0,'编程之家教程http://www.manongjc.com'),

(1,'a'),'b'),

(2,'c'),'d'),

(4,'e')

第三步:递归输出分类:

/** by http://www.manongjc.com/article/1524.html */

$conn = mysql_connect("localhost","root","mckee");

mysql_select_db("test",$conn);

mysql_query("set names utf8");

$sql = "SELECT * FROM category";

$res = mysql_query($sql);

while($row = mysql_fetch_assoc($res)){

$arr[] = array($row[id],$row[fid],$row[value]);

}

getCate(0);

function getCate($fid = 0) {

global $arr;

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

if ($arr[$i][1] == $fid) {

echo $arr[$i][2] . "
";

getCate($arr[$i][0]); //递归

}

}

}

?>

题5:请用正则表达式(Regular Expression)写一个函数验证电子邮件的名目是否正确

谜底:

/* http://www.manongjc.com/article/1524.html */

$email=$_POST['email'];

if(!preg_match(‘/^[w.]+@([w.]+).[a-z]{2,6}$/i’,$email)) {

echo "电子邮件检测失败";

}else{

echo "电子邮件检测乐成";

}

?>

题6:session与cookie的区别?

谜底:

session:储存用户会见的全局独一变量,存储在处事器上的php指定的目次中的(session_dir)的位置举办的存放.

cookie:用来存储持续訪問一个頁面时所行使,是存储在客户端,对付Cookie来说是存储在用户WIN的Temp目次中的。

两者都可通过时代来配置时刻黑白.

题7:请用最简朴的说话汇报我PHP是什么?

谜底:PHP全称:Hypertext Preprocessor,是一种用来开动员态网站的处事器剧本说话。

题8: 没有输出功效,也许是什么缘故起因,简述的办理此题目的进程(提醒: 语法没有题目)

谜底:也许处事器上面没有开启短标签short_open_tag =配置为Off,,php.ini开启短标签节制参数: short_open_tag = On

题9:数据库中的事宜是什么?

谜底:事宜(transaction)是作为一个单位的一组有序的数据库操纵。假如组中的全部操纵都乐成,则以为事宜乐成,纵然只有一个操纵失败,事宜也不乐成。假如全部操纵完成,事宜则提交,其修改将浸染于全部其他数据库历程。假如一个操纵失败,则事宜将回滚,该事宜全部操纵的影响都将打消。

题9:写一个函数,可以或许遍历一个文件夹下的全部文件和子文件夹。

谜底:这个我之前就写过(php opendir()函数讲授及遍历目次实例),只是实现的要领许多,服从不必然最高

/*

*@blog http://www.manongjc.com

*/

function listDir($dir = '.'){

if ($handle = opendir($dir)) {

while (false !== ($file = readdir($handle))) {

if($file == '.' || $file == '..'){

continue;

}

if(is_dir($sub_dir = realpath($dir.'/'.$file))){

echo 'FILE in PATH:'.$dir.':'.$file.'
';

listDir($sub_dir);

}else{

echo 'FILE:'.$file.'
';

}

}

closedir($handle);

}

}

listDir('e:wwwabc');

题10:用起码的代码写一个求3值最大值的函数.

谜底:

function($a,$b,$c){

/* www.manongjc.com/article/1524.html */

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

}

题11:简述下面措施的输出功效,扼要声名为什么,怎样办理这类题目?

$tmp = 0 == "a"? 1: 2;

echo $tmp;

?>

谜底: 1

int和string范例逼迫转换造成的,0==="a"

0 == 0 必定是true啊

PHP是弱范例

$tmp = 0 === "a"? 1: 2;

echo $tmp; 这样就是2

题12:什么是MVC?

谜底:MVC由Model(模子),View(视图)和Controller(节制器)构成,PHP MVC可以更高效地打点好3个差异层的PHP代码。

Model:数据信息存取层。

View:view层认真将应用的数据以特定的方法展此刻界面上。

Controller:凡是节制器认真从视图读取数据,节制用户输入,并向模子发送数据。

题13:优化MYSQL数据库的要领?

谜底:

1、选取最合用的字段属性,尽也许镌汰界说字段长度,只管把字段配置NOT NULL,譬喻'省份,性别',最好配置为ENUM


2、行使毗连(JOIN)来取代子查询:


a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)


b.提取全部没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)


c.进步b的速率优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid


WHERE orderinfo.customerid IS NULL


3、行使连系(UNION)来取代手动建设的姑且表


a.建设姑且表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`


4、事宜处理赏罚:


a.担保数据完备性,譬喻添加和修改同时,两者创立则都执行,一者失败都失败


mysql_query("BEGIN");


mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";


mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");


mysql_query("COMMIT");


5、锁定表,优化事宜处理赏罚:


a.我们用一个 SELECT 语句取出初始数据,通过一些计较,用 UPDATE 语句将新值更新到表中。


包括有 WRITE 要害字的 LOCK TABLE 语句可以担保在 UNLOCK TABLES 呼吁被执行之前,


不会有其余的会见来对 inventory 举办插入、更新可能删除的操纵


mysql_query("LOCK TABLE customerinfo READ,orderinfo WRITE");


mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);


mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);


mysql_query("UNLOCK TABLES");


6、行使外键,优化锁定表


a.把customerinfo里的customerid映射到orderinfo里的customerid,


任何一条没有正当的customerid的记录不会写到orderinfo里


CREATE TABLE customerinfo


(


customerid INT NOT NULL,


PRIMARY KEY(customerid)


)TYPE = INNODB;


CREATE TABLE orderinfo


(


orderid INT NOT NULL,


customerid INT NOT NULL,


PRIMARY KEY(customerid,orderid),


FOREIGN KEY (customerid) REFERENCES customerinfo


(customerid) ON DELETE CASCADE


)TYPE = INNODB;


留意:'ON DELETE CASCADE',该参数担保当customerinfo表中的一笔记录删除的话同时也会删除order


表中的该用户的全部记录,留意行使外键要界说事宜安详范例为INNODB;


7、成立索引:


a.名目:


(平凡索引)->


建设:CREATE INDEX <索引名> ON tablename (索引字段)


修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)


创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))


(独一索引)->


建设:CREATE UNIQUE <索引名> ON tablename (索引字段)


修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)


创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))


(主键)->


它是独一索引,一样平常在建设表是成立,名目为:


CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])


8、优化查询语句


a.最亏得沟通字段举办较量操纵,在成立好的索引字段上只管镌汰函数操纵


例子1:


SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)


SELECT * FROM order WHERE orderDate<"2008-01-01";(快)


例子2:


SELECT * FROM order WHERE addtime/7<24;(慢)


SELECT * FROM order WHERE addtime<24*7;(快)


例子3:


SELECT * FROM order WHERE title like "%good%";


SELECT * FROM order WHERE title>="good" and name<"good";

题14:写一个函数,算出两个文件的相对路径

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


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


计较出 $b 相对付 $a 的相对路径应该是 ../../c/d将()添上

谜底:

/** by www.manongjc.com */

$a = '/a/b/c/d/e.php';

$b = '/a/b/13/34/c.php';

echo getRelativePath($a,$b); //"../../12/34/"

function getRelativePath($a,$b){

$a2array = explode('/',$a);

$b2array = explode('/',$b);

$relativePath = '';

for( $i = 1; $i <= count($b2array)-2; $i++ ) {

$relativePath .= $a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/';

}

return $relativePath;

}

?>

题15:javascript可否界说二维数组,假如不能你怎样办理?

谜底:javascript不支持二维数组界说,可以用arr[0] = new array()来办理

题16:MYSQL取适合前时刻的函数是?,名目化日期的函数是

谜底:now(),dateformat()

题17:下列HTTP状态码呈现的也许缘故起因,如那里理赏罚

200,301,404,502,503

谜底:

200哀求已乐成,哀求所但愿的相应头或数据体将随此相应返回。

301被哀求的资源已永世移动到新位置,而且未来任何对此资源的引用都应该行使原形应返回的多少个 URI 之一。

404哀求失败,哀求所但愿获得的资源未被在处事器上发明。

502作为网关可能署理事变的处事器实行执行哀求时,从上游处事器吸取到无效的相应。

503因为姑且的处事器维护可能过载,处事器当前无法处理赏罚哀求。

200 OK 统统正常,对GET和POST哀求的应答文档跟在后头。

题18:在页面中引用CSS有几种方法?

谜底:

在页面中行使CSS有3中方法:

引用外部CSS文件

内部界说Style样式

内联样式

题19:在 HTML 说话中,页面头部的 meta 标志可以用来输出文件的编码名目,以下是一个尺度的 meta 语句

请行使 PHP 说话写一个函数,把一个尺度 HTML 页面中的相同 meta 标志中的 charset 部门值改为 big5

请留意:

必要处理赏罚完备的 html 页面,即不仅此 meta 语句

忽略巨细写

' 和 " 在此处是可以交流的

'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不可

留意处理赏罚多余空格

谜底:首要考查正则表达式

/** http://www.manongjc.com/article/1524.html */

$html = "";

//匹配尺度的meta标签

$pattern = "//i";

$replacement = "";

$result = preg_replace($pattern,$replacement,$html);

echo htmlspecialchars($result);

?>


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

谜底:

/** http://www.manongjc.com/article/1524.html */

function go2b(){

window.location = “b.html”;

window.close();

}

setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()

题21:简述两种屏障php措施的notice告诫的要领

谜底:

在措施中添加:error_reporting (E_ALL & ~E_NOTICE);

修改php.ini中的:error_reporting = E_ALL改为:error_reporting = E_ALL & ~E_NOTICE

error_reporting(0);可能修改php.inidisplay_errors=Off

题22:PHP支持多担任吗?为什么?

谜底:不支持。PHP类只能担任一个父类,并用要害字“extended”标识。

题23:include和require 别离返回什么错误级别

谜底:include会体系告诫并继承执行,require会发出体系告诫可是会引致致命错误令剧本终止运行

题24:用PHP写出表现客户端IP与处事器IP的代码

谜底:

打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 可能: getenv(‘REMOTE_ADDR’);


打印处事器IP:echo gethostbyname(“www.bolaiwu.com”)

题25:写一个函数,尽也许高效的,从一个尺度url里取出文件的扩展名

譬喻:http://www.manongjc.com/article/1524.html?id=1必要取出 html或 .html

谜底:

/** by www.manongjc.com */

$url = "http://www.manongjc.com/article/1524.html?id=1";

$path = parse_url($url);

echo pathinfo($path['path'],PATHINFO_EXTENSION); //php

?>

题26:PHP中获取图像尺寸巨细的要领是什么?

谜底:

getimagesize () 获取图片的尺寸

Imagesx () 获取图片的宽度

Imagesy () 获取图片的高度

题27:怎样修改SESSION的保留时刻

谜底:

要领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);

题28:写一个排序算法,可所以冒泡排序可能是快速排序,假设待排序工具是一个维数组

谜底:

冒泡排序(数组排序):

function bubble_sort($array)

{

$count = count($array);

if ($count <= 0) return false;

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

for($j=$count-1; $j>$i; $j–){

if ($array[$j] < $array[$j-1]){

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return $array;

}

快速排序(数组排序):

function quicksort($array) {

if (count($array) <= 1) return $array;

$key = $array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i

if ($array[$i] <= $key)

$left_arr[] = $array[$i];

else

$right_arr[] = $array[$i];

}

$left_arr = quicksort($left_arr);

$right_arr = quicksort($right_arr);

return array_merge($left_arr,array($key),$right_arr);

}

题29:PHP中的错误范例有哪些?

谜底:

PHP中碰着的错误范例大抵有3类。

提醒:这都是一些很是正常的信息,而非重大的错误,有些乃至不会展示给用户。好比会见不存在的变量。

告诫:这是有点严峻的错误,将会把告诫信息展示给用户,但不会影响代码的输出,好比包括一些不存在的文件。

错误:这是真正的严峻错误,好比会见不存在的PHP类。

题30:求两个日期的差数,譬喻2016-2-5 ~ 2016-3-6 的日期差数

谜底:

要领一:

/* http://www.manongjc.com/article/1524.html */

class Dtime

{

function get_days($date1,$date2){

$time1 = strtotime($date1);

$time2 = strtotime($date2);

return ($time2-$time1)/86400;

}

}

$Dtime = new Dtime;

echo $Dtime->get_days(’2016-2-5′,’2016-3-6′);

?>

要领二:

/* http://www.manongjc.com/article/1524.html */

$temp = explode(‘'-',’2016-2-5′);

$time1 = mktime(0,$temp[1],$temp[2],$temp[0]);

$temp = explode('-',’2016-3-6′);

$time2 = mktime(0,$temp[0]);

echo ($time2-$time1)/86400;

?>

要领三:

/* http://www.manongjc.com */

echo abs(strtotime("2016-2-1″)-strtotime("2016-3-1″))/60/60/24

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读