PHP精典面试题(附答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PHP精典⾯试题(附答案)1.输出Mozilla/4.0(compatible;MISIE5.01;Window NT 5.0)是,可能输出的语句是?
A:$_SERVER['HTTP_USER_AGENT_TYPE'];
B: $_SERVER['HTTP_USER_AGENT'];
C: $_SERVER['USER_ACENT'];
D: $_SERVER['AGENT'];
2.下⾯功能php⽆法实现的是?
A: 服务端脚本运⾏;
B: 命令⾏脚本运⾏;
C: 客户端图形界⾯(GUI)程序;
D: 浏览器执⾏DOM操作
3.下⾯说法不正确的是?
A: PHP有四种标量类型:布尔型,整型,浮点型,字符串;
B: 浮点型与双精度是同⼀种类型
C: 复合类型包括:数组,对象,资源;
D: 伪类型:混合型,数字型,回调;
4.执⾏代码后
<?php
echo function_exists('print');
>
输出的结果是?
A: 空
B: true
C: false
D: FALSE
5.下⾯不是PHP语法的组成部分的函数是?
A: array
B: eval
C: each
D: list
6.执⾏下⾯代码的结果是什么?
<?php
$bool = true;
echo gettype($bool);
echo is_string($bool);
>
A: boolean
B: boolean0
C: booleanFalse
D: booleanfalse
7.写出下⾯程序代码执⾏结果
$a = 12;
$b = 012;
$c = 0x12;
echo$a,"\n",$b,"\n",$c;
>
A: 22
B: 10
C: 6
D: 12
8下⾯代码的执⾏结果是?
<?php
echo 1+2+"3+5+6";
>
A: 0
B: 3
C: 6
D: "33+4+5"
9.下⾯代码加⼊下⾯那个函数后返回true? return ? == 'A';
A: ord(65)
B: chr(65)
C: 65+"
D: "65+
10.下⾯代码输出正确的是?
<?php
$a = array(1=>5,5=>8,22,2=>'8',81);
echo$a[7];
echo$a[6];
echo$a[3];
>
A: 空 22 81
B: 空 81 22
C: 81 22 空
D: 空空空
11.下⾯代码的输出结果是?
<?php
$a[bar] = 'hello';
echo$a[bar];
echo$a['bar'];
>
A: hello
B: 空空
C: 报错
D: hello hello
12.写出下⾯代码的结果:
<?php
echo 1>>0;
echo 2>>1;
echo 3<<2;
>
A: 012
B: 106
C: 1112
D: 123
13.下⾯代码执⾏结果?
<?php
for($i=1;$i<10;$i++){
print$i;
}
>
A: 0123456789
B: 01234567890
C: ⽆输出
D: 死循环
14.下⾯对于echo,print 的描述正确的是?
A: echo,print都可以打印多个参数
B: print 可以打印多个参数,echo不可以
C: echo可以打印多个参数,print不可以
D: echo,print 都不可以打印多个参数
15.对于以下的代码
<?php
$fruits = array('strawberry'=>'red','banana'=>'yellow'); >
能够正确得到结果'yellow' 的代码是?
A: echo "A banana is {$fruits['banana']}";
B: echo "A banana is $fruits['banana']";
C: echo "A banana is {$fruits[banana]}";
D: echo "A banana is $fruits[banana]"; 16.下⾯代码执⾏结果是?
<?php
function change(){
static$i = 0;
$i++;
return$i;
}
print change();
print change();
>
正确答案:1,2
17.
$foo = 'test';
$bar = <<<EOT
$foo bar
EOT;
echo$bar;
>
上⾯语句输出的结果是?
A: $foo bar;
B: 'EOT' $foo bar EOT
C: test bar
D: 'EOT' test bar EOT
18.
$a = 3;
$b = 4;
if($a || $b = 5){
echo 'tudou';
}
$b的值是?
A: 4;
B: 5
C: 3;
D: false;
19.下⾯那个表达式不能将两个字符串$s1和$s2串联成⼀个单独的字符串? A: $s1+$s2
B: "{$s1}{$s2}"
C: $s1.$s2
D: implode(",array($s1,$s2))
E: 以上⽅法都能实现
20.下⾯的脚本运⾏以后,$array数组所包含的值是什么?
<?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)
21.cron后台常驻程序(daemon)⽤于?
A: 负责⽂件在⽹络中共享
B: 管理打印⼦系统Manages theprinting subsystem
C: 跟踪管理系统信息和错误
D: 管理系统⽇常任务的调度(scheduing)
22.怎么了解您在当前的⽬录下还有多⼤空间?
A: Use df
23.有⼀个备份程序mybackup,需要在周⼀⾄周五下午⼀点和晚上⼋点各运⾏次,下⾯那⼀条crontab的项可以完成⼯作? A: 0 13,20 * * 1,5 mybackup
B: 0 13,20 * * 1,2,3,4,5 mybackup
C: *13,20 * * 1,2,3,4,5, mybackup
D: 0 13,20 1,5 * * mybackup
24.下⾯那条命令可以吧f1.txt复制为f2.txt ?
A: cp f1.txt f2.txt
B: cat f1.txt|f2.txt
C: cat f1.txt||f2.txt
D: copy f1.txt|f2.txt
25.使⽤命令可以查看linux的启动信息?
A: mesg -d
B: dmesg
C: cat /etc/mesg
D: cat /var/mesg
26.在vi 中退出不保存的命令是?
A: :qt
B: :r
C: :wq
D: :q!
27.下⾯那个选项没有将john添加到users数组中?
A: $users[] = 'john';
B: array_add($users,'john');
C: array_push($users,'john');
D: $users ||= 'john';[a,c]
28.下列不属于Javascript语法关键字/保留字的是?
A: var
B: $
C: functiom
D: while
29.下列不属于JavaScript DOM事件的是?
A: onclick
B: onkeydown
C: onbodyload
D: onmouseover
30.下列PHP函数中不能直接在页⾯上输出字符串的函数是?
31.在PHP中,'+'操作符的功能不包括
A: 字符串连接
B: 数组数据合并
C: 变量数据相加
32.⽤php获取当前时间并打印,打印格式为2006-5-10 22:21:21
echo date('Y-n-m H:i:s');
33,字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么? 字符串转数组函数:
str_split()
explode()
数组转字符串
join()
implode()
字符串截取
substr()
mb_substr()
字符串替换
str_replace()
preg_replace()
字符串查找
preg_match()
preg_match_all()
strops()
strrops()
34.解释⼀下php类中pretect,public,private,interface,abstract,final,static的含义
pretect:受保护的
public:公有的
private:私有的
interface:接⼝
abstract:抽象类或者抽象⽅法
final:最终版本的类或者⽅法
static:静态属性或者⽅法
35.如何把字符串'08/26/2004'替换成'2004-08-26'?
$date = '08/26/2004';
echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3-$1-$2,$date);
36.从表login中选出name字段包含admin的前10条结果所有信息的sql语句
select * from login where name '%admin%' limit 10;
37.解释左连接,右连接,内连接,索引:
左连接: left join on
左连接是以左边的表为主表,先输出左边表的所有数据,右边匹配输出,不匹配的为null
右连接:right join on
右连接是以右边的表为主表,先输出右边表的所有数据,左边匹配输出,不匹配的为null
内连接:inner join on
内连接必须同时符合条件的内容才会输出,相等于普通的多表查询
38.写⼀个函数。

