1.下面哪个函数可以打开一个文件,以对文件进行读和写操作(1分)
A.fget() B.file_open() C.fopen() D.open_file()
C
function get_ext($url){
$data = parse_url($url);
return pathinfo($data['path'], PATHINFO_EXTENSION);
}
3.有一个网页地址,比如PHP主页:http://www.phpv.net/index.html,如何得到它的内容?
方法一: curl
<?php
$url = “http://www.phpv.net/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 = 'http://www.example.com/';
//1.
$content = file_get_contents($url);
echo $content;
//2.
//如果出现中文乱码使用下面代码
//$getcontent = iconv(“gb2312″, “utf-8″,file_get_contents($url));
//echo $getcontent;
?>
方法三:
<?php
$handle = fopen ("http://www.example.com/","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.写一个函数,能够便利一个文件夹下的所有文件和子文件夹
<?php
function 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打印出前一天的时间格式:2006-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(“http://php.net”)); ?>的执行结果?
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,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
<?php
function 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.11345 E.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@campusapp.com.cn’;
$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 = '20121';
preg_match($preg,$str,$arr);
var_dump($arr);
5.写出一个图片的正则表达式,并获取url?
$url='<img class="trans" src="http://s0.ifengimg.com/2016/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