1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 一.PHP基础知识相关面试题

一.PHP基础知识相关面试题

时间:2024-01-28 10:24:52

相关推荐

一.PHP基础知识相关面试题

一.文件操作

1.下面哪个函数可以打开一个文件,以对文件进行读和写操作(1分)

A.fget() B.file_open() C.fopen() D.open_file()

C

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

方法一:

function get_ext($url){ $data = parse_url($url); return pathinfo($data['path'], PATHINFO_EXTENSION); }

3.有一个网页地址,比如PHP主页:/index.html,如何得到它的内容?

方法一: curl

<?php$url = “/index.html”;$ch = curl_init();$timeout = 5;curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);//在需要用户检测的网页里需要增加下面两行//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.”:”.US_PWD);$contents = curl_exec($ch);curl_close($ch);echo $contents;?>

方法二:

<?php$url = '/';//1.$content = file_get_contents($url);echo $content;//2.//如果出现中文乱码使用下面代码//$getcontent = iconv(“gb2312″, “utf-8″,file_get_contents($url));//echo $getcontent;?>

方法三:

<?php $handle = fopen ("/","rb"); $contents = ""; do { $data = fread($handle, 8192); if (strlen($data) == 0) {break;} $contents .= $data; } while(true); fclose ($handle); echo $contents; ?>

Ps1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

Ps2.使用curl必须空间开启curl。方法:WIN下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。

Ps3.建议打开URL时使用file_get_contents()方法,可优化打开速度

4.写一个函数,能够便利一个文件夹下的所有文件和子文件夹

<?phpfunction my_candir($dir){$files=array();if($handle=opendir($dir)){while(($file=readdir($handle))){if($file!='..'&&$file!='.'){if(is_dir($dir.'/'.$file)){ $files[$file]=my_candir($dir.'/'.$file);}else{$files[]=$file;}}}closedir($handle);return $files;}}echo '<pre>';print_r(my_candir("F:\amp"));

5…php读取文件内容的几种方法和函数?

