一.文件操作
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