尽可能⾼效的。

从⼀个标准的url⾥取出⽂件的扩展名,已知url如下: $url = '/web/index.php? id=4&name=lisi';
$arr = parse_url($url);
$arr2 = path_info($arr['path']);
$ext = $arr2['extension'];
39.解决⽹站服务器⼤流量⾼并发的问题:
把apache服务器(3000)换成nginx服务器(30000)
修改Apache或者nginx的默认配置,把其中的并发数调到最⾼
多增加⼏台服务器同时对⽤户提供服务(负载均衡技术)
减少客户在服务器上的链接时间断开时间
php代码的优化
数据缓存(⽂件缓存,或者内存缓存redis,memcache等)
40.如何设计或者配置mysql ,才能达到⾼效的⽬的
服务器优化:max_connections = 1500 并发链接数调到最⼤
wait_timeout = 10 链接关闭时间
表优化:字段索引:主键索引,唯⼀索引,普通索引
负载均衡(mysql主从复制)
41.如何进⾏防sql注⼊
表单尽量使⽤post提交
使⽤HTTP_REFERER检查源⽂件
开启addslashes在特殊符号前加\
使⽤htmlspecialchars对字符进⾏转义
42.防⽌盗链
使⽤HTTP_REFERER检查源⽂件
43.⽤PHP写出⼀个安全的⽤户登录系统需要注意哪些⽅⾯?
表单使⽤post提交
限制错误登录次数
使⽤验证码防⽌机器破解
同时做前后端表单验证
44.使⽤过哪些版本控制⼯具?
svn
git
45.什么是⾯向对象?主要特征是什么?
⾯向对象是程序的⼀种设计⽅式,它利⽤提⾼程序的重⽤性,使程序结构更加清晰
主要特征:封装,继承,多态
46.HTTP状态中302,403,500代码的含义:
302重定向,403服务器拒绝访问,500服务器内部错误
47.linux下建⽴压缩包,解压缩包的命令是?
tar czf test.tar.gz test.php
tar xzf test.tar.gz
48.myisam和innodb的基本区别:
在增删改查⽅⾯,myisam要优于innodb表引擎,当数据量特别⼤时,他们的速度相差不⼤,
innodb⽀持事务,存储过程,⾏锁等等
49.isset()和empty()的区别:
isset 是判断变量是否存在,是否定义
empty 是判断变量是是否为空
50.如何在页⾯之间传递变量(⾄少两种)
get,post,ajax,curl,cookie,session
51.写出匹配url的正则表达式:
$url = "";
preg_match('/^(\w+\.)?\w+\.\w+$/',$url);
52.请写出常见的排序算法,并⽤PHP实现冒泡排序,将数组$a = array()按照从⼩到⼤的⽅式进⾏排序: 冒泡排序,快速排序
function mysort($arr){
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-$i-1;$j++){
if($arr[$i]>$arr[$j+1]){
$x = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $x;
}
}
}
return$arr
}
53.在数据库test中的⼀个表student,字段是name,class,score,分别代表姓名,所在班级,分数
查出每个班级中的学⽣,按照成绩降序排序
select * from student order by class asc,score desc;
查出每个班的及格⼈数和不及格⼈数,格式为:class,及格⼈数,不及格⼈数
select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student group by class; 54.请写出你认为语⾔中的⾼级函数
array_filter()
array_map()
array_multisort()
名称类型uid int name varchar age tinyint array_count_values()
array_splice()
htmlspecialchars()
55.表结构⼊下
需求:
增加⼀个字段性别sex,写出修改语句
alter table user add sex varchar(10) not null default '男';
查询出年龄介于20到30岁之间的⽤户
select uid,name,age from user where age>20 && age<30;
如果提个web 频繁的访问查询,上题的查询如何优化?
给age 字段添加索引
create index in_age on user(age);
56.web 开发的遇到的问题有哪些?
功能需求分析
数据库设计
sql 语句的优化
前端编写js 特效
57.求两个⽇期的差数,例如:2007-2-5~2007-3-6的⽇期差数
$s = strtotime ('2007-3-6') - strtotime ('2007-2-5');//秒差
echo $s /86400;//相差天数
58.写出如下程序运⾏结果
<?php
$test = 'hello';
$abc = &$test ;
unset ($test );
echo $abc ;
>
正确答案:hello
59.在空表news 中,字段id 为⾃增主键,批量插⼊17条记录后,发现最后三条数据有误,删除此三条数据后重启mysql 数据库,再重新插⼊三条记录,请问最后⼀条记录值的id 是多少?
myisam 引擎 18
innodb 引擎 20
60.⾄少写出⼀种验证139开头的11位⼿机号码的正则表达式:
$str = "139********";
preg_match ('/^139\d{8}$/',$str );
61.请写出⼀个函数,实现如下功能:
字符串"open_door" 转换为 "OpenDoor","make_id"转换为"MakeId"
<?php
$str = "make_hello";
$arr = explode ('_',$str );
$str2 = '';
foreach($arr as$val){
$str2.=ucfirst($val);
}
echo$str2;
>
62.请写⼀个函数将1234567890转成1,234,567,890,每3位⽤逗号隔开的形式 
<?php
$str = "1234567890";
$str2 = strrev($str);//翻转字符串
$arr = str_split($str2,3);
$str3 = join(',',$arr);
$str4 = strrev($str3);
echo$str4;
//还有⼀个函数直接能搞定:
$str = "1234567890";
echo number_format($str);
>
63.有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出⼀条sql语句,将B中的age>50的记录的c1,c2更新到A 表中统⼀记录中的c1,c2字段中:
update A,B set A.c1 = B.c1,A.c2 = B.c2 where A.id = B.id and B.age>50;
64.如何实现每天的0点钟重启linux服务器?
crontab -e
00 00 * * * /sbin/init 6
65.当前⽬录下有⼀个⽂件showdown.sh,如何修改⽂件,将其指定为使⽤/bin/bash运⾏,如何修改其权限为所有⽤户可读写,所有⽤户可执⾏?
vim showdown.sh
#!/bin/bash
chmod 777 showdown.sh
66.当前⽬录下有⼀个⽂件为showdown.sh,如何修改其所有⼈为root
chown root showdown.sh
chown root:root showdown.sh//修改所有⼈为root,并且修改所属组为root
67.请⽤⽤php程序,编写读取 的⾸页的内容,并将其存⼊字符串$str中
$str = file_get_contents('');
68.请⽤php将上题中读取出来的⽹页内容的<title>标签的值解析出来
preg_match('/<title>(.*)<\/title>/',$str,$arr);
69.通过php函数的⽅式对⽬录进⾏遍历,写出程序:
<?php
function delDir($dir){
$files = scandir($dir);
foreach($files as$file){
if($file!='.' && $file!='..'){
$path = $dir.'/'.$file;
if(is_dir($path)){
delDir($path);
}else{
unlink($path);
}
}
}
rmdir($dir);
}
>
70.什么是数据库索引,主键索引,唯⼀索引的区别,索引的缺点是什么?
数据库索引是给数据库中的每张表建⽴索引,便于提⾼查询检索效率
主键索引是给每张表的主键设置索引
唯⼀索引是给每张表的唯⼀值字段设置索引
索引的缺点是建⽴索引需要增加存储空间,空间利⽤率低,并且当数据发⽣变化时改索引资源消耗⽐较⼤
71.通过js 实现前进和后退操作:
<a href="javascript:Window.history.go(1)">前进</a>
<a href="javascript:Window.history.go(-1)">后退</a>
72.写出程序运⾏结果:
<?php
$a = 0;
$b = 0;
if($a=3 || $b = 3){
$a++;
$b++;
}
echo$a.",".$b;
>
正确答案是:1,1
<?php
$a = 0;
$b = 0;
if($a = 4 | $b = 3){
$a++;
$b++;
}
echo$a.",".$b;
>
正确答案是:8,4(未或运算)
73.写出下列代码的输出结果?
<?php
function myfunc($argument){
echo$argument+10;
}
$variable = 10;
echo "myfunc($variable)=".myfunc($variable);
>
正确答案是:10myfunc(10)=;
74.请⽤尽可能少的语句实现对输出email地址进⾏验证功能:
$email = "test@";
preg_match('/^\w+@\w+\.\w+$/',$email,$arr);
75.如何判断sql语句的运⾏效率,如何优化⼀个查询sql
desc select * from table;
explain select * from table;
给查询条件增加索引
76.apache默认使⽤的是进程管理还是线程管理?
apache默认使⽤的是进程管理
77.实现中⽂字符串截取⽆乱码的⽅法是?
mb_substr();
78.⽤php写出显⽰客户端ip和服务端的ip代码:
$_SERVER['REMOTE_ADDR']
$_SERVER['SERVER_ADDR']
79.在http1.0中,状态码为401的含义是?如果返回"找不到⽂件"的提⽰,则⽤header函数,其语句为? 401代表未被授权
header("HTTP/1.0 404 Not Found");
80.在php中error_reporting这个函数的作⽤是?
设置错误级别与错误信息回报
81.简述如何得到当前执⾏脚本路径,包括所得到的参数?
$_SERVER['REQUEST_URI'];
82.mysql_fetch_row和mysql_fetch_array之间的区别?
mysql_fetch_row获取⼀个索引数组
mysql_fetch_assoc获取⼀个关联数组
83.下⾯程序会输出什么?
<?php
$num = 10;
function multiply(){
$num = $num*10;
}
multiply();
echo$num;
>
正确答案是:10
84.写出下⾯程序的输出结果?
<?php
$b = 201;
$c = 40;
$a = $b>$c:4:5;
echo$a;
>
正确答案是:4
85.$a = 'abcdef';请取出$a的值并打印第⼀个字母:
echo $a{0};
86.请写出php5的权限修饰符
public 公有的
private 私有的
protected 受保护的
87.ftp://:2121/incoming/rls.sfv请给出这个url的各部分的含义 ftp:// 是协议
是域名
2121 是端⼝
/incoming/ 是⽬录
rls.sfv 是⽂件
88.服务器常⽤端⼝?
80 http协议
21 ftp协议
22 ssh协议
53 dns协议
443 https协议
89.请写出5条linux命令
ls
cd
pwd
mkdir
rmdir
90.请列出5个常⽤的php操作mysql函数:
mysql_connect()
mysql_query();
mysql_select_db()
mysql_fetch_assoc()
mysql_fetch_row
91.有两张数据表,表user(id,name)记录了⽤户的id和昵称,表article(id,uid,title,content,time)记录了⽤户发表的⽂章标题,内容和时间,写⼀个sql语句打印出每个⽤户的昵称及其发表的⽂章总数?
select ,count(*) from user left join article on user.id = article.id group by user.id;
92.把左连接中产⽣的null替换成"0":
select ,count(article.uid) from user left join article on user.id = article.uid group by user.id;
93.请写出3个php中预定义全局变量
__LINE__
__FILE__
__FOUCTION__
94.请写出下列代码的执⾏结果
<?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);//4
echo$my_var;//8
echo var1;//7
echo$var2;//10
$bar = 'foo';
$my_var = 10;
echo$bar($my_var);//4
>
95.输出⽤户的ip地址,并判断⽤户的IP地址是否在192.168.1.100-----192.168.1.150之间
$sip = ip2long('192.168.1.100');
$eip = ip2long('192.168.1.150');
$getip = ip2long('192.168.1.120');
if($getip>=$sip and $getip<=$eip){
echo 'yes';
}else{
echo 'no';
}
96.将⼆维数组按照name的长度进⾏重新排序,按照顺序将id赋值(从1开始),⼆维数组如下:
$arr = array(
array('id'=>0,'name'=>'123833'),
array('id'=>0,'name'=>'aaa'),
array('id'=>0,'name'=>'dfsdfsdfsdfs'),
array('id'=>0,'name'=>'12245'),
array('id'=>0,'name'=>'122lll')
);
实现代码如下:
foreach($arr as$val){
$arr2[] = strlen($val['name']);
}
array_multisort($arr2,$arr);
foreach($arr as &$val2){
$val2['id'] = ++$i;
}
print_r($arr);
97.实现不⽤第三个变量交换,$a,$b的值,$a,$b的初始值⾃⼰定:
$a = "linux";
$b = "php";
$b = array($a,$b);
$a = $b[1];
$b = $b[0];
echo$a;
98.⽤php打印前⼀天的⽇期格式为:2006-5-10 22:22:21:
date('Y-n-d H:i:s' ,strtotime('-1 day'));
99.下⾯程序输出什么?
<?php
$int_a = 5;
function factorial(){
for($int_i=$int_a;$int_i>0;$int_i--){
$int_a = $int_a * $int_i;
}
}
factorial();
echo$int_a;
>
正确答案是:5
100.在项⽬开发中,需要上传超过8M的⽂件时,请说明php.ini需要修改的配置项upload_max_filesize = 8
post_max_size = 9⼀定要⼤于等于上⾯的那个
101.php代码如下
<?php
$data = array('a','b','c');
foreach($data as$key => $val){
$val = &$data[$key];
}
>
问题1:程序执⾏时,每⼀次循环结束后变量$data的值是什么?请解释
第⼀次:
$data = array('a','b','c');
第⼆次:
$data = array('b','b','c');
第三次:
$data = array('b','c','c');
问题2:程序执⾏完成后,变量$data的值是什么?请解释
$data = array('b','c','c');。

相关文档
最新文档