1.$fp = Fopen($file_path,’r’);Fread($fp,filesize($file_path));2.File_get_contents($file_path)3.if(file_exists($file_path)){$file_arr = file($file_path);for($i=0;$i<count($file_arr);$i++){//逐行读取文件内容echo $file_arr[$i]."<br />";}4. $file_path = "test.txt";if(file_exists($file_path)){$fp = fopen($file_path,"r");$str ="";while(!feof($fp)){$str .= fgets($fp);//逐行读取。如果fgets不写length参数,默认是读取1k。}

二.全局变量

1.常用的超全局变量(3个)

$_SERVER$_GET$_POST$_REQUEST$_COOKIE$_SESSION

2.如何用php的环境变量得到一个网页地址的url?ip地址又要怎样得到?

$_SERVER["REQUEST_URI"]$_SERVER["SERVER_ADDR"]

3.PHP变量不能包含哪些字符?至少写出五个。PHP的超全局变量有哪些?至少写出五个。

只能包含数字字母下划线和$.

$GLOBALS $_SERVER $_SESSION $_COOKIE $_GET $_POST $_REQUEST

三. 内置函数

1.写出用PHP打印出前一天的时间格式:-5-10 22:21:21

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

2. a r r = a r r a y ( ‘ j a m e s ’ , ’ t o m ’ , ’ s y m f o n y ’ ) ; 将 数 组 的 值 用 “ , ” 号 分 隔 并 合 并 成 字 串 输 出 i m p l o d e ( " , " , arr = array(‘james’,’tom’,’symfony’);将数组的值用“,”号分隔并合并成字串输出 implode(",", arr=array(‘james’,’tom’,’symfony’);将数组的值用“,”号分隔并合并成字串输出implode(",",arr)

3.检测一个变量是否有设置的函数是否?是否为空的函数是?

isset() empty()

4.实现中文字串截取无乱码的方法。给定字符串string,从start处截取长度为length的字符串。

echo mb_substr(‘这样一来我的字符串就不会有乱码_’, 0, 7, ‘utf-8’);

5.常用的处理对象,数组,字符串的方法有哪些

array_search()在数组中搜索给定的值,如果成功则返回相应的键名,否则返回 FALSE

in_array()检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE

is_array()用于检测变量是否是数组

strpos()查找 “php” 在字符串中第一次出现的位置

strlen() 字符串长度

In_array()

Array_slice()

Array_splice()

Array_merge()

Array_combine()

Array_intersect()

Array_diff()

6.PHP判断一个字符串里( s t r 1 ) 是 否 有 某 个 字 符 ( str1)是否有某个字符( str1)是否有某个字符(str2)

$str='chinawinxp';if(strpos($str,'xp')===false){echo'不存在!';}else{echo'存在!'}

<?php echo (int)’我是php程序员’;?>显示什么?

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

Function maxnum($a,$b,$c){Return $a >$b?($a>$c?$a:$c):($b>$c?$b:$c)}

<?Php echo count(strlen(“”)); ?>的执行结果?

1

10.使用list()函数需要注意什么

该函数只用于数字索引的数组,且假定数字索引从0开始。(这句话很重要,是从索引0开始为变量赋值,如果对应的数字索引不存在,则对应位的变量也为空值。)

11.请说明php.ini中的safe_mode开启之后影响了哪些函数

safe_mode,php安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制;

如:chdir,move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen,require,mkdir, unlink等。

注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。

12.PHP怎样判断字符串“abcd”是否存在于数组$arrsy( )中

in_array()

13.写一个二维数组排序算法,能够具有通用性,可以调用php内置函数(array_multisort())。

$arr = [['id'=>1,'name'=>'zhangsan','score'=>80],['id'=>2,'name'=>'lisi','score'=>60],['id'=>3,'name'=>'wangwu','score'=>90],['id'=>4,'name'=>'zhaoliu','score'=>70]];function score_sort($a,$b){if($a['score'] == $b['score']) return 0;return ($a['score']<$b['score'])?-1:1;}usort($arr,"score_sort")

14.请以空格作为间隔,拆分字符串‘Apple Orange BananaStrawberry’,组成数组$fruit。

f r u i t = E x p l o d e ( ‘ ’ , fruit = Explode(‘ ’, fruit=Explode(‘’,str)

15.请解析PHP数组函数array_filter()、array_push()、in_array()的用法

array_filter() 函数用回调函数过滤数组中的元素。该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。<?phpfunction test_odd($var){return($var & 1);}$a1=array("a","b",2,3,4);print_r(array_filter($a1,"test_odd"));?>array_push() 函数向数组尾部插入一个或多个元素。提示:您可以添加一个或者多个值。<?php$a=array("red","green");array_push($a,"blue","yellow");print_r($a);?>in_array() 函数搜索数组中是否存在指定的值。in_array("Runoob", $sites)

15.利用PHP语言实现数组$arr和json数组的转化?

Json_encode json_decode

四. 版本控制

6.您是否用过版本控制软件?如果有您用的版本控制软件的名字是?

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理.

Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

五.变量相关考察点

1.现有如下代码:

$a = true;

$b = false;

$c = ab12;

d = a x b 12 ; e c h o " d = axb12; echo " d=axb12;echo"a has value:". a ; / / 1 h a s v a l u e : 1 e c h o " a;//1 has value :1 echo " a;//1hasvalue:1echo"a has value:". b ; / / 1 h a s v a l u e : e c h o " b; //1 has value: echo " b;//1hasvalue:echo"a has value:". c ; / / 1 h a s v a l u e : e c h o " c;//1 has value: echo " c;//1hasvalue:echo"a has value:".$d;//1 has value:请写出程序输出结果

2.下面脚本运行后,$array数组的值是什么?(B)

<?php$array = array('1','1');foreach ($array as $K => $V) {$V = 2;}?>A.array(‘2’,’2’)B.array(‘1’,’1’)C.array(2,2)D.array(Null,Null)E.array(1,1)

3.下面脚本运行后,屏幕显示什么样的信息(E)

<?php error_reporting(E_ALL); $array = array('abc'=>'def'); echo $array['abc'].$array['def']; ?>

A.abcdef B.def C.abc

E.def\nNotice:Undefined index:def in /xx/yy/zz.php on line 4

4.以下代码输出结果为(B)

<?php$s = '12345';$s[$s[1]] = '2';echo $s;?>A.12345 B.12245 C.22345 D.11345E.array

5.PHP中,单引号和双引号所包围的字符串有什么区别?(AD)【选两项】

A.单引号速度快,双引号速度慢

B.双引号速度快,单引号速度慢

C.两者没有速度差别

D.双引号解析其中以$开头的变量,而单引号不解析

E.单引号解析其中\r\t等转义字符,而双引号不解析

6.字符串"0"在PHP和js中转换为布尔值是false还是true?

PHP是false.js是true

7.写出下面代码运行结果:

$x = 1;++$x;$y =$x++;echo $y;

答案: 2

8.补全横线处应该使用的函数为?

$email = ‘www@’; $str = ($email,‘@’);$info = (‘.’,$str);($info);输出结果为:Array ([0] => @ campusapp [1]=>com[2]=>cn

strstr explode var_dump

9.输出下面代码运行结果

$A="Hello "; function print_A() {$A = "php!";global $A; echo $A;}echo $A;print_A();

答案: Hello Hello

10.写出下面代码运行结果:

print $a,“hello”;

Parse error: syntax error, unexpected ‘,’ in C:\phpStudy\PHPTutorial\WWW\lesson\1\test.php on line 2

11.写出下面代码运行结果:

$type = 2;echo $type == 1 ? "一" : $type == 2 ? "二" : $type == 3 ? "三" : "四";

答案 三

12.写出下面代码运行结果:(1分)

$a = '1';$b = &$a;$b = "2$b";echo $a,$b;

21 21

13.以下脚本输出什么?<? $s = ‘12345’;$s[$s[1]] = ‘2’; echo $s ?>

12245

14.以下脚本输出什么?

<? $x = 'apple';echo substr_replace($x,'x',1,2); ?>

Axle 从apple字符串的第二个字符开始,将x替换字符串中的两个字符

15.请说明PHP中传值与引用的区别。什么时候传值什么时候引用?

传值这是把变量的值传递给另一个变量,引用是将变量的地址传递给另一个变量。

传值当改变其中一个变量的值,另一个变量不受影响,引用赋值时,当改变其中一个变量的值,另一个变量也是改变

16.PHP程序使用utf-8编码,以下程序输出结果是什么?C

<?php$str = ‘hello 你好世界’;Echo strlen($str);?>

A)9 B)13(gbk) C)18 D)17(utf8)

17.写出下列代码输出结果: 6

<?Php$a = 1+2+“3+4+5”;Echo $a;?>

18.POST和GET的区别?

(1)GET 从指定的资源请求数据,POST 向指定的资源提交要被处理的数据

(2) GET 请求可被缓存,POST 请求不会被缓存

(3)GET 请求保留在浏览器历史记录中,POST 请求不会保留在浏览器历史记录中

(4)GET 请求可被收藏为书签,POST 不能被收藏为书签

(5)GET 请求有长度限制,POST 请求对数据长度没有要求

(6)GET 请求不应在处理敏感数据时使用

(7)GET携带的参数存放在请求包的请求行中,而POST携带的参数存放在请求包的请求体部分

19.你用到过PHP中var_dump,print_r,empty,exit函数吗,说说你平时是怎样调试PHP程序的

print_r:打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

var_export:跟print_r和var_dump类似,但是很少用。

var_dump:此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

var_dump和print_r的区别:var_dump返回表达式的类型与值而print_r仅返回结果,相比调试代码使用var_dump更便于阅读

20.写出以下程序的输出结果

$b=201;$c=40;$a=$b>$c?4:5;echo $a;

4

21.写出以下程序的输出结果

$str=”cd”;$$str=”wdmcake”;$$str=”ok”;echo $cd;

ok

六. 会话控制

1.下面哪个写法能够设置用户端的cookie的有效期是一个小时?A

A.time()+3600 B.time(3600) C.gmtime()+3600 D.gmtime(3600)

2.Session与cookie的区别和联系?

区别:

(1)session存储在服务器端,会占用服务器资源,cookie保存在客户端。

(2)Session过多的时候会消耗服务器资源,所以大型网站会有专门的Session服务器,而Cookie存在客户端所以没什么问题。

(3)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

(4)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

联系:

session是通过cookie来工作的

session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。

在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。

3.PHP session扩展默认将session数据存储在哪里?D

A)SQLite Database

B)MySQL Database

C)Shared Memory

