一、选择题
01.输出为Mozilla/4.0(compatible;MSIE5.01;WindowNT5.0)时,可能的输出语句是: B
A.$_SERVER['HTTP_USER_AGENT_TYPE'];
B.$_SERVER['HTTP_USER_AGENT'];
C.$_SERVER['USER_AGENT'];
D.$_SERVER['AGENT'];
02.下面功能PHP无法实现的是: D
A.服务器端脚本运行
B.命令行脚本运行
C.客户端图形界面(GUI)程序
D.浏览器端执行DOM操作
03.下面说法不正确的是: C
A.PHP有四种标量类型:布尔型(boolean),整型(integer),浮点型(float),字符串(string)
B.浮点型(float)与双精度型(double)是同一种类型
C.复合类型包括:数组(array),对象(object),资源(resource)
D.伪类型:混合型(mixed),数字型(number),回调(callback)
04.执行下面的代码后,
<?php
echo function_exists('print');
?>
得到的输出是: A
A.空
B.true
C.false
D.FALSE
05.下面不是PHP语法的组成部分的函数是: C
A.array
B.eval
C.each //因为each是一个函数,
D.list
06.执行下面的代码的结果是什么? A
<?php
$bool=TRUE;
echo gettype($bool);
echo is_string($bool); //布尔值false(没有输出)
?>
A.boolean
B.boolean0
C.booleanFALSE
D.booleanfalse
07.写出下面代码执行的结果:
<?php
$a=12;
$b=012;//八进制
$c=0x12; //十六进制
echo $a,"\n",$b,"\n",$c;
?>
答案是:12 10 18
08.下面代码的执行结果是什么? C
<?php
echo 1+2+"3+4+5";
?>
A.0
B.3
C.6
D."33+4+5";
09.下面代码加入下面那个函数后返回TRUE: B
return ?=='A';
A.ord(65)
B.chr(65) //返回相对应于 ascii 所指定的单个字符
C.65+''
D.''+65
10.下面代码的输出正确的是: C
<?php
$a=array(1=>5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
?>
A.空2281 B.空8122 C.8122空 D.空空空
11.下面代码的输出结果: D
<?php
$a[bar]='hello';
//数组下标为bar的常量值,若bar不是常量,则为bar字串
echo $a[bar];
echo $a['bar'];
?>
A.hello B.空空 C.报错 D.hello hello
12.写出下面代码的结果: C
<?php
echo 1>>0; //1
echo 2>>1; //1
echo 3<<2; //12
?>
A.012 B.106 C.1112 D.123
13.下面对于echo,print的描述正确的是: C
A.echo,print都可以打印多个参数
B.print可以打印多个参数,echo不可以
C.echo可以打印多个参数,print不可以
D.echo,print都不可以打印多个参数
14.对于正面的代码 B
<?php
$fruits=array('strawberry'=>'red','banana'=>'yellow');
?>
不能够正确得到结果'yellow'的代码是:
A.echo"Abananais{$fruits['banana']}";
B.echo"Abananais$fruits['banana']";
C.echo"Abananais{$fruits[banana]}";
D.echo"Abananais$fruits[banana]";
15.下面代码执行完成后的结果是什么?
<?php
function change(){
static $i=0; //多次调用此函数时,此句的初始化只执行一次,而且共用
$i++;
return $i;
}
print change();
print change();
?>
答案是:1 2
16:以下代码的执行后是,$result值为: B
<?php
$srcArray=array('a','b','c','d');
$randValue=array_rand($srcArray); //返回一个随机单元的键名
$result=is_string($randValue);
?>
A、a
B、false
C、true
D、b
E、c
17:<?php echo count(‘123’)?>输出的是? D
A、3
B、false
C、null
D、1
E、0
18:以下代码的执行后是,$result值为: B
<?php
$a='01';
$result=1;
if(in_array($a,array('1'))){
$result=2;
}elseif($a=='1'){
$result=3;
}elseif($a=='01'){
$result=4;
}else{
$result=5;
}
?>
A、1
B、2
C、3
D、4
E、5
19:php函数名是否区分大小写? A
A、不区分
B、区分
20:以下代码的执行后是,$result值为: C
<?php
$x=””;
$result=is_null($x); // is_null isset empty
?>
A、null
B、true
C、false
D、1
21:哪种OOP设置模式能让类在整个脚本里只实例化一次? E
A、MVC(设计模式)
B、代理模式
C、状态模式
D、抽象工厂模式
E、单件模式(单例、单态)
class A{
private static $a=null;
//定义其他属性
private function __construct(){
}
public static function makeA(){
if(self::$a==null){
self::$a = new A();
}
return self::$a;
}
//定义其他自己的方法
}
22:借助继承,我们可以创建其他类的派生类。那么在PHP中,子类最多可以继承几个父类? A
A、1个
B、2个
C、取决于系统资源
D、3个
E、想要几个有几个
23:以下哪种错误类型无法被自定义的错误处理器捕捉到? C
A、E_WARNING
B、E_USER_ERROR
C、E_PARSE
D、E_NOTICE
24:执行以下代码,输出结果是 C
<?php
abstract class a{
function __construct(){
echo "a";
}
}
$a=new a();
?>
A、a
B、一个错误警告
C、一个致命性的报错 抽象类不可实例化
25:执行以下代码,输入结果是 A
<?php
class a{
function__construct(){
echo "EchoClassaSomething";
}
}
class b extends a{
function __construct(){
parent:: __construct();
echo “EchoClassbSomething”;
}
}
$a=new b();
?>
A、echoclassasomethingechoclassbsomething
B、echoclassbsomethingechoclassasomething
C、echoclassassomething
D、echoclassbsomething
26.下面哪个选项没有将john添加到users数组中? C
(A) $users[] = 'john';
(B) array_push($users, 'john');
(C) $users ||= 'john';
(D) array_unshift($users, 'john'); //在数组开头插入一个或多个单元
27.在PHP中,'+'操作符的功能不包括 A
A.字符串连接
B.数组数据合并
C.变量数据相加
28.下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串? A
A.$s1+$s2
B.“{$s1}{$s2}”
C.$s1.$s2
D. implode(‘’,array($s1,$s2))
29.下面的脚本运行以后,$array数组所包含的值是什么? B
$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)
30、array_shift()函数的作用是? B
A 在数组中新增一个元素
B 移除数组中的一个元素
C 交换一个数组的key和value
D 清除一个数组
二、填空题
1、执行程序段<?php echo 8%(-2) ?>将输出__0__。
2、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句 LoadModule 动态装载PHP模块,然后再用语句 AddType application/x-httpd-php .php__使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
3、类的属性可以序列化后保存到session中,从而以后可以恢复整个类,这要用到的函数是 unserialize_。
4、_____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的。__FUNCTION__
5、以下代码输出是:abcde ok
<?php
$str="cd";
$$str="abcde"; //$cd=’abcde’;
$$str.="ok";
echo $cd;
?>
三、编程题
1、请指出以下代码的错误之处(圈出来并加以改正)
function baz($y,$a) {
$x = new Array(); //$x = array();
$x[sales] = 60; //$x['sales'] = 60;
$x[profit] = 20; //$x['profit'] = 20;
foreach($x as $key => $value) {
echo $key + " " + $value + "<BR>"; //echo $key." ".$value."<BR>";
}
}
2、写出以下程序的输出结果
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
答案:4
3、下面的程序会输出什么
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
答案:10
4、请写出下列PHP代码的执行结果
<?php
$var1 = 5;
$var2 = 10;
function foo(&$my_var){
global $var1;
$var1 += 2;
$var2 = 4;
$my_var += 3;
return $var2;
}
$my_var = 5;
echo foo($my_var) ."\n"; 4 此时$var1:7 $my_var:8
echo $my_var ."\n"; 8
echo $var1 ."\n"; 7
echo $var2 ."\n"; 10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var) ."\n"; 4
答案是:4 8 7 10 4
5、写出下列代码的输出结果:
function myfunc($argument){
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable)=".myfunc($variable);
答案是:20myfunc(10)=
6、写出如下程序的输出结果(5分)
$test='aaaaaa';
$abc=&$test;
unset($test); //只删除test变量名,abc还在
echo $abc;
答案是:aaaaaa
7、写出程序运行的结果
<?php
$a=0;
$b=0;
if($a=3||$b=3){ //此时 $a: bool(true), $b: int(0)
$a++; //true加加无效,还是true
$b++;
}
echo $a.",".$b; //1,1 类型:bool(true), int(1)
$a=0;
$b=0;
if($a=3|$b=3){ //此时 $a: int(3), $b: int(3)
$a++;
$b++;
}
echo $a.",".$b; //4, 4
结果:
1.1, 1,
2.4, 4
8、以下程序
<?php
$data = array('a', 'b', 'c');
foreach($data as $key=>$val) {
$val = &$data[$key]; //将data的key位置的别名设为val
//变量val指向了数组key下标位置
}
?>
问题1:程序执行时,每一次循环结束后变量$data的值是什么?请解释。
答案是:a b c; b,b,c b,c,c
问题2:程序执行完后,变量$data的值是什么?请解释。
答案是:b,c,c,
四、问答题
1、实现中文字串截取无乱码的方法。(3分) mb_substr( )
2、输出用户的IP地址,并且判断用户的IP地址是否在192. 168.1.100 --- 192.168.1.150之间(5分)。
<?php
$start = ip2long("192.168.1.100"); //将字串式的ip地址转成整形
$end = ip2long("192.168.1.150");
$ip = "192.168.2.120";
$m = ip2long($ip);
if($m>=$start && $m<=$end){
echo "ok";
}else{
echo "no";
}
3、不断在文件hello.txt头部写入一行“Hello World”字符串,要求代码完整
<?php
$f = fopen("hello.txt","r");
$str="";
while($s=fread($f,1024)){
$str.=$s;
}
fclose($f);
echo $str;
4、请列出3种PHP数组循环操作的语法,并注明每种循环的优缺点
使用:for 缺点只适合循环索引式的且下标从0开始的连续数组
foreach 循环数组,优点:遍历所有数组,不管只限是否遍历过
while/list/each/reset/ 遍历,缺点:复杂一些。
5、求两个日期的差数,例如2020-2-5~2020-3-6的日期差数
<?php
$m1 = strtotime("2007-2-5"); //将指定日期转成时间戳
$m2 = strtotime("2007-3-6");
echo ($m2-$m1)/(3600*24)."天";
6、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值(从1开始)。
<?php
$Tarray = array(
array(‘id’ => 0, ‘name’ => ‘123’),
array(‘id’ => 0, ‘name’ => ‘1234’),
array(‘id’ => 0, ‘name’ => ‘1235’),
array(‘id’ => 0, ‘name’ => ‘12356’),
array(‘id’ => 0, ‘name’ => ‘123abc’));
)
代码实现:
<?php
usort($tarray,"fun"); //自定义
function fun($a,$b){
return strlen($b['name'])-strlen($a['name']);
}
//重排id的值
foreach($tarray as $k=>$v){
$tarray[$k]['id']=$k+1;
}
//或
//foreach($tarray as $k=>&$v){
//$v['id']=$k+1;
//}
7、在PHP中error_reporting这个函数有什么作用?
设置错误输出等级
8、简述如何得到当前执行脚本路径,包括所得到参数。
echo dirname(__FILE__);
从$_REQUEST中获取参数
9、mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row()以索引数组方式解析结果集
mysql_fetch_array()以索引加关联两种数组方式解析结果集
10、用PHP写出显示客户端IP与服务器IP的代码
$ _SERVER["SERVER_ADDR"]
$ _SERVER["REMOTE_ADDR"]
11、在开发项目中,需要上传超过8M的文件,请说明在php.ini需要修改的配置项。
upload_max_filesize = 2M //将这个改为允许的大小8M
post_max_size = 8M //注意要将此值设为大于(upload_max_filesize)8M
12、Php是否有安全问题,如果有,请列举说明。
SQL注入、权限、系统命令、挂马等
参数注入
fwrite写模式
ajax的操作(尽量只做读操作)
13、从PHP4.2.0开始 PHP默认配置将register_globals配置设定为off,请指出这个设定的作用和对PHP相关程序的影响。
影响: 不用$_GET[“name”],$_POST[“name”] $_SESSION[]页可以直接获取到值$name
14、PHP如何执行shell的两种方式
函数:shell_exec()或 exec() ``
15、写出一个函数,参数为年份和月份,输出结果为指定月的天数
使用switch case 语句判断输出
<?php
function fun($y,$m){
$day=0;
switch($m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
$day=31;
break;
case 4:
case 6:
case 9:
case 11:
$day=30;
break;
case 2:
if($y%4==0 && ($y%100!=0 || $y%400==0)){
$day=29;
}else{
$day=28;
}
break;
}
return $day;
}
echo date("t",strtotime("2013-04-01"));
16、用PHP写一段代码,实现不使用第3个变量,交换$a,$b的值,$a,$b的初始值自己定。
<?php
$a = 50;
$b = 200;
$a = $b-$a;
$b = $b-$a;
$a = $a+$b;
17 用代码写出冒泡排序法:
<?php
$a = array(100,80,600,15,34,200,5);
print_r($a);
echo "<br/><br/>";
//排序的循环次数
for($i=0;$i<count($a)-1;$i++){
//执行排序,负责一次找出一个
for($j=0;$j<count($a)-$i-1;$j++){
//确定顺序(大于:从小到大)
if($a[$j]>$a[$j+1]){
//执行交换位置
$tmp = $a[$j];
$a[$j]=$a[$j+1];
$a[$j+1]=$tmp;
}
}
}
print_r($a);
echo "<br/><br/>";