D)File System

E)Session Server

4.禁用COOKIE后SEESION还能用吗?原因?

可以,通过URL传参的方式,传递session_id

七. 正则

1.php正则表达式验证ip地址

((1[0-9][0-9].)|(2[0-4][0-9].)|(25[0-5].)|([1-9][0-9].)|([0-9].)){3}((1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9]))

2.请对POSIX风格和兼容Prel风格两种正则表达式的主要函数进行类比说明

Perl 兼容正则表达式语法 preg_match() preg_replace()

POSIX风格 ereg ereg_replace

3.写一个验证邮箱的正则表达式。

$pattern = ‘/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$/’;

4.对于用户输入一串字符串 s t r i n g , 要 求 string,要求 string,要求string中只能包含大于0的数字和英文逗号,请用正则表达式验证,对于不符合要求的$string返回出错信息。

$preg = '/^[1-9,]+$/';$str = '1';preg_match($preg,$str,$arr);var_dump($arr);

5.写出一个图片的正则表达式,并获取url?

$url='<img class="trans" src="//05/24/1_2988ea16.jpg" alt="" title="" />';$content=preg_match_all('/\<img.*?src=[\"|\']?([^\"]+)[\"|\']?\s*.*?>/i', $url, $matches);var_dump($matches);

八. 错误报告

1.PHP错误类型及屏蔽方法

E_ERROR

E_WARNING

E_NOTICE

E_PARSE

error_reporting(0)

ini_set(‘display_errors’,‘off’);

2.Windows平台,Apache Http Server启动失败,排错思路是什么?

1 端口占用情况

2.路径及文件名文件。安装路径的文件夹名称中不能出现中文或空格

3.配置文件问题

3.怎样找到php.ini的路径?

phpinfo();

找到Loaded Configuration File这一行

4.PHP加速模式/扩展?PHP调试模式/工具?

1、eAccelerator

eAccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍。从文字上可以理解为:eAccelerator是PHP加速器扩展。

2、memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。从文字上可以理解为:内存缓存扩展,并且针对于集群服务器使用较多,主要用于分布式缓存,算是数据库缓存。

PHP Debug Bar 是另一个非常棒的 PHP 调试工具,可以显示 web 应用的 pst 数据。

Whoops 是个更高效的 PHP 调试库,帮助开发者构建和维护他们的项目,使其做得更好。Whoops 也是个开源软件,有着许多杰出的特性。

Xdebug 是提供给 PHP 用户的一个扩展,有着许多高级的特性,每一时刻都有不同类型的更新。

5.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替他们?

require:require("########");这个函数一般放在PHP文件的最前面,程序在执行前就会先导入要引用的文件。

include:include("############");这个函数一般放在程序的流程控制里边。只有程序在执行碰到才会引用。可以简化程序的执行流程。

最根本的区别在于遇到错误的处理方式还有require没有返回值而include有返回值。

require:一个文件存在错误时,执行就会中断。并返回一个致命错误。

include:一个文件存在错误,程序不会中断执行。会弹出一个警告。

Require_once

Include_once

6.简述phptry catch finally关键字分别有什么作用

try内部正常执行try的内部逻辑,异常则执行catch的内部逻辑结构,但是不管执行的哪个都会执行完try catch的内部逻辑(非return)后执行finally的内部逻辑。

如果try catch都有return,按照正常执行,然后执行finally的逻辑,再返回对应的try 或者catch里执行return。

如果try catch finally都有return,执行完finally的逻辑后,会调用finally的return。

九. 面向对象

1.如果你想要自动加载类,下面哪种函数声明是正确的 C

A)function autoload($class_name)B)function__autoload($class_name,$file)C)function__autoload($class_name)D)function_autoload($class_name)E)function autoload($class_name,$file)

2.写出php5的构造函数和析构函数?

__construct() __destruct()

3.Interface和abstract class有哪些异同?

1.相同点

(1)两者都是抽象类,都不能实例化。

(2)Interface实现类及abstract class的子类都必须要实现已经声明的抽象方法。

2.不同点

(1)接口需要实现,要用implements,而抽象类需要继承,要用extends

(2)一个类可以实现多个interface,而一个类只能继承一个abstract class

(3)Interface强调特定功能的实现,而abstract class强调所属关系。

(4)尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。这个选择有两点含义:a) abstract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在abstract class中必须定义方法体;b) abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

(5)abstract class是interface与class的中介。abstract class在interface及class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

(6)接口中的抽象方法前不用也不能加abstract关键字,默认隐式就是抽象方法,也不能加final关键字来防止抽象方法的继承。而抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法。

接口中的抽象方法默认是public的,也只能是public的,不能用private,protected修饰符修饰。而抽象类中的抽象方法则可以用public,protected来修饰,但不能用private

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。